ブルックGPU

ブルックGPU
開発者スタンフォード大学
安定版リリース
v0.5 ベータ 1 / 2007 (2007年
リポジトリ
オペレーティング·システムLinuxWindows
タイプコンパイラ/ランタイム
ライセンスBSDライセンス(一部はGPL
Webサイトhttp://graphics.stanford.edu/projects/brookgpu/

コンピューティングの分野において、Brookプログラミング言語とその実装であるBrookGPUは、グラフィックス処理装置(GPGPU)上での汎用コンピューティングを可能にする初期の影響力のある試みであった。 [ 1 ] [ 2 ]スタンフォード大学のグラフィックスグループで開発されたBrookは、ATINvidiaなどのGPUの並列処理を活用するように設計されたストリームプログラミング言語のコンパイラおよびランタイムシステムであった。

BrookGPUは、ANSI Cの派生言語であるBrookストリームプログラミング言語で記述されたプログラムをコンパイルします。演算バックエンドとしてOpenGL v1.3以降、DirectX v9以降、またはAMDのClose to Metalをターゲットとすることができ、 Microsoft WindowsLinuxの両方で動作しました。デバッグのために、BrookGPUはCPU上で仮想グラフィックカードを シミュレートすることもできました。

状態

最後のメジャー ベータ リリース (v0.4) は 2004 年 10 月でしたが、新たな開発が開始され、2007 年 11 月に v0.5 ベータ 1 リリースで再び停止しました。

v0.5の新機能には、大幅にアップグレードされ高速化されたOpenGLバックエンドが含まれます。PBuffersの代わりにフレームバッファオブジェクトを使用し、ベンダー独自の拡張機能の代わりに標準OpenGLインターフェースを中心としたコードを統合しました。GLSLサポートも追加され、これまでDirectX 9でのみサポートされていたすべての機能(複雑な分岐やループ)がOpenGLでサポートされるようになりました。特に、これによりBrookはLinuxでもWindowsと同様に動作するようになりました。

v0.5 シリーズのその他の改良点には、異なるスレッドが異なる Brook プログラムを同時に実行できるマルチバックエンドの使用 (これにより、マルチ GPU セットアップの使用が最大化される) や、CPU バックエンドの SSEおよびOpenMPサポート (これにより、最新の CPU をほぼ最大限に使用できるようになる) などがあります。

パフォーマンス比較

デスクトップCPUとGPGPUの同等の比較は、アルゴリズムと構造の違いのために問題があります。[ 3 ]

たとえば、2.66GHz Intel Core 2 Duo は、 SSE とストリーミング メモリ アクセスを最適に使用してプリフェッチャーが完璧に動作すれば、最大 25GFLOPS ( 1 秒あたり 250 億回の単精度浮動小数点演算) を実行できます。ただし、伝統的に (シェーダ プログラムの長さの制限により) ほとんどの GPGPU カーネルは大量のデータに対して比較的少量の作業を並列に実行する傾向があるため、デスクトップ CPU で GPGPU アルゴリズムを直接実行する大きな問題は、一般的に CPU がほとんどの時間をRAM の待機に費やすため、メモリ帯域幅が大幅に低くなることです。たとえば、デュアル チャネル PC2-6400 DDR2 RAM は約 11Gbit/s のスループットが可能で、合計 3GFLOPS の帯域幅があり、読み取りと書き込みの両方が必要であることを考えると、最大で約 1.5GFLOPS になります。結果として、メモリ帯域幅が制約されている場合、Brook の CPU バックエンドは 2GFLOPS を超えることはありません。実際には、特に SSE アクセラレーションが可能な唯一のデータ型である float4 以外のデータ型の場合、この値はさらに低くなります。

ATI HD 2900 XT (740 MHz コア、1000 MHz メモリ)では、Brook は DirectX 9 バックエンド経由で最大 410 GFLOP を実行できます。[ 4 ] OpenGL は現在 (ドライバとCgコンパイラの制限により) その GPU 上の GPGPU バックエンドとしては効率がはるかに低いため、Brook はその GPU で OpenGL を使用する場合に 210 GFLOP しか管理できません。理論上は、これは CPU よりも約 20 倍高速のように見えますが、先ほど説明したように、それほど簡単ではありません。GPU には現在、主要な分岐と読み取り/書き込みアクセスのペナルティがあるため、実際のコードではピーク最大値の 3 分の 1 が妥当な最大値になると予想されます。これにより、ATI カードは約 125 GFLOP となり、Intel Core 2 Duo よりも約 5 倍高速になります。

しかし、これはGPUとの間で処理対象のデータを転送するという重要な部分を軽視しています。PCI Express 1.0 x8インターフェースを備えたATI HD 2900 XTのメモリへの書き込み速度は約730Mbit/s、読み出し速度は約311Mbit/sで、これは通常のPCメモリよりも大幅に低速です。大規模なデータセットの場合、このことは、適切にチューニングされたCPU実装よりもGPUを使用することによる速度向上の効果を大幅に損なう可能性があります。もちろん、GPUの速度はCPUよりもはるかに速くなり、PCI Expressインターフェースも改善されるにつれて、大規模な処理をGPUにオフロードする方が理にかなっているでしょう。

BrookGPUを使用するアプリケーションとゲーム

参照

参考文献

  1. ^ Tarditi, David; Puri, Sidd; Oglesby, Jose (2006). 「アクセラレータ:データ並列処理を用いたGPUの汎用プログラミング」(PDF) . ACM SIGARCH Computer Architecture News . 34 (5). doi : 10.1145/1168919.1168898 .
  2. ^ Che, Shuai; Boyer, Michael; Meng, Jiayuan; Tarjan, D.; Sheaffer, Jeremy W.; Skadron, Kevin (2008). 「CUDAを用いたグラフィックスプロセッサにおける汎用アプリケーションのパフォーマンス調査」. J. Parallel and Distributed Computing . 68 (10): 1370– 1380. doi : 10.1016/j.jpdc.2008.05.014 .
  3. ^ Marziale, Lodovico; Richard, Golden (2007)、「Massive threading: GPUs を用いたデジタルフォレンジックツールのパフォーマンス向上」FSI Digital Investigation4 : 73–81doi : 10.1016/j.diin.2007.06.014
  4. ^ Buck, Ian; Foley, Theresa; Horn, Daniel; Sugerman, Jeremy; Fatahalian, Kayvon; Houston, Mike; Hanrahan, Pat (2004年8月) 「Brook for GPUs: Stream Computing on Graphics Hardware」ACM Trans. Graph.23 (3): 777– 786、doi : 10.1145/1015706.1015800{{citation}}: CS1 メンテナンス: 日付と年 (リンク)