2014年11月26日水曜日

並列処理の話(その4)ハイパースレッディング・テクノロジー

大須賀です

今回は、ハイパースレッドの話をしましょう。


ハイパースレッディング・テクノロジーとは、インテルがCPUコアを効率よく使用するために提供している手法です。

Core i7をCPUに持つデスクトップコンピュータは、4つの物理コアを持ちますが、Windowsのタスクマネージャで見ると、あたかも8つのCPUコアが存在するように見えます。このうち4つのコアがハイパースレッディングの論理コアになります。

詳細な説明はWikipediaに譲りますが(非常に簡潔にわかりやすく書いてあるので感激しました)、簡単に言うと、インテルのハイパースレッドはひとつのコアを論理的に2つに見せて、通常は同時に動かない整数演算の回路と浮動小数点演算回路が2つのコアでそれぞれ同時に要求されたときだけ性能が2倍になります。しかしその他の回路は共有ですので、その性能は1CPU時の1.2~1.4倍程度と言われています。

特にGUIを多用するWindows等のクライアントPCでは効率が良いため、実装されているマシンが多いのですが、例えばCore-i7で8つのCPUが見える場合、8つのプロセスを並列で実行しても良いのでしょうか?

答えは否です。

8つのCPUコアがみえていても、そのうつ4つは仮想ですので、8本のプログラムが最大のパフォーマンスで動作することはできません。
プログラム以外にOSや他のアプリもCPUを使用しますから、4プロセスを限度に考えた方が良いと私は考えます。

Core i7のマシンを専用の仮想マシンとして動作させた場合などは、BIOSでハイパースレッディングをOFFにする例も多いです。
Windowsの2003ぐらいまでは、OSのCPUコア数のレポートでは、ハイパースレッドと物理コアの区別がありませんでした。しかし、いまではきちんとOSからハイパースレッドの数が返ってきます。しかし、VMの場合はそうは行きません。VMWareは仮想マシンに割り当てられたCPUコアを、物理コアとしてゲストマシンにレポートしますから、きちんとハイパースレッドのコアを意識して動作するSQL Server等は、本来の性能が出せないのです。


C:\>ProcessInfo64

NUMA node: 1
Physical processor package: 1
Processor core: 4
Logical processor: 8

C:\>
(自作プログラムによるCPUレポート)


先日、あるデモでWindows Server 2012でハイパースレッド抜きの合計64コアのCPUを積んだマシンのタスクマネージャを見ましたが、なんと、あのCorei7で横に8個並ぶCPUグラフが8個×8段並んでいました。

昔、80286でしたが物理2CPU搭載可能なPC9821を買って、2CPUにするために秋葉原で部品を探し回ったのを思い出し、技術の進歩に唖然とした次第です。

0 件のコメント:

コメントを投稿