TESTパッケージ †
担当者が Cell C/C++ Langage Extensions と Fixstars とかを調べながら作ったチュートリアルパッケージです。とりあえず、
この関数面白そうだ → 使ってみる → 出来た〜
の流れで公開しますので、なかなか増えないかもしれないです。まぁおまけですから。
パッケージ構成(2007/12/22現在) †
- test
+- listdma
| +- p_ldma.c
| +- s_ldma.c
| +- Makefile
|
+- vectorshift
| +- s_vshift.c
| +- Makefile
|
+- reuse
+- p_reuse.c
+- s_reuse.c
+- barrier.c
+- barrier.h
+- errors.h
使い方 †
とりあえず、自分の使いたいプログラムのディレクトリで
make
あとは各プログラムに起動方法かきます。
説明 †
listdma †
- PPE-SPE間の転送に使う LIST DMA という機能があります。これを使うと、複数の配列を数本まとめて送れるみたいです。
- C/C++ Langage Extensions 節4.4 です
- やっていること
- とりあえず、PPEはa[], b[] に abcdef....z をいれます。13文字ずつわけて
- んで、SPE は a, b のメインメモリのアドレスをもらって、MFC_GETL_CMD をつかって一気に読み込みます
- SPEプリント文でちゃんと受け取れてるか見せてくれます
- キーとなるソース
for (i = 0; i < 2; i++) {
list[i].notify = 0;
list[i].reserved = 0;
list[i].size = 16;
}
list[0].eal = mfc_ea2l(args.a);
list[1].eal = mfc_ea2l(args.b);
spu_mfcdma64(buf, mfc_ea2h(args.a), (unsigned int)&list, sizeof(list), 0, MFC_GETL_CMD);
spu_writech(MFC_WrTagMask, 1 << 0);
spu_mfcstat(MFC_TAG_UPDATE_ALL);
- 応用例はこんな感じです→FIXSTERS
vectorshift †
reuse †
- SPEコンテキストとPthread を再利用するにはどうすればいいかなという試行錯誤
- これを見ると、N体問題の計算部分以外は出来てしまいます。たぶんね。これを骨組みにつくってもいいかもしれない。
- 同梱の barrier.c barrier.h errors.h は Dave Butenhof 氏のつくったライブラリです。ライセンスは明記してないけど GPL あたりなので、私用に使うときは気をつけて
- すくなくとも、利益の発生するような使い方では使ってほしくないようです。
- やっていること、キーとなるソース
- えっと、書いてしまうと課題が全部分かってしまうので、各自解析してみてください。
- 起動方法
./p_reuse