【问题标题】:Multi threaded FFTW 3.1.2 on a shared memory computer共享内存计算机上的多线程 FFTW 3.1.2
【发布时间】: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


    【解决方案1】:

    这看起来可能是同步问题。如果除一个之外的所有线程都被锁定,例如,您可以获得这种类型的行为。通过信号量到库调用。

    你怎么称呼规划师?您的所有函数调用是否正确同步?您是在单个线程中还是在所有线程中创建计划?我假设您已经阅读了 FFTW 文档中关于 thread safety 的注释... ;)

    【讨论】:

      【解决方案2】:

      除非您的 FFT 非常大,否则 FFTW 中的自动多线程不太可能是明智的取胜之道。库内的同步开销可以支配正在完成的计算。您应该分析不同的尺寸并查看盈亏平衡点在哪里。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-24
        • 1970-01-01
        • 2020-02-23
        • 1970-01-01
        • 2011-09-15
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        相关资源
        最近更新 更多