【问题标题】:OpenMP "for" in realtime audio processingOpenMP“用于”实时音频处理
【发布时间】:2015-02-02 23:40:05
【问题描述】:

我正在尝试使用 OpenMP 来获得一些实时音频处理性能。我采用了一个看起来像这样的算法:

preparation
for (int I=0; I<1024; I++)
    something quite demanding
finalization

未并行化时,根据系统计量器,它占用了大约 3% 的 CPU。现在,如果我并行化主循环,OMP 使用 8 个线程(4 核 i7 和超线程),主线程消耗下降到 2%,所以响应快了 33%,但系统性能表开始显示 100%(! !) 整体系统响应,所有核心均已满载。

看起来即使在等待下一个音频数据请求期间,线程也在做很多“不占用 CPU”的工作。任何想法可能是什么?响应速度提高了 33% 这一事实很好,但假设可能有许多类似的处理器同时运行,那么 100% 的 CPU 使用率是不可用的。也许 OMP 线程正在积极等待更多任务?

我正在使用 MSVC 2013。

【问题讨论】:

  • 您是否可以分享有关如何并行化该循环的详细信息(代码)?

标签: openmp


【解决方案1】:

您是对的,线程正在旋转(在屏障处等待)以进行下一次迭代。您可以使用 OMP_WAIT_POLICY 来控制此行为,对于 MSVC,已经有一个关于如何执行此操作的问题。

我应该警告您,如果您将策略更改为 PASSIVE,其他线程可能会很慢地唤醒回来做工作,这可能会给您的计算带来延迟或抖动。如果处理在一个线程上运行速度可以接受,我会继续只使用一个线程来保证实时性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-18
    • 2017-08-02
    • 1970-01-01
    • 2010-09-29
    • 2013-06-23
    • 1970-01-01
    • 2013-09-17
    相关资源
    最近更新 更多