CTKでHello, World
出典: CTK: Cell ToolKit Library
「CTKユーザマニュアル」に戻る
CTKを使った最初のプログラムとして、SPEを使って"Hello, World"と表示させるだけのCTKアプリを開発してみましょう。
[編集]
PPEソースコード
- PPEのソースコードは次のようになります。
#include <stdio.h>
#include <ctk.h>
int main() {
ctk_spe_program_t *program;
ctk_spe_thread_t spe;
ctk_spe_image_open(&program, "spe-hello");
ctk_spe_thread_create(&spe, program, NULL, NULL, 0);
printf("[PPE] Hello, World!\n");
/* SPEプログラムを実行中… */
ctk_spe_thread_wait(spe, NULL);
ctk_spe_image_close(program);
return 0;
}
- ctk.hというヘッダファイルをインクルードし、ctk_で始まる各種のCTKのAPIを呼び出しています。なお、ここではエラー処理などはすべて省略しています。
- ctk_spe_program_tはSPEプログラムのイメージ、ctk_spe_thread_tはSPEプログラムの実行体(スレッド)をあらわすデータ型です。
- プログラムの骨格は大体次のようになります。
- ctk_spe_image_open関数でSPEプログラムの実行ファイル(ここでは"spe-hello")をオープンします。
- ctk_spe_thread_create関数でオープンしたプログラムイメージを元にSPEスレッドを生成し、実行を開始します。第3, 第4引数にはSPEのmain関数の第2, 第3引数に渡される値を指定できます。
- ctk_spe_thread_wait関数でSPEスレッドの終了を待ち、その後SPEスレッドを破棄します。
- ctk_spe_image_close関数でSPEプログラムをクローズします。
- Libspe 1.Xのプログラムを書いたことがある人は、ほとんど同じ骨格なので理解しやすいでしょう。
[編集]
SPEソースコード
- SPEのソースコードは次のようになります。
#include <stdio.h>
#include <ctk_spu.h>
int main() {
printf("[SPE] Hello, World!\n");
return 0;
}
- ctk_spu.hというヘッダファイルをインクルードしている以外は、普通のプログラムと同じです。SPE側コードのmain関数は引数を取ることもできますが、ここでは使わないので省略しています。
- ctk_spu.hというヘッダファイルは、実際には主にCTKのAPIを使うために必要となります。(この例のプログラムのような場合、Libspe環境ではctk_spu.hをインクルードしなくても動作します)
[編集]
プログラムのビルドと実行
- PPEソースコードとSPEソースコードをそれぞれビルドして、PPE用実行ファイルとSPE用実行ファイルを生成してみましょう。CTKアプリのビルド方法の詳細は後述しますが、ここではCTKのビルドツールを使った方法を説明します。
- ここでは、PPEソースコードがppe-hello.cというファイル名で、SPEソースコードがspe-hello.cというファイル名で保存されているとします。
- 以下のようにctk-toolを実行することで、ppe-helloというPPE実行ファイルとspe-helloというSPE実行ファイルが生成されます。
$ <installdir>/bin/ctk-tool ppu-build --output=ppe-hello ppe-hello.c ... Generated: ppe-hello $ <installdir>/bin/ctk-tool spu-build --output=spe-hello spe-hello.c ... Generated: spe-hello
- PPE側のppe-hello実行ファイルを実行すると、そこからさらにspe-helloが実行されて次のように表示されるはずです。
$ ./ppe-hello [PPE] Hello, World! [SPE] Hello, World!
「CTKユーザマニュアル」に戻る
