如何在多线程中使用FFTW?

时间:2014-05-02 13:42:15

标签: c++ multithreading semaphore fftw

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

我忘了提及FFTW多线程开发人员提供的解决方案:

  1. 使用信号量锁
  2. 在一个帖子中创建所有计划
  3. 我实现了第二个(即在主程序中创建了所有计划,然后从主程序中调用了两个线程)。当我这样做时,没有错误和分段错误,但我没有得到结果。

    请注意:这两个线程是独立的,不共享任何常见数据,因此我认为信号量锁对我的案例不起作用。

    我怀疑:我们可以在主程序中创建(并销毁)计划,并在两个不同的线程中执行这两个不同的计划吗?

1 个答案:

答案 0 :(得分:0)

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