日別アーカイブ: 2008年8月15日

AMD Stream Computing

NVIDIA の CUDA と同じように AMD (ATI) では AMD Stream SDK が用意されています。

AMD Pioneers Stream Computing on Graphics Processor Units
AMD Stream SDK

XP のみ対応となっているようで Vista では動作しませんでした。
RADEON + Vista で Folding@Home が動作しない理由もこの辺でしょうか。 (2008-08-19 追記を参照してください)
インストール自体は可能でドキュメントは読むことが出来ました。

CUDA は C言語 の拡張で、Cg と同じように専用コンパイラを用いた高級言語が
使われています。内部の詳細は出来る限り見えないように隠されています。
対する AMD Stream SDK は R600 (RADEON HD2000/3000) の詳細な資料が付属しており
ハードウエアから GPU の ISA までより詳しく内部構造を理解できるようになっています。

資料を見ると、GPGPU よりと思われる G80 系の GeForce と違い、
従来のグラフィック向け GPU 色をそのまま強く残しているように見えます。
プログラムの実行もシェーダーパイプラインをほぼなぞる形で実行されており、
メモリアクセスも頂点やテクスチャのフェッチと変わらないようです。

ネイティブコードは VLIW なので、これをそのまま人間が手で書いてパイプライン
最適化を行うのは困難です。
そのため、よりわかりやすくハードウエアを抽象化した
CAL (Compute Abstraction Layer) が用意されています。

CAL で用いられる言語もアセンブラですが、ハード依存を無くした比較的シンプルな
命令セットになっているようです。
この命令は IL (Intermediate Language) と呼ばれています。

IL でプログラムを用意しておけば、ドライバが実行時に GPU にあわせて
ネイティブな GPU 命令にコンパイルしてくれます。

この仕組みは GPU としてはごく当たり前の動作です。
例えば Direct3D の Shader は下記の手順で実行されています。

 HLSL → Direct3D IL → Driver 内蔵 Compiler → ネイティブコード

もともと Shader も D3D で定義された汎用の中間コードを、さらにコンパイルして
実行しているわけです。
IL 自体 ShaderModel 4.0 の HLSL がはき出すコードによく似ています。
実際 Shader とほとんど同じもので、HLSL で記述することもできるようです。

グラフィック向け Shader と異なる点としては
・OpenGL/DirectX といったグラフィック用 API を使わなくて良いこと。
 描画とか画面とか複雑な初期化がいらない。
・double 演算など専用の拡張命令が使えること
・オフセットを利用してメモリ書き込み位置をある程度指定出来ること
等でしょうか。

CAL SDK の他に Brook plus SDK が付属しており、Stream プロセッサ向けの
上位言語を使うこともできるようです。

素の GPU にかなり近いこともありますが、比較的低いレベルで抽象化し
さまざまな上位言語に対応する方針であること、など
CUDA との方針の違いがよくわかります。

2008-08-19 追記:
コメントで指摘がありましたが、Folding@home は RADEON + Vista で動きます。
log file をよく見たら Nvidia と誤認識されており、ビデオカードを頻繁に
入れ替えていたのが原因だったようです。
すみません、OS は全く関係なくただの勘違いでした。

UAC 設定や管理者権限で実行したかどうかによりますが、
C:\Program Files (x86)\Folding@home\Folding@home-gpu
だけではだめで
C:\Users\<USER>\AppData\Roaming\Folding@home-gpu
のファイルもすべて消してから Folding@home の GPU2 client (6.20) を
入れ直したら動作するようになりました。

また Vista 対応 CAL runtime も入るとのことで、SDK も試せるかもしれません。
こちらはまだ未確認です。それらしき dll は Roaming 側に入っていました。