0

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

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

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

4

1 回答 1

2

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

如果您没有指定调度类型,请运行您的程序

OMP_SCHEDULE=dynamic  ./my_program

看看它是否有帮助。

于 2013-07-29T22:52:53.547 回答