Cellの真価を引き出すソフトウェア実行環境を開発
2005.07.25
私の愛読書の日経エレクトロニクスに、Cell プロセッサのスケジューラに関する良い記事(7月4日号、P.123)が載っていたので、紹介する。次世代ゲーム端末向けのゲーム開発者は、ついに「日経エレ」にまで目を通さねばならない時代が来たようだ。とは言っても、ゲーム開発者に日経エレを定期購読してもらうというのも無理があるので、私が代理で目を光らせておき、読む価値のある記事を見つけたときだけここで紹介しようかと思う。
ちなみに、この記事は東芝のエンジニアたちによって書かれた Guest Paper。CELLチップは、メインCPU(PPE)1つ+サブCPU(SPE)8つ(PS3では歩留まりのために7つしか使わない)、という非対称な形のマルチ・コア・アーキテクチャを持つため、通常のOSのスケジューラーは使えない。そこで、OSのスケジューラーとは別に、SPE専用のスケジューラーを開発した、という開発者の立場から書かれたもので、私自身、OSを開発して来た立場の者としては、とても興味深く読めた。CELLチップの上で、ミドルウェアなり、ローレベルのモジュールを開発しようとするエンジニアはぜひ目を通しておくべき記事だ。
要点をまとめると、以下のようになる。
(1)PPE(Power Processor Element)のスジェクーリングは通常のOSのスケジューラに行わせるが、8個あるSPE(Synergistic Processor Element)のスケジューリングは、PPE上で走る「リアルタイム・リソース・スケジューラ」というモジュールが行う。つまり、PPEがマスターとなり、そのSPEでどのSPEスレッドを実行するかを制御するのだ。
(2)スケジューリング・アルゴリズムには、全てのSPEを同じ周期(例えば映像の出力タイミングに合わせた33ms周期で)コンテキスト・スイッチさせる「ギャング・スケジューリング」方式を採用している。この方式を採用することにより、特定のリアルタイム制約(例えば、動画のあるフレームのデコードを次の出力タイミングまでに終えなければならないなど)に応じてSPEの割り当てを変更する、などのリアルタイム処理に必要とされる動的なスケジューリングが可能となる。
(3)SPEスレッドのスケジューリングは、プログラムからAPIを呼び出して動的にコントロールするのではなく、XMLファイルで記述されたメタ・データにより行う。プログラマーは、そのメタ・データ内に、データの処理の順番(例えば、データ・マルチプレクサでビデオと音声データに分けた後、それぞれをビデオ・デコーダ、オーディオ・デコーダに渡すなど)や、リアルタイム制約などを記述するだけで良く、実行時のSPEの割り当ては「リアルタイム・リソース・スケジューラ」が自動的に行ってくれる。
これで、今まで疑問だったSPEのスケジューリング方式がかなり明らかになった。ただし、このペーパーからだけでは理解できなかったのが、SPEのコンテキスト・スイッチの効率である。PPEとSPEは共有メモリーを持たない構造であるため、SPEのコンテキスト・スイッチのたびに、SPEのローカル・メモリ全て(256キロバイト)を主記憶との間でDMA転送しなければならないのだ。これを最悪の場合で8つのSPEに関して 32ms ごとに同時に行って、オーバーヘッドがどのくらいになるのかが気になってしかたがないのだが、このペーパーには答えを見つけられなかった。このペーパーには、マルチ・ストリームのテストプログラムを走らせたところ、平均して(32ms ごとに)1ms のオーバーヘッドで済むことが分かったと書いてあるが、それは48本のMPEGストリームを同時にデコードする、という比較的単純なケースの実験結果なので、あまりコンテキスト・スイッチが起こらなかった故のオーバーヘッドの低さとも思えるので何とも言えない。
商業的にCELLチップなりPS3が成功するかどうかはまだ不明だが、少なくとも「エンジニアのおもちゃ箱」としてはとても魅力的なハードウェア・アーキテクチャである。このペーパーを書いた東芝のエンジニア達も、やりがいのある仕事を与えられて楽しかったに違いない。ハードウェアで冒険はせずに、開発環境とオンライン・サービス環境で差別化を図ろうとするマイクロソフトと、ハードウェアとソフトウェアの両方で大きな革新を起こそうとするソニーとの違いは、その設計の根本思想からして大きく違う。極端な言い方をすれば、これは「米国のMBAたちがビジネスで勝つためにエンジニアに作らせたXbox 360」と、「日本のエンジニアがエンジニアのために作ったPS3」との戦いである。目が離せない。
[追気] ちなみに、先日運転しながらラジオで芸能ニュースを聞いていると、突然 "multi-thread" という言葉が飛び込んできたので驚いた。映像業界では、「24」のように、同時に進行する事件をシーンを頻繁に切り替えながら視聴者に見せる手法を「multi-thread 方式」と呼ぶらしい。ひょっとすると、こっちの方が古い用法なのかも知れない。エンジニア以外の人にマルチ・スレッドを説明する時に使えそうだが、そんな機会がそもそもあるかどうかが疑問だ(注意:理科系の学生は、合コンの時に決してマルチ・スレッドの話題はしないように)。
>「米国のMBAたちがビジネスで勝つためにエンジニアに作らせたXbox 360」と、「日本のエンジニアがエンジニアのために作ったPS3」との戦い
グラフィック業界の両雄ATI社とNVIDIA社は、私の見立てでは「売れる製品をつくりたいATI社」と「すごい製品を作りたいNVIDIA社」という思想的に異なるイメージを持っています。そのそれぞれがXBox360とPS3に採用されて上記のような表現をされると、妙に納得しました。
Posted by: Jun | 2005.07.25 at 18:59
ATIとNVIDIAにはそんな違いがあったんですか。偶然かも知れませんが、マイクロソフト、ソニーそれぞれとの組み合わせはピッタリですね、確かに。
Posted by: satoshi | 2005.07.25 at 22:43
「multi-thread 方式」についてですが、その種のミステリ小説について「モジュラー式」という言い方をしていると思います。
Posted by: seih | 2005.07.26 at 01:52
ミステリー小説では「モジュラー式」と呼ぶんですか。調べて見たのですが、「multithread方式」の方は原則として映像のみに使うようです。
Since ''Hill Street'' appeared, the multi-threaded drama has become the most widespread fictional genre on prime time...
という感じで使われています。(http://www.stayfreemagazine.org/public/tv-smarter-johnson.html)
Posted by: satoshi | 2005.07.26 at 05:39
ミステリ小説では、古くからある技法に入ると思います。エド・マクベインの「87分署」シリーズが有名です。でも、「マルチスレッド」の方が私にはしっくり来ますね ;)
Posted by: seih | 2005.07.26 at 11:51
はじめて投稿させて頂きます。
>「米国のMBAたちがビジネスで勝つためにエンジニアに作らせたXbox 360」と、「日本のエンジニアがエンジニアのために作ったPS3」との戦い
確かにエンジニアの人にとっては後者が好感があるでしょうが、消費者にとってはどうでしょうか?最先端の技術を満載していてもそれが消費者にとってどんな意味があるのでしょうか。消費者顔をみない企業は有権者を無視する政治家と同じではないのではないですか?
Posted by: Captain | 2005.07.29 at 20:43
コメントありがとうございます、Captain さん。ご指摘の通り、ユーザーを無視したエンジニアの自己満足に陥ってしまっては困りますよね。
Posted by: satoshi | 2005.08.01 at 18:38