PS3 の Cell 開発環境を入れてみる

PS3 をクライアントとしても使えて、
サーバーとしてもアクセスできるようになりました。
次は PS3 ならではの使い方として Cell の開発環境を install してみます。

インストール手順同様、こちらのページを参考にさせていただきました
http://cell.fixstars.com/ps3linux/index.php

従来のゲーム機は単なるターゲットとみなしてクロス開発するのが普通でしたが、
PS3 は HDD 搭載で Linux の動く PC として使えるため、自分自身でアプリ
開発を行うことができます。

(1) SPU 用コンパイラ

せっかくなので出たばかりの新しいバージョン CellSDK 2.0 を入れてみました。

http://www.bsc.es/plantillaH.php?cat_id=252

ここから PowerPC で動く SPU 向けの各種ツールをダウンロードします。
表のうち PowerPC の方の SPU と書かれている一式です。

●3.3-72
GNU Binutils
GNU GCC Compiler
GNU GCC C++ Compiler
GNU GDB
GNU newlib C library
GNU Toolchain debuginfo

ダウンロードした *.rpm を PS3 Linux に転送してインストールします。
パッケージのインストールなので、ファイルはどこにおいても構いません。

# rpm -i spu-binutils-3.3-72.ppc.rpm
# rpm -i spu-gcc-3.3-72.ppc.rpm
# rpm -i spu-gcc-c++-3.3-72.ppc.rpm
# rpm -i spu-gdb-3.3-72.ppc.rpm
# rpm -i spu-newlib-3.3-72.ppc.rpm
# rpm -i spu-toolchain-debuginfo-3.3-72.ppc.rpm

インストールは上記の順番で行います。

(2) SPU を使うためのライブラリ

PS3 に Linux を入れるまでの手順
http://ch09144.kitaguni.tv/e327222.html
で作った ADDON CD の Q:\spu の中にある次のファイルを PS3 Linux に
転送します。

libspe2-2.0.1-be0647.3.20061130.1.ps3pf.ppc.rpm
libspe2-2.0.1-be0647.3.20061130.1.ps3pf.ppc64.rpm
libspe2-devel-2.0.1-be0647.3.20061130.1.ps3pf.ppc.rpm
libspe2-devel-2.0.1-be0647.3.20061130.1.ps3pf.ppc64.rpm
elfspe2-2.0.1-be0647.3.20061130.1.ps3pf.ppc.rpm

これらも順番に rpm -i で install します。

(3) Hello World

http://cell.fixstars.com/ps3linux/index.php/PS3%E3%81%A7Hello%2C_World%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
こちらから Hw-samples-all.tar.gz をダウンロードします。

PS3 Linux に転送してアーカイブを展開します。下記の操作は home に転送したと
仮定しています。

 $ cd
 $ mkdir src
 $ cd src
 $ tar -zxvf ../Hw-samples-all.tar.gz
 $ cd hw-samples-all
 $ make

libspe1 を install していないのでエラーが出ますが無視します。

 $ cd spe
 $ ./spe-main
[SPE] Hello, World!

SPEでコンパイルしたプログラムが動きました。

(4) SPE 用の C/C++ 言語拡張について

SPU_language_extensions_v21_j.pdf

こちらからダウンロードできます。
http://cell.scei.co.jp/

これをみると vector 型が拡張されているのがわかります。
例えば float 4 要素の 128bit 変数は

vector float v1;

のように宣言できます。
残念ながら、HLSL のように自由自在に各ベクトル要素にアクセスできるわけでは
無いようです。(例えば v1.x 等は使えない)

vector 系の演算には組み込みの intrinsics 命令を使うようです。
あとでもう少し詳しくしらべてみます。