首页 > 解决方案 > openmp:在我的桌面上使用多个线程时性能会降低,但在我的服务器上则相反

问题描述

我相信我读过很多关于 StackOverflow 线程的文章,内容是在使用 OpenMP 增加线程数时会降低性能。主要是因为虚假分享。我的情况完全不同,因为我的两台机器显示相反的结果。

我正在运行STREAM benchmark,关于我的机器的信息写在下面:

两台机器之间的内存信息相似,所以我将省略它。

我运行了很多次基准测试并检查了运行之间的差异是否足够小。结果非常有趣。

OMP_NUM_THREADS当使用该选项增加线程数时,Gold-6148(又名服务器)会获得增强的结果。但是,i5-9400(又名桌面)的结果会随着多线程数的增加而减少。

我设置了STREAM_ARRAY_SIZE20m,并仔细检查了各种尺寸,所以它不会影响结果。另外,我怀疑可能是因为两者之间的 glibc/gomp 库有任何区别,但没有区别。

知道为什么会这样吗?我只是心不在焉地反复看下面的图表... i5-9400 结果 gold-6148 结果

标签: multithreadingopenmp

解决方案


两台机器之间的内存信息相似,所以我将省略它。

在谈论 STREAM 基准时,您不能简单地忽略最重要的信息。Xeon Gold 6148六个 DDR4-2666 内存通道,分布在两个独立的内存控制器上,而i5-9400(假设 i5-9700 是一个错字,因为 i7-9700 是八核 i7 而不是六核 i5 CPU)只有两个单个内存控制器上的DDR4-2666 内存通道. 因此,在所有六个通道上都安装了内存模块的 6148 能够在两个通道上提供相同类型内存模块的 i5-9400 的内存带宽的 3 倍。它还可以同时处理更多的内存请求,因此可以通过多个线程提供更好的内存利用率。因此,实际的内存配置非常重要。

解读 STREAM 结果需要深入了解底层 CPU 架构。Georg Hager有一篇关于该主题的好文章


推荐阅读