3.1 SPEプログラミングの概要
出典: PS3 Linux Information Site / Cell/B.E.のパワーを体験しよう
PPEプログラムの作成は、従来のLinuxのCプログラミングと変わりません。しかし、SPEプログラムは、従来とは異なるプログラミングが必要となります。ここでは、まずはじめに第1.3節で学習した内容のおさらいとSPEプログラミングに必要なライブラリについて解説します。
3.1.1 SPEプログラム実行の仕組み
SPEを利用したプログラミング・モデルの中で最も基本的なものは、PPE上でメインプログラムを実行し、SPE上でサブプログラムを実行するモデルです。このモデルを、PPE中心にプログラムが実行されることから、PPEセントリック・モデルと言います。本章では、PPEセントリック・モデルに基づきSPEプログラミングについて解説します。このモデルでは、プログラマはPPEプログラム上でSPEプログラムの実行を制御するようになります。
PPEセントリック・モデルにおける典型的なSPEプログラムの実行の流れを図 3.1に示します。
(1) (PPEプログラム側) SPEプログラムをLSへロードします。
(2) (PPEプログラム側) SPEにSPEプログラムの実行を指示します。
(3) (SPEプログラム側) 処理に必要なデータをメインメモリからLSへ転送します。
(4) (SPEプログラム側) 転送されたデータを加工し、条件に応じた処理を実行します。
(5) (SPEプログラム側) 処理結果をLSからメインメモリへ転送します。
(6) (SPEプログラム側) PPEプログラムへ終了を通知します。
SPEプログラムは、メインメモリからLSへロードされ、PPEプログラムから実行の指示を受けます。PPEプログラムからの実行指示により、SPEはプログラムの実行を開始します。SPEプログラムは、処理に必要なデータをメインメモリからLSへ転送し、処理をおこなった後に処理結果をメインメモリへ転送します。SPEプログラムが終了すると、PPEプログラムへ終了を通知し、PPEプログラムは引き続き処理を再開します。
なお、PPEセントリック・モデル以外のプログラミング・モデルについては、IBM社が公開している「Cell Broadband Engine Programming Tutorial」の第1.3節を参照してください。
(http://www-306.ibm.com/chips/techlib/techlib.nsf/techdocs/FC857AE550F7EB83872571A80061F788)
3.1.2 SPE Runtime Management Library version 2 (libspe2)
PPEプログラムからSPEプログラムの実行を管理するためには、libspeを利用します。libspeは、(株)ソニー・コンピュータエンタテインメント、IBM社及び(株)東芝の3社によって共同で開発され、GNU LGPLに基づき公開されています。libspeには、バージョン1とバージョン2があり、2つのバージョンではAPIが異なります。本チュートリアルでは、libspeのバージョン2 (以下、libspe2と示す) を対象に解説します。
libspe2は、さまざまなOSで動作するように、OSプラットフォームに依存しない設計がされています。現在は、Linux OSをプラットフォームとした実装が公開されており、SPU File System (以下、SPUFS) と呼ばれるLinuxカーネルインタフェースを利用しています。
libspe2では、SPEを「SPEコンテキスト」と呼ばれるオブジェクトに仮想化します。プログラマから見ると、SPEコンテキストを操作することでSPEに対するプログラムのロードや実行といったことができます。libspe2は、図 3.2のように4つのAPI群から構成されており、本チュートリアルでは、BASEパートで提供される低レベルのAPIを用いたSPEプログラミングについて解説します。
なお、SPUFSの詳細については、「SPUFS: The Cell Synergistic Processing Unit as a virtual file system」の第5節を参照してください。
(http://www-128.ibm.com/developerworks/power/library/pa-cell/)
ここからは、SPEを利用したプログラミング方法について具体的な例題プログラムを用いて解説していきます。第3.2節では、SPEプログラムのロードと実行、そしてSPEプログラムの終了までの基本的なプログラミング方法について解説します。第3.3節では、PPEプログラムとSPEプログラム間のデータの受け渡し方法について解説します。さらに、第3.4節では、SPEプログラムにおけるSIMD演算、第3.5節では、複数SPEを利用したプログラミング方法について解説します。


