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