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プログラムの実行体(スレッド)をあらわすデータ型です。
  • プログラムの骨格は大体次のようになります。
  1. ctk_spe_image_open関数でSPEプログラムの実行ファイル(ここでは"spe-hello")をオープンします。
  2. ctk_spe_thread_create関数でオープンしたプログラムイメージを元にSPEスレッドを生成し、実行を開始します。第3, 第4引数にはSPEのmain関数の第2, 第3引数に渡される値を指定できます。
  3. ctk_spe_thread_wait関数でSPEスレッドの終了を待ち、その後SPEスレッドを破棄します。
  4. 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ユーザマニュアル」に戻る

表示