
私は、C で書かれた複雑な信号処理アルゴリズムの実行時間を、すべて Linux が稼働する複数の異なるコンピューターで測定しています。コードは、pthreads ライブラリを使用した独自の方法と、FFTW パッケージが提供する並列処理によって部分的に並列化されています。4 台のコンピューターのうち 3 台では、並列係数 P が 1 からマシン上の物理コアの数まで増加すると、実行時間が予想どおりに短縮されます。問題は、マシンの 1 台が逆の動作を示すことです。つまり、P=1 から P=2 にすると、実行時間が増加します。
4 台のマシンのコードは同一ですが、ハードウェアと OS は異なります。ハイパースレッディングはオンになっています。すべて大容量の 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
12: 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
barra: 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 に戻してみましたが、結果は同様でした。
コードはそれぞれ同一であり、同じ Makefile (コンパイラ スイッチ) を使用して、それぞれ gcc を使用してコンパイルします。
バラが他の魚のように行動しない理由について何か考えはありますか?
ありがとう、
C
答え1
/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor で CPU ガバナー設定を「powersave」から「performance」に変更すると、問題は解決しました。