OpenMP内存访问和性能下降

时间:2013-07-29 13:18:12

标签: performance parallel-processing load openmp bandwidth

我有一个利用OpenMP的程序,可以在具有32个核心服务器的双CPU上获得极大的加速。我正在使用的输入参数不允许完全加载CPU。

今天,另一个程序100%加载了几个核心。当我启动我的程序时,即使CPU上的负载像往常一样很高(~2500%),它也非常慢。我删除了并行指令,并注意到了一些性能改进。

这可能是由于内存带宽有限吗?我怎样才能进一步调查问题并最终改进我的代码?

1 个答案:

答案 0 :(得分:2)

内存访问不一定会降低性能。如果使用静态调度(通常是默认值),则将循环划分为分配给线程的块。 如果线程绑定到已经忙碌的核心,则会大大降低运行时性能。 如果您在不保证是资源的唯一用户的环境中运行,则可以通过动态调度获得更好的性能。

如果您未指定计划类型,请使用

运行程序
OMP_SCHEDULE=dynamic  ./my_program

看看它是否有帮助。