後藤弘茂のWeekly海外ニュース

Willametteも実はHyper-Threadingをサポート?


●LinuxのHyper-Threadingサポート判定で...

 0.18μm版Pentium 4(Willamette:ウイラメット)も0.13μm版Pentium 4(Northwood:ノースウッド)も、CPUIDでは「Hyper-Threading」テクノロジがインプリメントされていることになっている。ただし、Hyper-ThreadingがサポートするバーチャルCPU数の設定が1になっているため、Hyper-Threading対応OSではdisableと判断されるようだ。つまり、Hyper-Threadingでは、複数スレッドを並列に処理することでバーチャルCPUを実現するが、そのバーチャルCPU数が2以上でないとHyper-Threadingがenableにならないというわけだ。はたしてWillametteにHyper-Threadingは実装されているのか? 実装されていないなら、なぜCPUIDがこうなっているのか。

 先週、NorthwoodとWillametteにHyper-Threadingがインプリメントされているのでは、という記事を書いてから反響と進展がいろいろあった。まず、記事を読んだ首藤一幸氏という方から、CPUIDを解析したら、WillametteでHyper-Threadingサポートのbitが立っていたという指摘をいただいた。

 どういうことかというと、首藤氏はHyper-ThreadingがサポートされたLinuxカーネル2.4.17-pre5をPentium 4(Willamette)マシンで試したという。そうしたところ、起動時に「CPU: Hyper-Threading is disabled」というメッセージが出たそうだ。それで、どうしてLinuxカーネルが、“not supported”でなくて“disabled”という判定を行なっているのか調べたという。このあたりは、首藤氏の「日記」( http://www.shudo.net/diary/2001dec.html#20011207 )で簡単に説明されている。

 首藤氏によると、Linuxカーネルは、CPUID命令を実行してEDXレジスタの28bit目を見て、ここが立っていた(1になっていた)場合、Hyper-Threadingをサポートしていると判定しているという。そして、Linuxカーネルは28bit目が立っていた場合、次にEBXレジスタを参照、下から3byte目を見て、その値をバーチャルCPU(sibling)の個数と見なしているという。Willametteの場合は、ここが1なので、LinuxカーネルはHyper-Threadingがdisabledだと判定しており、2以上だとHyper-Threadingが有効になるというわけだ。

●CPUIDの予約領域のbitをHyper-Threadingに

 そこで、まず手元のWillametteのCPUIDをチェックしてみた。まず、Willamette 1.5GHzのCPUIDは、EDXが「0x3FEBFBFF」となる。2進法だと「0011 1111 1110 1011 1111 1011 1111 1111」なので、左から4つ目の28bit目は確かに立っている。そして、EBXは「0x00010808」なので「0000 0000 0000 0001 0000 1000 0000 1000」となり、3byte目は「0000 0001」で1となる。

 次に、Intelのマニュアル「IA-32 Intel Architecture Software Developer's Manual Volume 1 Basic Architecture」( http://developer.intel.com/design/Pentium4/manuals/ )をチェックしてみたところ、EDXの28bit目は予約領域になっていた。これも、首藤氏の指摘通りだ。そうすると、Intelは使っていなかった28bit目をHyper-Threadingサポートのフラグに割り当て、LinuxではIntelの技術サポートを得てHyper-Threadingサポートをインプリメントする時に、このbitを見るようになったということになる。

 ここまで調べたところで、こういう話なら、筆者よりうってつけのライターがいることに気がついた。そこで、ちょうどメールをピンポンしていたライターの大原雄介氏に振ってみたら、Linuxのソースを見て、きっちり解析してくれた。なので、より詳しいHyper-Threading実装の判定の解析は(他社メディアなのだけど)、Vmag.Onlineの「HyperThreadingの「謎」を探る――WillametteコアPentium 4にHyperThreadingが搭載?」を参照して欲しい。ここまでやるかというほど、詳細に解析してくれている。ちなみに、こうした事情から、双方の記事内容には重複があることをあらかじめお断りしておく。

 大原氏の記事を見るとわかるが、検証の結果は首藤氏が指摘した通りのステップでLinuxがHyper-Threadingを判定している。つまり、EDXの28bit目でHyper-Threadingのサポートの有無を見て、EBXの16~23bit目を見てバーチャルCPUの数を判定しているという。しかも、大原氏は、このインプリメントがIntelからのものであることも突き止めた。そうすると、LinuxのHyper-Threadingサポートの判定は、かなり確実性が高いことになる。ちなみに、Pentium IIIのCPUIDを取ると、28bit目は0になっている。

●NorthwoodとWillametteのそっくりなCPUコア

Northwoodのダイ
 じつは、この少し前、Intelの製造技術の記事を書いていて、12月の「2001 IEEE International Electron Devices Meeting(2000 IEDM)」でのIntelの発表資料を読んでいた。そうしたところ、そのプレゼンテーションのひとつ「Enhanced 130nm Feneration Logic Technology Featureing 60nm Transistors Optimized for High Performance and Low Power at 0.7 - 1.4 V」( http://www.intel.com/research/silicon/0.13micronlogic_pres.pdf )に、Northwoodのダイ(半導体本体)写真があった。それを見て、気がついたのは、NorthwoodとWillametteのCPUコアが酷似していることだ。下が、そのプレゼンテーションだ。

 NorthwoodとWillametteは、L2キャッシュのサイズが異なるため、ダイの右側に位置するL2のSRAMセルの占める割合は大きく異なる。ところが、それ以外のファンクションブロックは、ほとんどオプティカルシュリンクに見えるほど似ている。つまり、各ブロックのサイズは70%に縮小されているものの、形状や配置はまったく同じに見えるのだ。そして、各ブロックの物理的な面積比率や配置が同じなら、両CPUの機能は同じでではないか、と推測される。

 NorthwoodにHyper-Threadingがインプリメントされている可能性が極めて高いことは、先週のコラム「0.13μm版Pentium 4にもHyper-Threadingテクノロジを搭載!?」でレポートした通り。そして、Hyper-Threadingには5~10%のダイの増加が伴うとIntelは言っている。そうすると、Hyper-ThreadingがNorthwoodから新たにインプリメントされた機能だとしたら、WillametteとNorthwoodのコアにはもっと違いが出て来てもよさそうだ。

 もちろん、ダイ写真だけで、素人が機能を判断することはできない。それに、CPUIDも本当に機能としてインプリメントされているかどうかを示しているわけではない。Pentium 4からは、ここを立てて置いてEBXレジスタを参照させることにしたのかもしれない。だが、CPUIDとダイの相似によって、WillametteにHyper-Threadingが入っている疑いはますます濃くなったのは確かだ。

●Pentium 4はHyper-Threadingを前提としたアーキテクチャだったのか?

 大原氏とこの件について何度かやりとりした。面白いのは、大原氏がWillametteにはHyper-Threadingがインプリメントされていない(初期サンプルの盲腸の可能性はある)と見ていることだ。これも明確な理由があって、CPUの場合、ダイサイズ(半導体本体の面積)はコストと直結するため、コストを考えたら5~10%のダイの増加も避けるのが常識と大原氏は見ている。

 ただ、筆者はIntelの場合、ダイの増加を構わず、使わない可能性のある機能をインプリメントする可能性はかなり高いと考えている。何せ、製品を差別化するために、キャッシュSRAMを半分殺したCPUを出荷するメーカーなのだから。チップセットにも、使われていない機能(ICH3のUSB 2.0とか)がいろいろ入っていたりする。OEMベンダーが問いつめると、それはテストファンクションだと説明したりする、Intelはそんな贅沢なメーカーなのだ。

 それから、今年に入って、Intelがかなり前から複数スレッドの並列処理「スレッドレベルパラレリズム(TLP:Thread-Level Parallelism)」技術の研究に熱心だったことが明らかになった。以前のコラム「Intelがデスクトップ&モバイル向けのHyper-Threading版Pentium 4を計画」で説明した通り、Intelはシングルスレッドをマルチスレッドに分解するスペキュレイティブマルチスレッディングまで視野に入れて研究をしており、実際に今年中盤からは論文も公開し始めた。つまり、じつはIntelは隠れTLP信者だったのだ。

 ただし、例え、Hyper-Threadingがインプリメントされていたとしても、Intelがそれを使えるようにしない限りは意味はない。そして、PCユーザーにとっては、Hyper-Threadingが身近になるまでは、おそらくあと1年半(=次期CPU Prescottが出るまで)かかる。だから、大きな意味はない。

 重要なのは、もしかするとPentium 4はHyper-Threadingを前提としたアーキテクチャだったかもしれないことだ。だとすると、Intelはもっとも重要なフィーチャを欠いたままで、Pentium 4を立ち上げたことになる。

□関連記事
【12月14日】【海外】0.13μm版Pentium 4にもHyper-Threadingテクノロジを搭載!?
http://pc.watch.impress.co.jp/docs/article/20011214/kaigai01.htm
【8月30日】【海外】Intelがデスクトップ&モバイル向けのHyper-Threading版Pentium 4を計画
http://pc.watch.impress.co.jp/docs/article/20010830/kaigai01.htm


バックナンバー

(2001年12月19日)

[Reported by 後藤 弘茂]


【PC Watchホームページ】


PC Watch編集部 pc-watch-info@impress.co.jp

Copyright (c) 2001 impress corporation All rights reserved.