PS3開発の困難さ

PS3FedoraCoreをインストールしたのだが....
Cellの開発サイトを見ていると.....頭痛くなりそう。


1.データ長とPPEとSPE同士のデータのアドレス値にも気を配る必要がある。
PPEとSPE同士のDMA転送は、1/2/4/8バイトと16バイト単位のデータ長である必要がある。
しかもコレには癖があるようで
・1/2/4/8/16バイト〜128バイト(16の整数倍バイト)のデータ長を取り扱う場合は、アドレスの下位4ビットが一致していないと、転送その物が失敗する。
・128バイトを超えるデータ長を取り扱う場合、アドレスとデータを受け取る側のSPEのアドレスの下位7ビットが一致していない場合と、転送速度に倍時間がかかったり。

__attribute__((aligned(128))を付けてデータを整列させるようにすると、良いらしい。

2.SPEにプログラムを実行させると、PPEは待ち状態になる。
PPEは、SPEをキックすると、SPEから応答が来るまで待ち状態になるらしい。
つまりSPEを使う場合は、「スレッドを作ってデータを転送しろ」って事か。
そしてスレッド監視のため更にスレッドが必要になるので、ゲーム本体(1)・監視スレッド(1)・SPEキックスレッド(6)と、最低でも8スレッド必要になると。
しかも、ゲーム本体と綿密に連携しなくても良い処理を行う場合に限られると。
切り出しも難しいぜ。


3.メモリ空間のページングを考慮する。
Linuxの基本仕様として、4kバイト単位のページと言う形で管理をしているらしいのですが、ページフォルトが発生すると、SPEもメインメモリにあるこのページの管理テーブルを参照する様になるらしい。
当然DMA転送を利用するので、ここで一気に動作が遅くなる。
(DMA転送自体が若干の時間が必要になり、SPEでページングを解決しようとして大量にページテーブルにアクセスする=遅延)


これだけの情報をみただけで、ちょっと天使のお迎えが来そうになった。


動作の予想が付きにくいCellでゲームを開発している方々は、マジデ変態凄いと思った。
特に初期タイトルの段階で並ならぬクオリティの作品を発表するナムコや海外の開発者の方々は、間違いなくド変態トップガンだと思います。