■インデックス → Think difficult. → 狂わない層 |
Ver.1: 2000.08.23 Ver.1.1: 2003.11.03 |
さてさて、今宵のお題は超長令語の行く末である。 「超長令語とは何ぞや」という人は、以前に 便所に例えて書いておいたものがあるので、 そちらでまず予備知識を溜め込んでから読んでもらいたいもんである。
「遷超」、あるいはわかりやすく書けば「虎住めた」という会社が、 実に面白いものを開発している。 「狂う層」なるチップ、その名前とは裏腹にハードウェアとソフトウエアの境界にもう一つ、 「狂わない層」をはめ込んだのである。
以前からあちこちで書いているが、 現在のCPUの高速化のキモは並列性の利用であり、 具体的には、その並列性を「誰がいつどのように発見するか」が、ちょー重要である。 これを分類すると、下の表のようになる。
スーパースカラー | ハードウェアがその場で切り盛りする |
(通常の)超長令語 | ソフトウェアを作った時点でコンパイラにやらせておく (実際のCPUとコンパイラの動くマシンは別物である) |
狂う層 | ハードウェアでもコンパイラでもない中間の層、 「こ〜ども〜ひんぐ」なるソフトウェアにリアルタイムにやらせる(実際のCPUの内部のソフトウェアが行なう) |
巷のほぼ全てのチップは最初のスーパースカラー方式を採用し、 要するに「どことどこが並列に実行できるか」をハードウェアがちまちま検出しまくる設計になっている。 超長令語方式の特徴は、 実行時には単に命令のセットをずらずら送り込むだけでいいためハードウェアが簡潔になるが、 その分をあらかじめソフトウェアの作成時(=コンパイル時)にちまちまと予測を立てて最適化し、 並列性を検出していろいろと並び替えたりしておく必要があることである。
さて、「こ〜ども〜ひんぐ」とは"Code Morphing"のことで、 ベンチ屋カピタリストなるおじさん方から金をせしめるためにいい用語はないかと皆で知恵を絞った結果だそうな。 エミュレータに近いといえば近いが、あちらは翻訳した結果をそのまま「実演」してしまうのに対し、 こ〜ども〜ひんぐソフトウェアはあくまで狂う層ネイティブな命令として吐き出すだけである。 実行は狂う層チップが行なう。 リアルタイムにコードを翻訳すると聞いたあたりで、 「そんなんでほんとに速くなるんかいな」という不安もあるが、 一度翻訳した結果は専用キャッシュに覚えておくそうな。
今までのチップと比べて狂う層では、 並列性の検出で重要な「いつ」「誰が」行なうかにその特徴がよく出ている。
だが、面白いのはそれだけではないのだ。 命令の実行速度が一定ではないのである。 現在のCPUでも、データがキャッシュにあるときとメモリにあるときで取りに行く時間が変わるため、 命令の実行時間に差が出ることはあった。 しかし狂う層では、そのようなデータがキャッシュにあるか/ないかの区別以前に、 命令の実行速度が大きく変えられてしまう。 そう、「狂わない層」によって。
この狂わない層は全てのソフトウェアからアクセスできないメモリに保存されていて、 電源投入時に専用の内部メモリに移されて実行される。 「狂わない層」はソフトウェア的に書き換えることはできないので、 PC互換機などにある「BIOS書き換え」のような手法は使えないし、 暴走や悪意のあるソフトをもってしても手出しはできないのだ。 こ〜ども〜ひんぐがソフトウェアで書き換え可能とは言っても、 基本的には非常に重大なバグが露呈した場合のためで、 BIOSのようにユーザがほいほいと書き換えられるようにはなっていない。 この部分まで公開してしまうと、 まだ立ち上がっていない狂う層の市場がまさに混沌としてしまうと虎住めたは判断したのだろう。
で、この「層」がちょうどOSとハードウェアに中間の膜のように介在して、 いろいろと面白いことをするのである。 例えば、よく出てくる命令パターンを発見したら、それ全体の翻訳結果にちょっと強力に最適化をかけてやるのである。 たとえば、200クロックかかる命令が1000回ループされているとする。 このままだと200×1000で20万クロック必要である。 で、おもむろに「狂わない層」が頭を働かして、
「そんなに繰り返されるなら、多少は頭を使ったろかいな」と翻訳された命令パターンの最適化をやり直すのである(この200クロックをどうにか減らせないか、と考えるわけだ)。 なんとか180クロックまで減らすことができたものの、 ちょっと難しく考えすぎて、最適化処理に3000クロックもかかってしまったではないか。 まずい、もとの一回のループは200クロックしかなかったのに!と思っても大丈夫である。 合計の実行時間は最適化の時間を入れても3000+180×1000で18.3万まで減っているからである。 ラーメン屋の主人が
こういうことをすると確かに速くなるが、ちょっと妙な状況になる。 スピードが一定でないのである。 (上のような場合なら)ループの回り始めがちょっと遅くて、 途中でガクンと遅くなったかと思うとそこから急に速く回り始めるということも(はっきり体感できるかどうかは別として、理論上は)あり得る。 ここらあたりで、ベンチマークの数字が定まらないことも、 虎住めたが正面切って性能比較を行なわない(行なえない)理由となっている。
さて、他でよく言われている狂う層の利点は
しかし、 いまだに旧・離散設備会社の帳面型を毎日愛用して持ち歩いている我輩からすれば、 帳面型なんぞクロックは200MHzもあれは十分という感じである。 この帳面型、中古で買ってから3年以上経つのに、 使い方がよろしいせいか、いまだにバッテリーが2時間持つというもの信じがたいが本当の話である。 クロックは100MHzなので近頃流行りの火傷機能付き帳面とは大違いである (もちろんうるさい冷却ファンなんぞ存在しない)。 100MHzなのはメモリクロックではないぞ、CPU自体が100MHzなのだ。
この帳面型も、さすがにディスクがそろそろ怪しい音を立て始めたので、新しい機種を探しておるのだが(まあ中古でもいいが)、 無駄に電気を食いそうなのが多くて困っていたところであった。 狂う層搭載のマシンは各社から出てくるようなので、それが出そろってからゆっくり品定めする予定である。 買って速攻でLinuxをインストールすれば、Linusさんも喜ぶだろう。
さて、ここらへんからは勝手に推測のお話である。 ちゃっかり2Gまで達成した陰照温泉をしり目に、PowerPC陣営はかなり苦戦である。 「1GHz動作のPentiumIIIは500MHzのG4に負ける(時がある)」などといったデモで何とか対抗しているものの、 どう考えたって分が悪い。 上がらないクロックに我慢できず、元ローラがG4なるチップに飾りをたくさん詰め込んだのがそもそもの失敗だった。 そんなことをせず、国際仕事機械のように「とにかく小さく速く」に徹しておれば良かったのだ。
そこでちょっと考えてみるのである。 陰照チップではなくPowerPCをエミュレーションするようにこ〜ども〜ひんぐさせたらどうなるのか? RISCチップの中でもかなり後発組のPowerPC系列、 その中でも603系の子孫であるG3はかなり素直な作りをしている。 国際仕事機械が以前に独自開発していたPOWERの名残を引きずる601や、 誘惑に駆られて思わず命令をたっぷり追加してしまったG4よりはるかにエミュレーションに適している。 したがって、G3をターゲットにして演じさせる限り、 狂う層による仮装G3はかなりまともなチップになる可能性がある。 ずばり、その時の利点は何か。
ところで、我輩は飛び道具は虫が好かん。 つまりG4のことである。G4のキモはベクトル演算機構を組み込んだ点であるが、 そんなことをするからチップがでかくなってクロックも上がらないのである。 いわば、動きの速い幼稚園児の背中に大学院生の首だけをくっつけてしまったようなものである。 したがって、我輩はG4が嫌いなのである。 が、どのように嫌いであるかは次回のお楽しみである。 それでは、次回までごきげんよう。 え?次回はいつかって?それも次回までのお楽しみであることよ。
PS.
今回の文章はイマイチまとまりが悪い気がするので、
近いうちに分割して図解入りで書き直すつもりである。
※ 今回の執筆にあたって、IEEE Spectrum誌の記事 "Transmeta's magic show" を参考にした。