エンタープライズ:特集 | 2002/11/28 18:24:00 更新 |
Linuxでハイパー・スレッディング――Pentium4/3.06GHzで遊ぼう
第1回 Linux上でなかなか動かないHT (1/6)
現在リリースされているLinuxカーネルは「ハイパー・スレッディング・テクノロジ」(HT)に対応しているので、ほとんどのLinuxディストリビューションでHTが利用できるようになっている。Xeonでの動作は可能なようだが、Pentium4/3.06GHzでもちゃんと動作するのだろうか。まずはLinux上でSMPとして認識させるところから始めてみたい
11月14日、インテルが「ハイパー・スレッディング・テクノロジ」(HT)搭載のPentium4/3.06GHzをリリースしたのは既報の通りであり、早速多くのベンダーから、このCPUを搭載した製品が発売されている。残念ながら自作向けのバルク/リテールパッケージは品薄状態が続いており、解消するのは年末から来年と伝えられている。しかしそれでも少量ながら出回ってはいるので、すでに入手された幸運な方もおられよう。
さて、このHT搭載Pentium4/3.06GHzのレビュー記事は多いが(実は筆者も書いている)、ほとんどがWindowsプラットフォームを利用してのもので、あまり代わり映えしないことおびただしい。そこで今回はちょっと毛色を変えて、Linux環境での確認をしてみたい、と思う。
HTのアーキテクチャ
まず最初に、HTのアーキテクチャに関して説明しておく。Pentium4のHTとは、要するに「SMT」(Simultaneous Multi-Threading)である。なぜSMTを採用する必要があったのか、という話はたとえばこの辺にも解説があったりするが、もう一度簡単におさらいしておこう。
PCに限らず、多くのプロセッサは、性能向上のために
- 動作速度の向上と、これを成し遂げるためのパイプライン段数の増加やスーパーパイプライン化
- スーパースケーラや完全アウトオブオーダを搭載し、実行ユニットを強化することでのIPC(Instructions Per Cycle:1クロックあたりの処理数)の増加
- メモリアクセスの高速化のため、FSB(Front Side Bus)のバンド幅強化や、大容量キャッシュの搭載
といった技法を採用している。
たとえばPentium4ならば、NetBurstアーキテクチャは20段にもおよぶ長大なパイプラインであり、これにより3GHz以上の高クロック動作を可能にしているし、FSBは基準クロックこそ100/133MHzだが、データはQDR(Quad Data Rate:4倍速)の400/533MHzで送られるといった具合だ。またL2キャッシュを512KBに増量したものこの一環と言える。
ただ、Pentium4の場合は動作速度を向上させるためにIPCを犠牲にしたとも言えるアーキテクチャであり、絶対性能という面ではともかく、同一クロックのAthlon XPには遠く及ばない(2.26GHz動作のAthlon XP 2800+とPentium4/2.80GHzがほぼ同一性能、というあたりがこれを如実に物語っている)わけで、効率が決してよいわけではない。
この効率の悪さは、今後動作クロックが上がるほど、より問題になっていく。現状のPentium4ですら、実行ユニットの利用率は平均30%程度だという。つまり8つも実行ユニットを用意してブン廻しても、実際に利用されているのは2.4ユニット程度ということになる。この効率の悪さを改善しない限り、いくら動作クロックを上げてもさっぱり性能が変わらない、ということになりかねない。これを改善するために、インテルは早くから「Jackson Technology」という形で実行ユニットの利用効率を上げるための方法を研究していた。その具体的な成果がHTというわけだ。
HT、あるいはSMTというアーキテクチャ自体は1990年代に論文が多く出ており、決して目新しいものではない。メインとなる発想は、「1つの処理ストリームだけを実行させる限り、IPCをドラスティックに向上させるのは難しい」という厳然たる事実である。動作クロックを上げるためにはパイプライン段数の増加が避けられないが、これをするとパイプラインストールの可能性が高まるし、またパイプラインハザードのペナルティがより大きくなる。これを避けるには大容量のL2キャッシュを搭載したり、分岐予測の精度を徹底的に上げるしかないわけだが、前者はダイ面積の増加にそのまま繋がるし、後者はこれまたトランジスタ数の増加になってしまう。
特に分岐予測に関しては、Itaniumが採用している投機実行(分岐の両側の処理を並行してパイプラインに投入しておき、分岐の判断が出た時点で不要な方を破棄する)とか、Hammerのように履歴テーブルをL2キャッシュにまで拡張できる(事実上履歴テーブルの上限がなくなる)といった豪快なアーキテクチャを使うか、Baniasで搭載される3種類の分岐判断機構(JITコンパイラやオブジェクト指向言語にあわせた局所/大域ループの検出機能を持つ)などの複雑な処理が必要になり、これがまたトランジスタ数の増加あるいは高速化の足を引っ張るといった具合だ。
そこでSMTは発想を変え、「複数の処理ストリームを1つのプロセッサで並行動作させれば、依存関係に縛られることも少ないから、実行ユニットの利用効率を上げることが可能になる」という仕組みを取ることにした。
[大原雄介,ITmedia]