AMD Brook +:すぐに使える

Khabrovskの住民はすでにnVidia CUDAについて聞いていましたが、今ではAMD Brook +が登場しています。 Brook +を使用すると、Cでプログラムを作成し、AMDビデオカードで実行できます(オプションとして、平均コード品質のCPUバージョンを自動的に生成できます)。 達成可能なパフォーマンス-AMD 4870で約6,000億回の操作。



NB :この記事は簡単な紹介です。Brook+でのプログラミングのすべての側面がここで取り上げられることを期待しないでください:-)



鉄について



Brook +はHD2xxxカード(制限付き)で動作しますが、通常は3xxxシリーズで動作します。 アドバタイズで4870 800個のプロセッサがあることがわかった場合、実際には160個あり、それぞれがサイクルごとに5つの命令を実行します(3番目のシリーズは、同時に実行される命令に重大な制限があり、4番目のプロセッサはほとんどすべてを持つことができます)。 すべてがかなり「低レベル」であるCUDAとは異なり、Brook +ではコンパイラーがすべてを行い、すべてがキャッシュされ、最も不適切な瞬間にすぐに動作を停止します。 プラス-AMDのメモリキャッシュはキャッシュされますが、nVidiaはキャッシュされません。



どこから始めますか?



いつものように、動作するSDKの例から始めた方が良いです(Visual Studio 2005の例についてお話します。Linuxもサポートされています)。 SDKは、 http//ati.amd.com/technology/streamcomputing/sdkdwnld.htmlからダウンロードできます samples.slnを開き、hello_brookプロジェクトから開始できます。

hello_brook.brファイルのカスタムビルドルールに注意してください。プロジェクトで使用する必要がある.hおよび.cppファイルを生成します。

mkdir brookgenfiles | "$(BROOKROOT)\sdk\bin\brcc_d.exe" -o "$(ProjectDir)\brookgenfiles\$(InputName)" "$(InputPath)"





なぜなら プリプロセッサはサポートされていません。自分で個別に呼び出すことができます。次のようになります。

cl /P /C file.br

copy file.i file_pp.br

"$(BROOKROOT)\sdk\bin\brcc_d.exe" -k -p cal file_pp.br






最後の行の-p calは、GPUコアのみが生成され、CPU部分が省略されることを意味します(長時間コンパイルできるため、必ずしも必要ではありません)。



プログラム構成



kernel void your_kernel(float input<>, out float output<>, float val)

{

if (input > val)

{

output = 1.0f;

}

else

{

output = 0.0f;

}

}








このようなものと呼ばれる:



unsigned int dim [] = {800 * 100};

:: brook :: Stream inputStream(1、dim);

::小川::ストリームoutputStream(1、dim);



inputStream.read(_input);

your_kernel(inputStream、outputStream、123.35);

outputStream.write(_output);



CUDAとは異なり、各ストリームのデータをすぐに設定することに注意してください。 それだけです:-)作業するとき、.brファイルの配列と構造は適切にサポートされていないことに注意してください:-)また、関数本体の先頭でのみ変数を定義する必要があることを忘れないでください、これはC ++では使用できません:-)



Brook +は他の起動オプションもサポートします:ソースデータが一般的な配列から取得されるとき、ストリームの「座標」が決定されるとき(CUDAのように)、累積カーネル(つまり、配列のすべての数の合計を考慮することができます)。 これについては、ドキュメントまたはSDKの例で読むことができます。



最適化



通常、最適化方法はCUDAと一致します。





動かない?



まず、SDKとともにBrook + _Documentationフォルダーのドキュメントを読む必要があります。 その後、 公式フォーラムで質問することができます-残念ながら、そこにいる開発者はあまり購読されていません。 ロシア語では、例えばフォーラム私に尋ねることができます。そこで私は答えます:-)また、多くの人々がgpgpu.ruに住んでいます



おわりに



要約すると、Brook +を使用すると、それほど便利ではない環境で追加のプログラミング作業を行うことで、大量のメモリを必要としない並列化されたタスクで驚異的なパフォーマンスを実現できます。



この紹介が、Brook +プログラミングの理解に役立つことを願っています。 問題/質問がある場合-私はお手伝いさせていただきます。 さて、私たちの前にOpenCLとSIMD x86の紹介があります



All Articles