Cell Broadband Engineを利用したホログラム計算(後編)
● SPE用プログラムを作成する
SPEプログラムの大きな特徴は,DMA転送によるデータの収受とSIMDを利用した関数群です.こちらも,以下に例を挙げて解説します.
1)ライブラリのインクルード
まず,組み込み関数とDMA転送を利用するために,それぞれspu_intrinsicsとspu_mfcioをインクルードします〔リスト2(a)〕.
#include <spu_intrinsics.h>
#include <spu_mfcio.h>
2)DMA転送用領域の確保
DMA転送のためのデータ領域を宣言します.SPEがDMA転送を行うのはPPEのメイン・メモリ上のデータなので,転送のためのデータ領域の宣言部はPPEの対応するコードとほぼ同じになります.また,SPEのコードでもバイト境界をそろえるために__attribute__キーワードを指定します〔リスト2(b)〕.typedef struct{
KATA *dataPos; // メイン・メモリ上での演算用データ格納場所
KATA *resultPos; // メイン・メモリ上の演算結果データ保存先
char pat[] __attribute__((aligned(128)));
// データ・サイズ調整用
}DmaParams __attribute__((aligned(128)));
また,ローカル・ストア上にDMA転送用パラメータの領域を確保し,バイト境界を128バイトにそろえます〔リスト2(c)〕.
static volatile DmaParams dmaParams__attribute__((aligned(128)));
ローカル・ストア上に結果格納用領域を確保し,バイト境界を128バイトにそろえます〔リスト2(d)〕.
static volatile unsigned char result__attribute__((aligned(128)));