gpt4 book ai didi

multithreading - 共享内存计算机上的多线程 FFTW 3.1.2

转载 作者:行者123 更新时间:2023-12-03 12:57:56 25 4
gpt4 key购买 nike

我用 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。

如果有人知道这里发生了什么......非常感谢!

最佳答案

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

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

关于multithreading - 共享内存计算机上的多线程 FFTW 3.1.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1435297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com