SDカードをswapに使おうとしたけど80GBモデルにはSDカードのポートがない件について
既にUSBポートはキーボードとマウスに占拠されているので、どうしたものかと。USBポートって枝わかれさせられないのかなあ。
Cellプログラミングの一番簡単なのをいじってみた
とりあえずHello Worldからということらしい。然し乍ら、僕はメタ構文変数をこよなく愛しているので、hogeです。hogeの次はpiyoで、その次はfugaで、その次は、hogera、piyoraとかとかです。そっから先はどうなんですかね。
何度聞いても忘れるんだけど、PPEが親分で、SPEが子分っていう認識でいいんだろうか。いいに違いない。んと、PPEという親分が、子分のSPEにSPEのプログラムを実行させてる感じっぽい。
そういうことで、SPE用のプログラムと、PPE用のプログラムを別々に作って、PPEからSPEのプログラムを参照する感じっぽい。
最初に、SPEのhogeと出力するプログラムから。
#include <stdio.h> int main (unsigned long long spe, unsigned long long argp, unsigned long long endvp) { printf ("hoge\n"); return 0; }
SPE用プログラム(test_spe.c)
そして、PPE用のプログラムは、
#include <stdio.h> #include <stdlib.h> #include <libspe2.h> // SPEプログラムを使うので、ライブラリをインクルードする int main (int argc, char **argv) { int ret; // たぶん各種構造体とかなんとか、その辺のものの宣言 spe_context_ptr_t spe; spe_program_handle_t *prog; unsigned int entry; spe_stop_info_t stop_info; prog = spe_image_open ("hoge_spe.elf"); // SPEプログラムのイメージを開きます // 成功すると、SPEプログラムのポインタが帰ってきます spe = spe_context_create (0, NULL); // SPEプログラムのコンテキストを作ります // 何かしらのフラグが返ってくるらしいです ret = spe_program_load (spe, prog); // SPEプログラムのコンテキストのポインタと、 // SPEプログラムのイメージのポインタとか、 // そんなのが返ってきます entry = SPE_DEFAULT_ENTRY; // よくわかんねーけど、サンプルについてたから、書いた ret = spe_context_destroy (spe); // SPEプログラムを実行します ret = spe_image_close (prog); // プログラムの終了にあたり、ロードしたSPEプログラム // を破棄します return 0; }
PPE用プログラム(test_ppe.c)
みたいな感じです。
コンパイルオプションは、
$ gcc -lspe2 test_ppe.c -o test_ppe.elff $ spu-gcc test_spe.c -o test_spe.elf $ ./test_ppe.elf hoge
みたいな感じになります。
多寡がhogeをかかせるのにこんだけかよと思いつつも、実はこれって当てる石によって異なる処理をさせたり、複数の石で、異なるメモリ上の値をあつかわせるとか、そういうことができたりするわけで、これってそれはそれではえーんじゃねーかと。なんかMPIもこんな感じなんですよね。初期化したり宣言したり、親分のプロセスと子分のプロセスを書き分けたりとか、大概こんなもんですよね、マルチコアは。
そういうことで、明日からもうちょっとまともなプログラムを組んでみようと思います。