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 です
  • やっていること
    1. とりあえず、PPEはa[], b[] に abcdef....z をいれます。13文字ずつわけて
    2. んで、SPE は a, b のメインメモリのアドレスをもらって、MFC_GETL_CMD をつかって一気に読み込みます
    3. 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
  • 起動方法
    ./p_ldma

vectorshift

  • SPEで、ヴェクトルを回転させたかった。つまり (0, 1, 2, 3) -> (1, 2, 3, 0)
  • C/C++ Langage Extensions 節2.10 です
  • やっていること
    1. ヴェクトル全体を左に一要素分ローテートしました
    2. 4回繰り返します、最初に戻ります
  • キーとなるソース
    va[0] = spu_rlqwbyte(va[0], (int)sizeof(float));
    
  • 起動方法
    elfspe ./s_vshift

reuse

  • SPEコンテキストとPthread を再利用するにはどうすればいいかなという試行錯誤
  • これを見ると、N体問題の計算部分以外は出来てしまいます。たぶんね。これを骨組みにつくってもいいかもしれない。
  • 同梱の barrier.c barrier.h errors.h は Dave Butenhof 氏のつくったライブラリです。ライセンスは明記してないけど GPL あたりなので、私用に使うときは気をつけて
  • すくなくとも、利益の発生するような使い方では使ってほしくないようです。
  • やっていること、キーとなるソース
    • えっと、書いてしまうと課題が全部分かってしまうので、各自解析してみてください。
  • 起動方法
    ./p_reuse

添付ファイル: filetest.tar.gz 366件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-12-22 (土) 09:33:09 (3591d)