Cell Broadband Engineを利用したホログラム計算(後編)

柘植 宗範,伊藤 智義

tag: 組み込み

技術解説 2008年1月31日

3)メイン・メモリからの演算用データの読み込み

 DMA転送を行うためには,まず,spu_mfcdma64関数にローカル・ストア側の転送に利用するメモリ領域の先頭アドレス,メイン・メモリ側のメモリ領域の先頭アドレス上位32ビット,メイン・メモリ側のメモリ領域の先頭アドレス下位32ビット,DMA転送するデータのサイズをバイト数で指定します.また,DMA転送を識別するタグ番号(このタグ番号を用いてDMA転送の完了を確認する),およびDMA転送の方向指定(ローカル・ストアへ転送する場合はMFC_GET_CMD,メイン・メモリへ転送する場合はMFC_PUT_CMD)を引き数として渡します.

 次に,spu_writechマクロを利用してDMA転送の完了を待つタグ番号をMFCへ伝え,spu_mfcstat関数とspu_writechマクロで書き込まれたタグの値が更新されるのを待ちます.直前のspu_writechで書き込まれたすべてのタグの更新を待つには,MFC_TAG_UPDATE_ALLを指定します.spu_writechマクロとspu_mfcstat関数を組み合わせて呼ぶことで,任意のタグ番号のDMA転送の完了を待つことができます.

 例えば,PPEプログラムで指定したSPEプログラムに渡された引き数を取得する場合は,リスト2(e)のようにします.

spu_mfcdma64(&dmaParams,mfc_ea2h(argp),mfc_ea2l(argp),
sizeof(DmaParams),1,MFC_GET_CMD);
spu_writech(MFC_WrTagMask,1 << 1);
spu_mfcstat(MFC_TAG_UPDATE_ALL);


リスト2 SPE用プログラム (e)メイン・メモリから演算用データを読み込む

4)SIMD演算の利用

 また,SIMD演算の利用として加算を行う場合は,リスト2(f)のようにします.このほかにも,乗算や逆数,論理積など,さまざまな計算にSIMD演算を利用できます.

vector signed int va = (vector Signed int) { 1,2,3,4 };
vector signed int vb = (vector Signed int) { 5,6,7,8 };
vector signed int vc;
vc = spu_add( va,vc )?; // 1+5,2+6,3+7,4+8


リスト2 SPE用プログラム (f)SIMD演算の例

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日