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

PCとゲーム機で鍵となるバイナリ変換技術とエンディアン変換




●CPUアーキテクチャ移行の影響

 パーソナルコンピュータと据え置き型ゲーム機(ゲームコンソール)で、CPUアーキテクチャの変遷が起きている。ゲームコンソールはIBM系アーキテクチャに、パーソナルコンピュータはMacintoshまでがx86系アーキテクチャに移行する。そこで、重要な要素として浮上してきたのは、レガシーのソフトウェアとの互換性確保のためのバイナリ変換技術と、そのために必要なエンディアン変換技法だ。

 CPUの扱うデータの並び順には、PowerPCなどのビッグエンディアン(big-endian) と、x86系CPUなどのリトルエンディアン(little-endian)の2種類がある。つまり、x86とPowerPC間でCPUを切り替えたXboxとMacintoshは、違うエンディアンフォーマットのCPUに移ることになる。

 PlayStationやPlayStation 2が搭載するMIPS系CPUアーキテクチャは、基本はバイエンディアン(bi-endian:両方のエンディアンに対応)。しかし、ビッグエンディアンのCellにリトルエンディアンをサポートできるメカニズムが加えられているということは、PS系コードはリトルエンディアンが標準なのかもしれない。

 バイエンディアンCPUでない限り、異なるエンディアンフォーマットのデータは変換しなければ処理できない。しかし、エンディアンをソフトウェアで変換するとオーバーヘッドが非常に大きい。Cellがハードウェアで実装しているのは、その負荷を軽減するためだと推測される。

●Cellのリトルエンディアンサポート

 まず、前回の記事の最後に出てきた、Cellのリトルエンディアン対応についてもう少し説明したい。前回の記事では、Cellはバイエンディアンと説明した。しかし、久夛良木健氏(ソニー・コンピュータエンタテインメント代表取締役社長兼グループCEO)によると、厳密には違うという。

Cell

 Cellは、開発当初にはバイエンディアンも検討されたが、最終的にはビッグエンディアンのみのサポートとなったという。つまり、演算ユニット自体はバイエンディアンではなく、リトルエンディアンフォーマットのデータは直接処理できないようだ。

 その代わり、Cellには特殊なロード/ストア命令が実装されているという。エンディアン変換付きのロード命令とストア命令だ。データをメモリからレジスタにロードしたり、逆にレジスタからメモリに書き戻す際に、エンディアンをハードウェアで変換するという。Cellは、従来的な意味でのバイエンディアンCPUではないが、これらの命令によって、実質的に両エンディアンのデータフォーマットをサポートできる。そういう広義のサポートを含めて、久夛良木氏はインタビュー時には前回の記事のように説明したようだ。

 Cellの実装では、エンディアンの変換をハードウェアで行なうため、当然、ソフトウェアベースでエンディアンを変換するよりはるかに高速に処理できると推定される。エミュレータでリトルエンディアンCPUをエミュレートする場合には、元のコードのロード/ストア命令を、変換付きロード/ストア命令に置き換えれば、自動的にエンディアン変換も済むはずだ。おそらく、変換レイテンシは加わると思われるが、ソフトウェアで変換するよりオーバーヘッドがずっと小さいことは間違いがない。

●実装コストを抑えるための手法

 Cellがバイエンディアン実装をしなかった理由のひとつは、演算ユニットの実装コストの増加などを避けるためだという。演算ユニット自体にバイエンディアン対応の構造を入れることより、エンディアンコンバータをロード/ストアユニットに持たせた方が、簡略になりそうだ。特に、PowerPCの元々のバイエンディアン実装は、ランタイムでエンディアンを変更できる高度なメカニズムだったため、実装コストが大きかったと推定される。また、バイエンディアンを省くことは、演算ユニットの複雑化を避けるためにも重要な要素だったと推測される。Cellは、できる限りシンプルな構造にすることで、高速化などを容易にするという設計思想を採っている。

 CPUをリセットしてエンディアンモードを切り替えるタイプの実装もできるが、その場合には問題が生じる。リセットをかけて切り替える場合には、実行時にはどちらかのフォーマットしかサポートされず、OSやエミュレータなどもリトルエンディアンでコーディングする必要がある。それよりは、Cell方式の方が利点が多い。Cellでは、リトルエンディアンとビッグエンディアンの両フォーマットを混在して同時に実行できるはずだ。データをロードした後は、レジスタ上ではエンディアン変換されているため、同様に扱うことができるからだ。

 こう考えると、Cellのリトルエンディアンサポートの手法は、実装コストを抑えながら、両エンディアンの混在を実現するためのものだと推定される。エンディアン変換命令を使えば、ビッグエンディアンのOSとエミュレータの上で、リトルエンディアンのバイナリをサポートすることが容易になる。もちろん、この手法だと、PowerPCのレガシーのバイエンディアン機能(PowerPC G5にはない)とは互換がない。しかし、Cellの場合は、ある意味、レガシーを断ち切るため、それでも問題はないと判断したと推定される。

 エンディアン変換命令とコンバータの実装が、実装コストが低く済むとしたら、似たような仕組みを、Microsoftも実装している可能性はある。MicrosoftのJ Allard(J・アラード)氏(Corporate Vice President, Chief XNA Architect)は、「我々はバイエンディアンサポートはしなかった。なぜなら、汎用コードは走らせないからだ」と語っていた。しかし、Allard氏はエンディアン変換が速いことも示唆しており、何らかのメカニズムが存在する可能性はある。

●x86 Macintoshとバイナリ変換技術

 ゲームコンソールとPCでは互換性の意味が異なる。ゲームコンソールの場合は、5年前の性能レンジを達成できればいいのに対して、PCでは今までと同レベルか、ちょっと低い程度の性能レンジしか認められない。そのため、PCではCPUアーキテクチャの変更は、よほどの性能ギャップがないと難しい。Apple Computerの今回のIntel CPU採用は、かなりの決断だ。そして、この決定でも、バイナリ変換のための技術が正否のカギとなる。

 Appleは、x86ベースのMacintosh上で、PowerPCコードとの互換を取るために「Rosetta(ロゼッタ)」と呼ぶバイナリトランスレーションテクノロジを使う。このRosettaの正体は、新興のエミュレーションソフト会社Transitiveの技術がベースになっていると言われている。

 Transitiveの技術は、TransmetaのEfficeonのソフトウェア層CMS(Code Morphing Software)でやっているような高効率のコード変換を、x86 CPUなど一般的なCPUアーキテクチャ上で実現する。具体的には、変換済みのコードのキャッシングやデッドコードの削除、トレースビルドといった最適化技法を使う。

 しかし、Transitiveの技術を使ったとしても、x86上でPowerPCコードを高速で動かすのは容易ではない。Appleは、680x0からPowerPCへの移行時も、バイナリトランスレーションを行なった。ただし、この時は、Motorola系CPUが元々ビッグエンディアンだったので、ハードルは比較的低かった。しかし、今回は、データフォーマットを、ビッグエンディアンからリトルエンディアンに変換する必要がある。そのため、オーバーヘッドは大きい。

●Intel CPUがエンディアン変換命令を備える?

 だが、もし、Intelが今後のCPUに、Cellのような、エンディアン変換命令と変換ユニットを実装するなら、話は違ってくる。これは、何も確証のある話ではなく、あくまで可能性としての話だが。例えば、来年の「Yonah(ヨナ)」以降のCPUに、新命令としてエンディアン変換を実装するなら、x86 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のタイミングで、エンディアン変換機能を載せてくる可能性があってもおかしくはないだろう。

□関連記事
【6月13日】【海外】SCEI 久夛良木社長インタビュー(3)
「PS3でNVIDIAと組んだ理由」
http://pc.watch.impress.co.jp/docs/2005/0613/kaigai189.htm
【6月10日】【海外】なぜゲーム機はPowerPCに、パソコンはx86に偏るのか
http://pc.watch.impress.co.jp/docs/2005/0610/kaigai188.htm
【6月7日】【WWDC】MacへのIntel製CPU搭載をジョブズCEOが宣言
http://pc.watch.impress.co.jp/docs/2005/0607/apple2.htm
【6月7日】Apple、2006年からのIntel CPU搭載を発表
http://pc.watch.impress.co.jp/docs/2005/0607/apple1.htm

バックナンバー

(2005年6月15日)

[Reported by 後藤 弘茂(Hiroshige Goto)]


【PC Watchホームページ】


PC Watch編集部 pc-watch-info@impress.co.jp ご質問に対して、個別にご回答はいたしません

Copyright (c) 2005 Impress Corporation, an Impress Group company. All rights reserved.