【问题标题】:How to use FFTW in multithreading?如何在多线程中使用 FFTW?
【发布时间】:2014-05-02 13:42:14
【问题描述】:

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

我忘了提一件事,FFTW 多线程开发者提供的解决方案:

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

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

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

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

【问题讨论】:

标签: c++ multithreading semaphore fftw


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-09
    • 2012-07-27
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 2017-10-31
    相关资源
    最近更新 更多