誰もが、この巨大で並列化されたスーパーコンピューターをデスクトップにグラフィックスカード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以降でネイティブにサポートされています。
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コンパイラのみです。
MATLABを使用する場合、テクニカルコンピューティング(行列計算と大量の数学/数値計算)にGPUを使用するのは非常に簡単になります。ゲーム以外でGPUカードを使用する場合に便利です。以下のリンクをチェックしてください: