我使用带有 Fortran 的FFTW 3.1.2 来执行实数到复数和复数到实数的 FFT。它在一个线程上完美运行。
不幸的是,当我在 32 CPU 共享内存计算机上使用多线程 FFTW 时遇到了一些问题。我有两个计划,一个用于 9 个实数到复数 FFT,一个用于 9 个复数到实数 FFT(每个实数场的大小:512*512)。我使用 Fortran 并编译(使用ifort
)链接到以下库的代码:
-lfftw3f_threads -lfftw3f -lm -lguide -lpthread -mp
程序似乎编译正确,函数sfftw_init_threads
返回一个非零整数值,通常为 65527。
然而,即使程序运行完美,使用 2 个或更多线程也比使用 1 个要慢。一条top
命令显示奇怪的 CPU 负载大于 100%(并且比 n_threads*100 大得多)。一条htop
命令显示一个处理器(假设 1 号处理器)正在以 100% 的程序负载运行,而所有其他处理器(包括 1 号处理器)都在以 0% 负载、0% 内存运行同一程序和 0 时间。
如果有人知道这里发生了什么......非常感谢!