GPUプログラミング入門[終了]


176

誰もが、この巨大で並列化されたスーパーコンピューターをデスクトップにグラフィックスカードGPUの形で搭載しています。

  • GPUコミュニティに相当する「Hello World」とは何ですか?
  • 主要なGPUベンダー向けにGPUのプログラミングを開始するには、どこに何をすればよいですか?

-アダム


1
あなたはGPGPU、またはグラフィックコーディングについて話しているのですか?
Menkboy、2008年

5
彼はCUDA(nVidia GPUのAPI)と他のテクニックについて話しています。非グラフィックコーディングのためにGPUで利用可能なFPUユニットを使用する。
ウェッジ

1
参考までに、最新世代のGeForce 8800には1.3ギガヘルツで動作する128のストリームプロセッサがあり、最上位のGTX 280には240のストリームプロセッサがあり、これらのGPUの理論上のパフォーマンスはそれぞれ0.5と0.9 TeraFLOPSです。
ウェッジ

回答:


70

NVidiaのCUDAをチェックしてください。IMOは、GPUプログラミングを行うのに最も簡単なプラットフォームです。読むべきたくさんのクールな資料があります。 http://www.nvidia.com/object/cuda_home.html

Hello worldは、GPUを使用してあらゆる種類の計算を行うことになります。

お役に立てば幸いです。


17
  1. プログラム可能な頂点シェーダーとピクセルシェーダーを取得し、GPUでコードを直接実行して、描画するバッファーを操作できます。これらの言語(つまり、OpenGLのGLシェーダーラングと高レベルシェーダーラング、およびDirectXに相当する言語)は、Cスタイルの構文であり、本当に使いやすいです。いくつかのHLSLの例を見つけることができ、ここで XNAゲームスタジオと直接X.私のためには、まともなGLSLの参照を持っていないが、私はたくさんの周りにあると確信しています。これらのシェーダー言語は、グラフィックスカードに直接、頂点ごとまたはピクセルごとのレベルで描画されるものを操作するための膨大な能力を提供し、シャドウ、ライティング、ブルームなどの実装を非常に簡単にします。
  2. 2番目に頭に浮かぶのは、openCLの使用 です。を使用して、汎用GPUの新しいラインをコード化することです。これの使い方はわかりませんが、私の理解では、openCLを使用すると、グラフィックスカードと通常のCPUの両方のプロセッサにアクセスできるようになります。これはまだ主流の技術ではなく、Appleによって推進されているようです。
  3. CUDAが話題になっているようです。CUDAは、nVidiaがGPUパワーにアクセスする方法です。ここにいくつかの紹介があります

9

他の人があなたの2番目の質問に答えたと思います。最初のCUDAの「Hello World」については、標準が決まっているとは思いませんが、個人的には並列加算器(つまり、N個の整数を合計するプログラム)をお勧めします。

NVIDIA SDKの「削減」の例を見ると、表面的に単純なタスクを拡張して、合体した読み取り、メモリバンクの競合、ループのアンロールなど、CUDAに関する多くの考慮事項を示すことができます。

詳細については、このプレゼンテーションを参照してください。

http://www.gpgpu.org/sc2007/SC07_CUDA_5_Optimization_Harris.pdf



7

OpenCLは、特にGPUに適したコードをプログラミングできるクロスプラットフォームライブラリを作成する取り組みです。これにより、実行するGPUを知らなくてもコードを記述できるため、特にいくつかのタイプのGPUをターゲットにすることなく、GPUの能力の一部を簡単に使用できます。私はそれがネイティブGPUコードほど(またはGPUメーカーが許可するほどネイティブではない)パフォーマンスが悪いと思いますが、一部のアプリケーションではトレードオフの価値がある場合があります。

それはまだ比較的初期の段階(この回答の時点では1.1)ですが、業界である程度の牽引力を獲得しています。たとえば、OS X 10.5以降でネイティブにサポートされています。


6

CUDAは、最初から優れたフレームワークです。CでGPGPUカーネルを記述できます。コンパイラーはコードからGPUマイクロコードを生成し、CPUで実行されるすべてのものを通常のコンパイラーに送信します。それはNVIDIAだけですが、8シリーズ以上のカードでのみ動作します。CUDAゾーンをチェックして、それで何ができるかを確認できます。CUDA SDKにはすばらしいデモがいくつかあります。SDKに付属するドキュメントは、実際にコードを作成するための非常に優れた出発点です。行列乗算カーネルの作成について順を追って説明します。これは、始めるのに最適な場所です。


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コンパイラのみです。


3

試しGPU ++libShを

LibShリンクは、プログラミング言語をグラフィックスプリミティブ(そして明らかに、プリミティブ自体)にどのようにバインドしたかについての適切な説明があり、GPU ++はそのすべてをコード例で説明しています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.