在某些 Linux 机器上并行处理增益较差,而在其他机器上则较好

在某些 Linux 机器上并行处理增益较差,而在其他机器上则较好

我正在几台不同的计算机上测量用 C 语言编写的复杂信号处理算法的运行时间,这些计算机都运行 Linux。代码通过我自己的一些方法(使用 pthreads 库)和 FFTW 包提供的并行处理部分并行化。四台计算机中的三台显示,随着并行因子 P 从 1 增加到机器上的物理核心数,执行时间预计会减少。问题是其中一台机器表现出相反的行为:从 P=1 到 P=2 会导致执行时间增加。

四台机器上的代码相同,但硬件和操作系统不同。超线程已启用。所有机器都具有大容量 RAM。

toren:Ubuntu 18.04.5、4.15.0-122-generic、4 个物理核心、Xeon(R) CPU E3-1535M v5 @ 2.90GHz、gcc 版本 7.5

[email protected]>./ssca2_parallelism 
P = 1   ssca2: elapsed PROGRAM TIME 1.025756e+01
P = 2   ssca2: elapsed PROGRAM TIME 7.500780e+00
P = 4   ssca2: elapsed PROGRAM TIME 6.246292e+00
P = 8   ssca2: elapsed PROGRAM TIME 5.483851e+00
P = 16   ssca2: elapsed PROGRAM TIME 7.457973e+00
P = 32   ssca2: elapsed PROGRAM TIME 8.497999e+00
P = 64   ssca2: elapsed PROGRAM TIME 1.035557e+01

十二:Fedora Core 31,5.8.15-101.fc31.x86_64,12 个物理核心,Xeon(R) CPU X5650 @ 2.67GHz,gcc 版本 9.3

[email protected]>./ssca2_parallelism 
P = 1   ssca2: elapsed PROGRAM TIME 1.833605e+01
P = 2   ssca2: elapsed PROGRAM TIME 1.171951e+01
P = 4   ssca2: elapsed PROGRAM TIME 8.526402e+00
P = 8   ssca2: elapsed PROGRAM TIME 7.255262e+00
P = 16   ssca2: elapsed PROGRAM TIME 1.268390e+01
P = 32   ssca2: elapsed PROGRAM TIME 1.188247e+01
P = 64   ssca2: elapsed PROGRAM TIME 1.417718e+01

flash:Fedora Core 31,5.8.15-101.fc31.x86_64,28 个物理核心,Xeon(R) CPU E5-2697 v3 @ 2.60GHz,gcc 版本 9.3

[email protected]>./ssca2_parallelism 
P = 1   ssca2: elapsed PROGRAM TIME 1.462457e+01
P = 2   ssca2: elapsed PROGRAM TIME 1.066421e+01
P = 4   ssca2: elapsed PROGRAM TIME 8.244503e+00
P = 8   ssca2: elapsed PROGRAM TIME 7.694590e+00
P = 16   ssca2: elapsed PROGRAM TIME 1.030944e+01
P = 32   ssca2: elapsed PROGRAM TIME 1.079129e+01
P = 64   ssca2: elapsed PROGRAM TIME 1.413906e+01

示例:Ubuntu 18.04.4、5.4.0-52-generic #57~18.04.1-Ubuntu、8 个物理核心、Xeon(R) W-3225 CPU @ 3.70GHz、gcc 版本 7.5

[email protected]>./ssca2_parallelism 
P = 1   ssca2: elapsed PROGRAM TIME 8.891541e+00
P = 2   ssca2: elapsed PROGRAM TIME 1.006297e+01
P = 4   ssca2: elapsed PROGRAM TIME 8.619259e+00
P = 8   ssca2: elapsed PROGRAM TIME 7.233214e+00
P = 16   ssca2: elapsed PROGRAM TIME 7.765741e+00
P = 32   ssca2: elapsed PROGRAM TIME 8.301655e+00
P = 64   ssca2: elapsed PROGRAM TIME 1.114389e+01

我尝试将barra的内核恢复到4.15,但结果还是类似的。

每个代码都是相同的,我使用 gcc 在每个代码上进行编译,使用相同的 Makefile(编译器开关)。

有什么想法可以解释为什么巴拉鱼的行为与其他鱼不一样吗?

谢谢,

C

答案1

将 /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 中的 CPU 调速器设置从“powersave”更改为“performance”即可达到目的。

相关内容