を知りたいです。
当方の予想ではHTをONにしてもFPU(今回はFMA?)の1core当りの数は増えないので、
速度が倍になるような事は無いと考えていますが、実際の所どんなもんでしょうか?
プログラムによりますが
浮動小数点演算を多用するプログラムでは HTをONにすると遅くなる場合が多いです
FPUのような演算ユニットの順番待ちになり,CPUの各コアの命令パイプラインが停止する頻度が高くなるためです.
実際のベンチマーク結果としては,たとえば以下のものがあります.
http://www.pugetsystems.com/blog/2014/07/02/Hyper-Threading-may-be-Killing-your-Parallel-Performance-578/
このベンチマークは Haswell ではなく IvyBridge ですが
Xeon system (4 x E5-4624L v2 10-core) で
povray というコンピュータグラフィックス(CG)を生成するプログラムを使って
ベンチマークを取っています.
ページ中央のグラフを見ると,明らかにHT無効の方が高速です
ページの後半に詳細が書いてありますが, haswell でも同じ傾向で,浮動小数点演算を多用するプログラムでは HTをONにすると遅くなる場合が多いとのことです.
コメント(3件)
> コンピューターが多くのソフトを同時に動かさなければならない時でも、複数のコアでその作業を分担することが出来ます。
> そのため以前はソフトウェアを1つしか動かさない時は、コアが少ない方が速いという場合もありました。
という事です。コアが多いCPUはマルチタスク環境における分散処理においてこそ、その真価を発揮します(単調な重い処理向きではないという事)。
説明が不足していたみたいで申し訳ありません。仮に物理4コアのCPUを積んだマシンがあるとします。
このマシンではHT機能がOffであればOSからは演算装置として4つのコアを持っていると認識されます。
一方HT機能がOnであれば、8つのコアを持っていると認識されます。(ここまではいいですか?)
ここで、疑問なのは、OSから見て全コアをフルに活用して浮動小数点計算をさせた場合のPC全体としての計算処理速度(スループット)は
どっちの方が早いのかという点です。
もうちょっと詳しく書くと、まず、同じ計算量を要するプログラム(タスク)を8個用意します。
次に、以下の設定でタスクをスケジューリングさせて、同時に計算を初めた場合、どの程度速度に差が付くのかを
知りたいのです。
・HT OffのPCでは4つずつ2回に分けて計算させるように
・HT ONのPCでは8個同時にタスクを計算させる
(ちなみに計算は浮動小数点演算がほとんどだとします。)
仮にFPUが1コアに1つしかなければ、幾らタスクを並列に処理しようとしても
同時に処理できる浮動小数点演算の総数は4つ以上にならないと考えていますので、
当方の予想ではほぼ同時に計算が終わると考えているのですが、実際のhaswellや他のCore i7シリーズでは
どんな結果になるのかについて、またその根拠が知りたいのです。
http://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%82%B9%E3%83%AC%E3%83%83%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%BB%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC
>>
例えば整数を処理するパイプラインが働いていも、浮動小数点やMMXなどのマルチメディア計算をするパイプラインが遊んでいることがある。そこで一つのCPUながらデコードやスケジュールをする部分を複数とし、論理的に複数のCPUと見なすことにより、空いているパイプラインを埋めて効率を向上させることが考えられた。
<<
HTの目的がこうである以上、
浮動小数点を扱うパイプラインが遊んでいるわけではないので、
そうした特殊な状況下においては、
HT機能のONによる処理速度の向上は全く期待できないであろう、
という結論が導けると思うのですが。
「従ってハイパースレッディングで効率が良いのは~」
以降も目を通されるとよいかと。
…と書いただけではきっと目を通してくれないと思うので、
外部リンク[1]も書き出しておきますね。
http://japan.cnet.com/news/ent/20091397/