Transmeta社のCrusoe

トランスメタ社は1995年にD.Ditzel等が創立した会社で,永らく秘密裏に開発を進めていましたが,2000年1月になってクルーソーという名前のプロセサを発表(出荷は秋)しました。このプロセサは64bitと128bitの2つの長さの命令形式を持つVLIW (Very Long Instruction Word)アーキテクチャのプロセサで,その意味では独自アーキのプロセサですが,Intelのx86命令をエミュレーションすることを大きな目的としており,それを容易にするためのソフト,ハード機構が設けられていることが特徴です。また,性能要求に合わせてクロック周波数と電源電圧をダイナミックに制御することにより大幅な低電力化を実現しています。

なお,同社はLinuxを作ったL.Torvaldsを雇っていることでも(一部の人には)有名で,Midori Linuxという名前でクルーソー用のLinuxを出しています。インタネット端末などでは,これを使って軽いソフトで動かすことを狙っています。

トランスメタ社のアプローチの特徴を要約すると,以下の点にあります。

ハードのアーキが変わってもコードモルフするソフトが吸収して同じようにx86命令を実行するという考えなので,命令セットやハードアーキの詳細な資料は公表されていません。私の知る範囲で,唯一,内部構造などを解説しているのはMicroprocessor Reportの2000年2月14日号ですが,これは著作権の関係でインタネットには公開されていません。

VLIWハードウェア

概要を紹介すると,命令コード長は128bitで,Load/Store命令 1個,ALU命令 2個,分岐命令 1個の計4命令を含むことが出来ます。これ以外に2命令を入れる64bit形式もあります。同社は,これらの128bit,64bitのまとまりを分子(Molecule),中のALU命令などを原子(Atom)と呼んでいます。

TM5400(現在は,2次キャッシュを強化したTM5600も発売されており,2001年6月後半にはTM5800が発表される予定)は,7段のパイプラインを持つ4命令並列のVLIWアーキテクチャであり,Moleculeが書かれた通りに実行するIn Order実行マシンです。

命令とデータキャッシュはそれぞれ64KB(命令は8Way,データは16way。データはx86の4KBページにするため),また,これらと並列に各8KBのローカルメモリを持っています。ローカルメモリはCode Morphing softwareの動作でキャッシュが汚されるのを防いで性能を改善する目的と思われます。それにオンチップで4way,256KB(TM5600で9は512KBに拡張)の命令データ共用2次キャッシュを持っています。省電力狙いにしてはWay数が多い感じですが,Code Morphingを効率よく走らせるには必要なのかも知れません。

演算器は,ALUが2組,浮動小数点とメディア演算ユニットが1組,ロードストア,分岐ユニットが各1です。レジスタファイルは整数系が64エントリ,浮動小数点系が32エントリです。後に述べるx86命令のエミュレーションの為に,整数は48エントリ,浮動小数点は16エントリのシャドウレジスタを持っています。エミュレーションを容易にするために,各演算器のコンディションコードの発生は,x86と合わせてあります。

また,x86アーキをサポートするためにストア用にGated Store Bufferという機構を持ち,MMUもx86命令を効率的に処理するために,基本的にx86と同じテーブル構造をサポートしており,これにエミュレーション用の拡張が付けられています。

TM5400はIBMの0.18umテクノロジで作られ,チップサイズは73mm2。これはIntelの0.18umテクノロジで作られたPentium-3と比較するとほぼ2/3のサイズです。

Code Morphing

x86命令をソフトウェアで解釈して,クルーソーの内部命令に変換することを同社はコードモルフィング(コードの変身)と呼んでいます。JavaのHotSpotコンパイラがバイトコードを解釈して実行しながら,実行頻度の高い部分はプロセサネーティブの命令に変換しているのと同じ考えです。

x86命令は通常複数のAtomに変換されます。この変換で作られたAtomをMoleculeに詰めこんで実行できる命令にします。これはPentiumやAthronでも同じで内部のMicroOPはAtomと同じ程度の機能であり,Pentium等ではこの変換と詰めこみをハードがやるのに対して,Crusoではソフトがやるわけです。ソフトでやるメリットは,変換,詰込みハードが不要(小さなチップ,省電力),ハードより沢山のAtomの範囲を見て最適化が可能という点です。デメリットは,ソフトで変換,最適化が必要であり,最初の実行が遅い,変換,詰込みを行ったCruso命令のキャッシュ領域が必要となるなどです。ちなみに,CodeMorfingソフトそのものはEPROMに格納され,変換したコードのキャッシュとしてメインメモリを16MB使います。

Cruso命令はIn Order実行ですが,x86命令はAtomに分解され最適化で順序を変えて詰め込まれて実行されるので,x86命令の単位ではOut of Order実行になってしまいます。しかし,x86の割り込みはPrecise(割り込んだ命令以前の命令は全て実行が完了しており,以降の命令は全く実行されていない)であり,これを実現する機構の1つがシャドウレジスタです。シャドウにx86命令の切れ目に対応してレジスタ状態をセーブすることにより,割り込みが発生した場合にはシャドウレジスタをワークレジスタにロールバックして戻れるようにしています。

また,ストアを実行してメモリの内容を変えてしまうと取り消して戻ることが出来ませんから,Gated Store Bufferという機構にストアを貯めておき,それ以前のx86命令に対応するAtomが全て正常終了するのを待ってメモリへの書き込みを行います。

さらに,ロードストアのアドレスの重なりを検出するAliasハードウェアという機構をもっており,Load Protectという命令を発行するとそのアドレスを記憶して,Store Under Address Maskというストア命令は,この記憶したアドレスと一致するとトラップします。ロードを先行するストアの前に移動する最適化での問題は,後に実行するようにしたストアで前のロードの結果が変わっていないかどうかのチェックですが,この機構でトラップしなければ結果は変わっておらず引き続き利用できます。

LongRun

CMOSプロセサの消費電力は概ねV2f(Vは電源電圧,fはクロック周波数に比例します。また,周波数と電圧の関係は,通常の動作電圧付近ではおおよそ電圧に比例します。

コンピュータは常に最大性能が要求されるわけではなく,例えばキーボード入力待ちなどでは性能はずっと低くても良いはずです。TM5400/5600では500MHzから700MHzまで32MHz単位でクロック周波数を変えることが出来,これに対して電源電圧は1.2Vから1.6Vまで変化します。700MHz,1.6Vの場合と比較すると500MHz,1.2Vではこれを利用して,性能が低くても良い場合は2/3のクロック,2/3の電源電圧にすると,性能は5/7ですが,電力は約40%になります。Long Runは,Code Morphig Softwareで性能要求を感知し,それに応じてクロックと電源電圧を制御する技術です。それまでにも,携帯して電池動作の時はクロック,電源電圧を落とすというやり方はあったのですが,プロセサの動作中に変化させるのはCrusoeが初めてです。

それから,IBMの0.18umプロセスは標準的には1.8Vで使用するので,Crusoeが最大電圧1.6Vで使用していることで既に30%程度の電力を節約している点も省電力に貢献しています。

テクノロジ的には,電源を下げても動くように回路を設計する必要がある,クロック発生のPLLや電源回路を切り替え時のオーバシュートなどが無いように設計するなどのチャレンジがあります。