ハイパースレッディング調査¶
はじめに¶
Intel x86系CPUで搭載されるハイパースレッディング機構についての細部調査メモです。
機構¶
概要¶
1つの物理プロセッサー・コアを、OSから見て2つの論理コアとして振舞います。
コアの内部に2つの状態(レジスタを含むアーキテクチャー・ステート)を持ち、2つのスレッドを実行します。
コア内部では、スレッド毎に回路が用意されているものと、分割して使う回路、競合して使う回路があります。
NehalemアーキテクチャーではCPU命令(μ命令)4つを同時実行できますが、1つのスレッドでは4つの命令を同時実行できる機会が限られるので、別なスレッドにあてがうことで実行効率を高めようということです。
命令以外の処理は1つのリソースを共有するので、待ちが発生したり効率が下がる(スレッドが使えるキャッシュ量が半減)ので
スケジューリング¶
同一コアに2つのスレッドを割り当てるより、異なるコアに1つずつスレッドを割り当てる方が性能(単位時間当たりの処理量)が出るので、OSのスケジューリングではコアが物理か論理しを識別して割り当てを計画しています。
ハイパースレッディングが苦手な例¶
単一スレッドなアプリケーション¶
アプリケーションが並列性(複数スレッドで処理を分割)を持たない場合、ハイパースレッディングによってアプリケーションスレッドが実行するコアに別なプロセスのスレッドが割り当てられると、競合部分(同時には実行できない処理)による待ちが発生するので性能が出ない/落ちることがあります。
メモリI/Oが多いアプリケーション¶
2つのスレッドを動作させるため、1つのスレッドのときよりもコアのメモリI/Oが多くなります。メモリI/Oが多いアプリケーションはメモリI/Oが制限され、性能が劣化することがあります。
計算処理中心のアプリケーション¶
計算処理が多いと、すでにスーパースケーラー等でCPU命令(μ命令)4つの同時実行枠がほぼ使いきられていて、別なスレッドが同じコアにスケジュールされても余剰がなく性能がほとんど向上しない(コアのスケジューリング待ちと変わらない)ことがあります。
参考資料¶
- [1]インテル(R)ハイパースレッディング・テクノロジーのパフォーマンスに関する考察(邦訳) 2011年
http://www.isus.jp/article/performance-special/insights-to-hyper-threading/