Libspeプログラミング環境の構築
出典: PS3 Linux Information Site / Cell/B.E.のパワーを体験しよう
English / Japanese
本ページからリンクされている多くのrpmは、本サイトのダウンロードページからもダウンロードできます。cell-sdk-X.X-rpmsディレクトリ以下を参照してください。
PS3上でSPEを使ったプログラ厶を開発するには、 まずSPE用のコンパイルツールやlibspeなどをインストールする必要があります。 ここでは、PS3上でPS3 Linuxのためのプログラムを開発する「セルフ開発環境」の構築について説明しています。Intel x86系のPCなどでPS3 Linuxのためのプログラムを開発する「クロス開発環境」については、X86 PC上にCell開発環境を構築するのページを参照してください。
2007年2月現在確認できている限りでは、
- Fedora CoreをPS3に入れた状態ではSPEを使ってプログラミングするための開発環境および実行環境はデフォルトではインストールされません。
- 2006年11月に公開されたバージョンのYellow Dog Linux v5.0 for PS3にはlibspe 1.1の実行環境のみがデフォルトでインストールされています。
- 2006年12月末日にミラーサイトからダウンロードできるバージョンとして公開されているYellow Dog Linux v5.0 for PS3にはlibspe 1.1の開発環境および実行環境がデフォルトでインストールされているようです。
どのLinuxをインストールしている場合でも、 SPEを使ったプログラミングをするための最新の開発環境を整えるには、 以下で述べるような開発ツールとlibspeの開発用パッケージをインストールする必要があります。 なお、libspe1とlibspe2の違いや概要についてはlibspeの概要を参照してください。
目次 |
Cell SDK 2.1環境開発ツールのインストール
- 2007年4月以降現在、コンパイルやデバッガなどの最新の開発ツール一式はバルセロナコンピュータセンター(BSC)のGNU Toolchain 4.1.1 and GDB for the Cell BE's SPUページから取得可能です。PS3 Linux上でセルフ開発環境を構築するには、PowerPC用のBinutils, GCC Compiler, GDBなどのrpm一式が必要になります。
- (古いバージョン(Cell SDK 2.0)の開発環境はGNU Toolchain 4.1.1 and GDB for the Cell BE's SPUからダウンロードできます。)
- (古いバージョン(Cell SDK 1.1)の開発環境はGNU Toolchain 4.0.2 and GDB for the Cell BE's SPUからダウンロードできます。)
SPE用開発ツール
- SPEを使うプログラムを開発するには、少なくともSPU用のbinutils (spu-binutils), gcc (spu-gcc), gcc-c++ (spu-gcc-g++)が必要になります。そのほかに、デバッグ用に spu-gdb, spu-toolchain-debuginfo などもインストールしておくと良いでしょう。
- 開発に必要となる主なパッケージの一覧は次のようになります:
- SPE(SPU)用のコンパイラやツールはすべてspu-という接頭子を持つコマンド名でインストールされます。例えば、SPE用のgccはspu-gccとなります。
PPE用開発ツール
- PPE側のプログラムのコンパイルには、基本的にはPPC用のディストリビューションに元から含まれているgccなどを使うことができます。しかし、これらの既存のディストリビューションに含まれるPPC用のコンパイラはCellのPPE用に最適化されたものではありません。より良い性能を得るためには、BSCからダウンロードできるPPE用の開発ツールをインストールしてください。
- 開発に必要となる主なパッケージの一覧は次のようになります:
- PPE(PPU)用のコンパイラやツールはすべてppu-という接頭子を持つコマンド名でインストールされます。例えば、PPE用のgccはppu-gccとなります。
- その他、PPE用開発ツールに関する注意事項を以下に簡単にまとめます:
- PPC用ディストリビューションからインストールされるgccやg++ではデフォルトで32bitモードのバイナリが、BSCのCell SDKの一部としてインストールできるPPU用のgccやg++ (ppu-gccやppu-g++)では64bitモードのバイナリが生成されます。
- どちらのコンパイラでも、コンパイル時に-m32 あるいは -m64 とつけることで32bitあるいは64bitモードでのコンパイルを明示的に指定することができます。
- gprofのためのオプション -pg をつけてコンパイルする場合、32bitモードでコンパイルすると(-m32を指定するかgccで何も指定せずにコンパイルするかすると)、生成されたバイナリがCell (PS3)上で正常動作しないようです。
- gccとppu-gccの性能差については、プログラムの性質にもよりますが、ベンチマークによっては20%程度の大きな差がつくこともあるようです。
SPE開発用ライブラリlibspeとnewlibのインストール
2007年4月以降現在、最新のSPE開発用ライブラリのバージョンはそれぞれlibspe 1.2およびlibspe 2.1となります。 現在はまだlibspe1系で書かれたプログラムや資料が多く出回っていますが、 今後はおそらくlibspe2系のAPIが主流となっていくと思われます。 新しくPS3でプログラムをはじめたいという人にはlibspe2をインストール することをお勧めします(なお、両方インストールすることも可能です)。
SPU用libcであるnewlibのインストール
2007年4月以降現在、SPU用のlibcであるnewlibの最新バージョンはBSCのGNU Toolchain 4.1.1 and GDB for the Cell BE's SPUのページから取得可能です。以下のパッケージを取得してインストールしてください:
libspe 2.1環境の構築に必要なパッケージのインストール
libspe2.1を使ったプログラミング環境を構築するには、BSCのSPE Runtime Management Library Version 2.1から取得可能です。以下の一式のrpmをダウンロードしてインストールしてください:
- libspe2-2.1.0-0.ppc.rpm
- libspe2-2.1.0-0.ppc64.rpm
- libspe2-devel-2.1.0-0.ppc.rpm
- libspe2-devel-2.1.0-0.ppc64.rpm
注:IBM AlphaworksとBSCが提供しているCell SDK 2.0でプロトタイプとして公開されていたlibspe 2.0.1には致命的なバグがあります。Cell SDK 2.0のisoイメージなどから開発環境一式およびSPE開発ライブラリ(libspe)をインストールした場合、Cell SDK 2.1のものにアップデートするようにしてください。強制的に上書きインストールするには、rpmコマンドに--forceオプションをつけて、「rpm --force -ivh *.rpm」のように実行することでまとめて強制インストールすることができます。なお、Cell SDK 2.0 iso版のlibspe 2.0.1の不具合についてはLibspeの既知の不具合を参照して下さい。
libspe 1.2 (deprecated) 環境の構築に必要なパッケージのインストール
libspe 1.2に必要なrpmはSPE Management Library for Cell BE v1.2 (deprecated)のページから入手可能です。libspe1.2を使ったプログラミング環境を構築するには、以下の一式のrpmをダウンロードしてインストールしてください:
- libspe-1.2.2-0.ppc.rpm
- libspe-1.2.2-0.ppc64.rpm
- libspe-devel-1.2.2-0.ppc.rpm
- libspe-devel-1.2.2-0.ppc64.rpm
なお、YDL v5.0にはlibspe 1.2の1つ前のバージョンであるlibspe 1.1環境がデフォルトでインストールされています。開発環境を更新して上書きインストールするには、rpmコマンドに--forceオプションをつけて実行するか、まずyum remove libspeのように実行してもともとインストールされているパッケージを削除してから新しいパッケージをインストールしてください。
Elfspeのインストール
Elfspeというツールをインストールすると、SPEプログラムを 単体で(libspeなどを使ったPPEプログラムから呼び出さなくても) シェルプロンプトから実行できるようになります。 テストやデバッグに便利なので、是非インストールしておきましょう。
elfspeにもlibspe1用とlibspe2用の両方のバージョンが存在していましたが、Cell SDK 2.1ではlibspe2のrpmのみが公開されているようです。
Elfspeは、binfmt_miscというLinuxの機能を使って実現されている機能です。 binfmt_miscについては例えばこちらのページなどを参考にして下さい。
