实时音频处理中的 OpenMP "for"
OpenMP "for" in realtime audio processing
我正在尝试使用 OpenMP 来获得一些实时音频处理性能。我采用了如下算法:
preparation
for (int I=0; I<1024; I++)
something quite demanding
finalization
未并行化时,根据系统仪表,它占用了 CPU 的大约 3%。现在,如果我并行化主循环,OMP 使用 8 个线程(4 个带超线程的核心 i7),主线程消耗下降到 2%,因此响应速度快 33%,但系统性能表开始显示 100%(! !) 整体系统响应,所有内核均已满载。
即使在等待下一个音频数据请求期间,线程似乎也在做很多 "nothing taking CPU"。有什么想法吗?响应快 33% 这一事实很好,但假设可能同时有许多类似的处理器 运行,100% CPU 的使用率是不可用的。也许 OMP 线程正在积极等待更多任务?
我正在使用 MSVC 2013。
你是对的,线程正在旋转(在屏障处等待)下一次迭代。您可以使用 OMP_WAIT_POLICY 控制此行为,并且已经有关于如何为 MSVC 执行此操作的问题。
我应该警告您,如果您将策略更改为 PASSIVE,其他线程唤醒工作的速度可能会很慢,这可能会给您的计算带来延迟或抖动。如果在一个线程上的处理速度运行可以接受,我会继续只使用一个线程来保证实时性。
我正在尝试使用 OpenMP 来获得一些实时音频处理性能。我采用了如下算法:
preparation
for (int I=0; I<1024; I++)
something quite demanding
finalization
未并行化时,根据系统仪表,它占用了 CPU 的大约 3%。现在,如果我并行化主循环,OMP 使用 8 个线程(4 个带超线程的核心 i7),主线程消耗下降到 2%,因此响应速度快 33%,但系统性能表开始显示 100%(! !) 整体系统响应,所有内核均已满载。
即使在等待下一个音频数据请求期间,线程似乎也在做很多 "nothing taking CPU"。有什么想法吗?响应快 33% 这一事实很好,但假设可能同时有许多类似的处理器 运行,100% CPU 的使用率是不可用的。也许 OMP 线程正在积极等待更多任务?
我正在使用 MSVC 2013。
你是对的,线程正在旋转(在屏障处等待)下一次迭代。您可以使用 OMP_WAIT_POLICY 控制此行为,并且已经有关于如何为 MSVC 执行此操作的问题。
我应该警告您,如果您将策略更改为 PASSIVE,其他线程唤醒工作的速度可能会很慢,这可能会给您的计算带来延迟或抖动。如果在一个线程上的处理速度运行可以接受,我会继续只使用一个线程来保证实时性。