誰もが、グラフィックス カード GPU の形で、この巨大で大規模に並列化されたスーパーコンピューターをデスクトップに持っています。
- GPU コミュニティに相当する "hello world" とは何ですか?
- 主要な GPU ベンダー向けに GPU のプログラミングを開始するには、何をどこに行けばよいですか?
-アダム
誰もが、グラフィックス カード GPU の形で、この巨大で大規模に並列化されたスーパーコンピューターをデスクトップに持っています。
-アダム
NVidia の CUDA をチェックしてください。IMO は、GPU プログラミングを行う最も簡単なプラットフォームです。読むべきクールな資料がたくさんあります。
http://www.nvidia.com/object/cuda_home.html
Hello world は、GPU を使用してあらゆる種類の計算を行うことです。
それが役立つことを願っています。
他の人があなたの2番目の質問に答えたと思います。最初の CUDA の「Hello World」に関しては、標準が設定されているとは思いませんが、個人的には並列加算器 (つまり、N 個の整数を合計するプログラム) をお勧めします。
NVIDIA SDK の「リダクション」の例を見ると、表面的には単純なタスクを拡張して、結合された読み取り、メモリ バンクの競合、ループの展開など、多数の CUDA の考慮事項を示すことができます。
詳細については、このプレゼンテーションを参照してください。
http://www.gpgpu.org/sc2007/SC07_CUDA_5_Optimization_Harris.pdf
OpenCLは、特に GPU に適したコードをプログラミングできるクロスプラットフォーム ライブラリを作成する取り組みです。どの GPU で実行されるかを知らなくてもコードを記述できるため、特に複数のタイプの GPU をターゲットにすることなく、GPU の能力の一部を簡単に使用できます。ネイティブ GPU コードほどパフォーマンスが高くない (または GPU メーカーが許可するほどネイティブではない) と思いますが、アプリケーションによってはトレードオフの価値がある場合があります。
まだ比較的初期の段階 (この回答の時点では 1.1) ですが、業界である程度の支持を得ています。たとえば、OS X 10.5 以降でネイティブにサポートされています。
ATI Stream Computing SDKを見てください。スタンフォード大学で開発されたBrookGPUをベースにしています。
将来的には、すべての GPU 作業がOpenCLを使用して標準化される予定です。これは、Apple が後援するイニシアチブであり、グラフィック カード ベンダーに中立です。
CUDA は、手始めとして優れたフレームワークです。GPGPU カーネルを C で記述できます。コンパイラはコードから GPU マイクロコードを生成し、CPU で実行されるすべてのものを通常のコンパイラに送信します。ただし、これは NVIDIA のみであり、8 シリーズ以上のカードでのみ動作します。CUDA ゾーンを調べて、それで何ができるかを確認できます。CUDA SDKには素晴らしいデモがいくつかあります。SDK に付属のドキュメントは、実際にコードを記述するための出発点として非常に適しています。行列乗算カーネルの作成について説明します。これは、開始するのに最適な場所です。
CUDA や OpenCL を使用せずに GPU プログラミングを使用するもう 1 つの簡単な方法は、OpenACCを使用することです。
OpenACC は OpenMP のよう#pragma acc kernels
に機能し、作業を GPU に送信するコンパイラ ディレクティブ ( など) を使用します。たとえば、大きなループがある場合 (実際にメリットがあるのは大きなループだけです):
int i;
float a = 2.0;
float b[10000];
#pragma acc kernels
for (i = 0; i < 10000; ++i) b[i] = 1.0f;
#pragma acc kernels
for (i = 0; i < 10000; ++i) {
b[i] = b[i] * a;
}
編集: 残念ながら、現在、NVIDIA GPU カードの OpenACC を実際にサポートしているのは PGI コンパイラだけです。