この引用はFFTWマニュアルからのものです:
[...] 3 番目に、並列化したいプランを作成する前に、以下を呼び出す必要があります。
void fftw_plan_with_nthreads(int nthreads);
nthreads 引数は、FFTW で使用するスレッドの数 (実際には最大数) を示します。[...]
OpenMP で、現在実行中のすべての OpenMP スレッド (omp_set_num_threads(nthreads) または
OMP_NUM_THREADS
環境変数によって設定) を使用するように FFTW を構成するには、次のようにしますfftw_plan_with_nthreads(omp_get_num_threads()
。
最後のコマンドが間違っていると思います。である必要がありますfftw_plan_with_nthreads(omp_get_max_threads())
。omp_get_num_threads()
現在のスレッド数を返します。しかし、それはおそらく1
、1 つのスレッドで fftw_plan を作成しているためです。omp_get_num_threads()
は の値を返さOMP_NUM_THREADS
ず、 の逆ではありませんomp_set_num_threads(nthreads)
。
私は正しいですか、それともFFTWまたはOpenMP APIのどちらかを誤解していますか?