●CPUアーキテクチャ移行の影響パーソナルコンピュータと据え置き型ゲーム機(ゲームコンソール)で、CPUアーキテクチャの変遷が起きている。ゲームコンソールはIBM系アーキテクチャに、パーソナルコンピュータはMacintoshまでがx86系アーキテクチャに移行する。そこで、重要な要素として浮上してきたのは、レガシーのソフトウェアとの互換性確保のためのバイナリ変換技術と、そのために必要なエンディアン変換技法だ。x86系CPUなどのリトルエンディアン(little-endian)の2種類がある。x86とPowerPC間でCPUを切り替えたXboxとMacintoshは、違うエンディアンフォーマットのCPUに移ることになる。2が搭載するMIPS系CPUアーキテクチャは、基本はバイエンディアン(bi-endian:両方のエンディアンに対応)。ビッグエンディアンのCellにリトルエンディアンをサポートできるメカニズムが加えられているということは、PS系コードはリトルエンディアンが標準なのかもしれない。バイエンディアンCPUでない限り、異なるエンディアンフォーマットのデータは変換しなければ処理できない。エンディアンをソフトウェアで変換するとオーバーヘッドが非常に大きい。Cellがハードウェアで実装しているのは、その負荷を軽減するためだと推測される。●Cellのリトルエンディアンサポートまず、前回の記事の最後に出てきた、Cellのリトルエンディアン対応についてもう少し説明したい。前回の記事では、Cellはバイエンディアンと説明した。久夛良木健氏(ソニー・コンピュータエンタテインメント代表取締役社長兼グループCEO)によると、厳密には違うという。CellCellは、開発当初にはバイエンディアンも検討されたが、最終的にはビッグエンディアンのみのサポートとなったという。演算ユニット自体はバイエンディアンではなく、リトルエンディアンフォーマットのデータは直接処理できないようだ。その代わり、Cellには特殊なロード/ストア命令が実装されているという。エンディアン変換付きのロード命令とストア命令だ。データをメモリからレジスタにロードしたり、逆にレジスタからメモリに書き戻す際に、エンディアンをハードウェアで変換するという。Cellは、従来的な意味でのバイエンディアンCPUではないが、これらの命令によって、実質的に両エンディアンのデータフォーマットをサポートできる。いう広義のサポートを含めて、久夛良木氏はインタビュー時には前回の記事のように説明したようだ。Cellの実装では、エンディアンの変換をハードウェアで行なうため、当然、ソフトウェアベースでエンディアンを変換するよりはるかに高速に処理できると推定される。エミュレータでリトルエンディアンCPUをエミュレートする場合には、元のコードのロード/ストア命令を、変換付きロード/ストア命令に置き換えれば、自動的にエンディアン変換も済むはずだ。変換レイテンシは加わると思われるが、ソフトウェアで変換するよりオーバーヘッドがずっと小さいことは間違いがない。●実装コストを抑えるための手法Cellがバイエンディアン実装をしなかった理由のひとつは、演算ユニットの実装コストの増加などを避けるためだという。演算ユニット自体にバイエンディアン対応の構造を入れることより、エンディアンコンバータをロード/ストアユニットに持たせた方が、簡略になりそうだ。PowerPCの元々のバイエンディアン実装は、ランタイムでエンディアンを変更できる高度なメカニズムだったため、実装コストが大きかったと推定される。バイエンディアンを省くことは、演算ユニットの複雑化を避けるためにも重要な要素だったと推測される。Cellは、できる限りシンプルな構造にすることで、高速化などを容易にするという設計思想を採っている。CPUをリセットしてエンディアンモードを切り替えるタイプの実装もできるが、その場合には問題が生じる。リセットをかけて切り替える場合には、実行時にはどちらかのフォーマットしかサポートされず、OSやエミュレータなどもリトルエンディアンでコーディングする必要がある。それよりは、Cell方式の方が利点が多い。Cellでは、リトルエンディアンとビッグエンディアンの両フォーマットを混在して同時に実行できるはずだ。データをロードした後は、レジスタ上ではエンディアン変換されているため、同様に扱うことができるからだ。考えると、Cellのリトルエンディアンサポートの手法は、実装コストを抑えながら、両エンディアンの混在を実現するためのものだと推定される。エンディアン変換命令を使えば、ビッグエンディアンのOSとエミュレータの上で、リトルエンディアンのバイナリをサポートすることが容易になる。G5にはない)とは互換がない。Cellの場合は、ある意味、レガシーを断ち切るため、それでも問題はないと判断したと推定される。エンディアン変換命令とコンバータの実装が、実装コストが低く済むとしたら、似たような仕組みを、Microsoftも実装している可能性はある。Architect)は、「我々はバイエンディアンサポートはしなかった。汎用コードは走らせないからだ」と語っていた。Allard氏はエンディアン変換が速いことも示唆しており、何らかのメカニズムが存在する可能性はある。Macintoshとバイナリ変換技術ゲームコンソールとPCでは互換性の意味が異なる。ゲームコンソールの場合は、5年前の性能レンジを達成できればいいのに対して、PCでは今までと同レベルか、ちょっと低い程度の性能レンジしか認められない。そのため、PCではCPUアーキテクチャの変更は、よほどの性能ギャップがないと難しい。CPU採用は、かなりの決断だ。この決定でも、バイナリ変換のための技術が正否のカギとなる。Appleは、x86ベースのMacintosh上で、PowerPCコードとの互換を取るために「Rosetta(ロゼッタ)」と呼ぶバイナリトランスレーションテクノロジを使う。このRosettaの正体は、新興のエミュレーションソフト会社Transitiveの技術がベースになっていると言われている。CPUなど一般的なCPUアーキテクチャ上で実現する。具体的には、変換済みのコードのキャッシングやデッドコードの削除、トレースビルドといった最適化技法を使う。Transitiveの技術を使ったとしても、x86上でPowerPCコードを高速で動かすのは容易ではない。Appleは、680x0からPowerPCへの移行時も、バイナリトランスレーションを行なった。この時は、Motorola系CPUが元々ビッグエンディアンだったので、ハードルは比較的低かった。今回は、データフォーマットを、ビッグエンディアンからリトルエンディアンに変換する必要がある。そのため、オーバーヘッドは大きい。CPUがエンディアン変換命令を備える?だが、もし、Intelが今後のCPUに、Cellのような、エンディアン変換命令と変換ユニットを実装するなら、話は違ってくる。これは、何も確証のある話ではなく、あくまで可能性としての話だが。MacでのPowerPCエミュレーションの性能は大幅に改善される。Appleが、新CPUのタイミングでx86移行を持ってくるのは、それを前提にしているのかもしれない。Macintoshの現在の出荷台数だと、Intelにとって大きなアーキテクチャ変更を行なうには十分とは言えない。エンディアン変換ユニットと命令の実装を行なうだけなら、実装コストはそれほど大きくないはずだ。アーキテクチャ的にも、拡張命令を加えるだけで済む。エンディアン変換命令は、PowerPCコードのサポートを容易にするだけでなく、もっと汎用に使うことができる。政治的にもうまく働く。「Intelがエンディアン変換命令を実装すれば、AppleはAMDに簡単には移れなくなる。それに、エンディアン変換は、汎用としても、あって便利なはず。ネットワークでは、エンディアンは決められているし、標準ファイルフォーマットでもエンディアンが決められていて、結局、どんなエンディアンのCPUでもエンディアンの変換は必要な処理になっている」とCPUに詳しいライターの塩田紳二氏は指摘する。ライターの大原雄介氏も、ネットワークについて、ほぼ同じ指摘をしている。Intelがエンディアン変換命令を実装するとしたら、数年前から動いていなければおかしいはずだ。アーキテクチャ変更には、リードタイムが必要だからだ。Intel-Apple間で何かをしている兆候は数年前からあった。AppleのジョブズCEOは、2年半ほど前にIntelの社内カンファレンスに、キーノートスピーカとして登場、驚かせたことがある。その頃から、AppleとIntelが水面下で作業を進めていたとすれば、時間的なつじつまは合う。Intelは、IA-32アーキテクチャを、より広い応用範囲に広げようとしている。その方向性ともエンディアン変換は一致する。Intelは省電力CPUを開発、それを組み込み用途に浸透させようとしている。一般論として、他のCPUの占めていたエリアに広げる場合には、異なるエンディアンのサポート機能を持っている方が有利になる。既存のソフトウェアを救いやすいからだ。した展望を考えると、IntelがMacintoshのタイミングで、エンディアン変換機能を載せてくる可能性があってもおかしくはないだろう。