如何在多线程中使用FFTW

How to use FFTW in multithreading?

本文关键字:FFTW 多线程      更新时间:2023-10-16

我使用两个Boost线程,每个线程使用不同的FFTW计划(例如:线程1使用"plan_fft",线程2使用"plan_ifft"(。当我只运行一个线程(线程2(时,它工作得很好,但当我同时运行两个线程时,就会出现分段错误。我认为这可能是因为创建计划不是线程安全的。如果有人提供"如何以并行方式在两个线程中使用两个不同的fftw_plans(每个在一个线程中("的解决方案,对我来说将是非常有帮助的。

作为FFTW多线程开发人员提供的解决方案,我忘了提到一件事:

  1. 使用信号量锁
  2. 在一个线程中创建所有计划

我实现了第二个(即在主程序中创建了所有计划,然后从主程序中调用了两个线程(。当我这样做的时候,没有错误和分割错误,但我没有得到结果。

请注意:这两个线程是独立的,不共享任何公共数据,所以我认为信号量锁不适用于我的情况。

我的疑问是:我们能在主程序中创建(和销毁(计划,并在两个不同的线程中执行这两个不同计划吗?

FFTW人员在这里为线程安全主题提供了一个很好的总结。Wrapup:除了fftw_execute之外,没有什么是线程安全的,所以你必须注意,例如,只有一个线程创建计划。但是,并行执行它们应该没有问题。