コンパイラのパフォーマンス上のハイパースレッディングの影響?
-
19-09-2019 - |
質問
私たちはできるだけ速く大規模なプロジェクトをコンパイル(GCCまたはLinuxカーネルを言う)してみたいと思います。ハイパースレッディング機能を持つCPU(たとえばインテルCore i7プロセッサー)は、任意の速いハイパースレッディングを有効または無効にしてコンパイラを実行していますか?これをテストする任意の公表のベンチマークはありますか?
ハイパースレッドの私の理解は、各コアは、2つ(又はそれ以上のプロセス)から命令を選択することができることです。それは、機能ユニットがアイドル状態になる可能性は少ないですので、これは通常、コアは、より効率的になります。しかし、そこにパフォーマンスの低下の可能性は、キャッシュと同じコアを共有リソース上で実行中のプロセス以来だし、お互いに干渉することがあります。パフォーマンスが実際に向上するかどうかは、ワークロードに依存します。
コンパイラのワークロードのためので、パフォーマンスが向上しますか?もしそうなら、どのくらいですか?
により、解決
のUbuntu 8.04 x86でのcoreutils-8.4のコンパイル
HTとインテルAtom 1.6 GHzのが有効になってます:
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null
real 2m33.375s
user 2m22.873s
sys 0m10.541s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null
real 1m54.707s
user 3m26.121s
sys 0m13.821s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null
real 2m33.372s
user 2m22.753s
sys 0m10.657s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null
real 1m54.851s
user 3m26.145s
sys 0m13.685s
~/coreutils-8.4$
だからハイパースレッディングはのの33%より多くの処理能力に相当する75%の実行時間を短縮します。 (私はすべてがメモリキャッシュにあることを確認するために二回、それらを実行しました。)
そして、ここでのUbuntu 8.04 x86の
上のcoreutils-8.4をコンパイルするための速度が向上しないだけでそのmake -j2
を表示するための制御実験があります
シングルコアコア2クワッド2.5 GHzのVM(NO HT):
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null
real 0m44.453s
user 0m38.870s
sys 0m5.500s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null
real 0m45.131s
user 0m40.450s
sys 0m4.580s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null
real 0m44.621s
user 0m39.090s
sys 0m5.340s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null
real 0m45.165s
user 0m40.390s
sys 0m4.610s
~/coreutils-8.4$
他のヒント
これは、すべての依存します。それがある場合には、間違いなくハイパースレッディングは、OSが異なるコア上に、コンパイラのスレッドのさまざまな部分をスケジュールすることができますので、少し物事をスピードアップします。私は、コンパイルは、一般的に、集中処理するので、スピーディなハードドライブは、コアの100年代とスピーディーなプロセッサよりも、必要性のより多くのだろうことよりも多くのI / Oバウンドであることをケンに同意します。