wiki:GRAPE-DR model 450

Version 7 (modified by nakasato, 16 years ago) (diff)

--

SINGプロセッサ

基本情報

  • SIMD型のプロセッサである
  • Processor Element(PE)と呼ぶ演算ユニットが512個搭載されている
    • PEには倍精度加算器、単精度相当乗算器、ALUが内蔵されている
    • PEには、レジスタが32bitで64ワードと、ローカルメモリが512ワードがある
    • 演算器のレイテンシーのため、パイプライン処理により擬似的に4変数へ同一の命令を実行する
    • 論理的には毎クロック2048変数へ同一の命令を実行するSIMD計算機になる
  • PEは32個ごとにユニットになっており、これをBroadcast Block(BB)と呼ぶ
    • BBには、共有メモリとして2048ワードのメモリ(Broadcast Memory:BM)がある
    • BMとPEの接続トポロジーは、BMを中心としたstar networkである
    • 1チップには16個のBBが搭載されている
    • 16個のBBは、Reduction Network(RN)により接続されていて、その接続トポロジーはbinary netowrkである
    • RNの接続ノードにはPEと同等のユニットが接続されているので、BBからの出力の合計, max, minなどのreductionが可能

GRAPE-DR model 450をつかうためのノウハウ

GDRLIBのマニュアル暫定版

GDRLIBは、LSUMP(仮称)コンパイラで生成したDDコードを、KFCR社のGRAPE-DR model 450で使うためのAPIである。もともと、GRAPE-DRでは、アセンブラからAPIを自動生成する機能があるが、あまり使いやすいとはいえないので、より直感的に使えるようなラッパーとしての役割を果たす。まず、APIの説明をした後、使い方の例を解説する。

なお、現時点ではDD演算用に特化しているため、GDRLIBとアプリケーションは、どちらもC++でコンパイルする必要がある。将来的にはより汎用的なデザインと置き換える。以下に出てくるDDやQDは、qd-2.3.7ライブラリにより定義された四倍精度、八倍精度変数のclassである。

int GDRsetup()

GRAPE-DRボードの利用を開始する。これによりボードなどの初期化処理がおこなわれる。正しく初期化ができた場合は0が返り値になる。(現バージョンはエラーチェックなし)

int GDRcleanup()

GRAPE-DRボードの利用を終了する。ダミー。

void GDRrun(int n)

GRAPE-DRボードでの計算を開始する。引数nは、ループ回数である。この関数は、以下にでてくるデータ転送関数を適切に実行したあとで、呼ぶことにより、実際の計算がボードで実行される。この関数はボードでの計算が終わるまでブロックする。

int GDRwriteQD_BM(int i, int n, qd_real *p)

BMにQD変数のデータをn個書き込む。iは書き込む場所(変数)を指定する。通常、BMデータはループの回数分だけ必要なので、nはループの回数と等しい。配列q[]のサイズはn以上でなければならない。現バージョンでは、すべてのBBに同じデータを書き込む。さらに、GRAPE-DRでは4要素のベクトル処理が基本動作であるが、この関数は4要素全てにq[]を書き込む。

void GDRtransferBM(int n)

BMのデータを転送する。GDRwriteQD_BM()は実際には内部バッファへのコピーしかしないので、この間数を呼ぶことでボードへの転送がおこなわれる。この関数は転送が終わるまでブロックする。