此引用来自FFTW Manual:
[...]第三,在创建要并行化的计划之前,您应该这样做 拨打:
void fftw_plan_with_nthreads(int nthreads);
nthreads参数表示你想要FFTW使用的线程数(实际上,是 最大数量)。 [...]
使用OpenMP,配置FFTW以使用当前正在运行的所有内容 OpenMP线程(由omp_set_num_threads(nthreads)设置或由
OMP_NUM_THREADS
环境变量),您可以这样做:fftw_plan_with_nthreads(omp_get_num_threads()
)。
我认为最后一个命令是错误的。它应该是fftw_plan_with_nthreads(omp_get_max_threads())
。 omp_get_num_threads()
将返回当前的线程数。但那可能是1
,因为有人在一个线程上创建了fftw_plan。 omp_get_num_threads()
不会返回OMP_NUM_THREADS
的值,也不会是omp_set_num_threads(nthreads)
的倒数。
我是对的还是我误解了FFTW或OpenMP API?