web-dev-qa-db-ja.com

GPUプログラミングの紹介

誰もがデスクトップ上にグラフィックスカードGPUの形でこの巨大な超並列スーパーコンピューターを持っています。

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

-アダム

167
Adam Davis

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

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

お役に立てば幸いです。

66
Nazgob
  1. プログラム可能な頂点シェーダーとピクセルシェーダーを使用すると、GPUでコードを直接実行して、描画するバッファーを操作できます。これらの言語(つまり、OpenGLのGL Shader LangとHigh Level Shader LangとDirectXの同等物)は、Cスタイルの構文であり、非常に使いやすいです。 HLSLのいくつかの例を見つけることができます こちら XNAゲームスタジオとDirect Xについて。まともなGLSL参照はありませんが、周りにはたくさんあるはずです。これらのシェーダー言語は、頂点ごとまたはピクセルごとのレベルでグラフィックカードに直接描画されるものを操作するための膨大な能力を提供し、シャドウ、ライティング、ブルームなどの実装を非常に簡単にします。
  2. 2番目に思い浮かぶのは、 openCL を使用して、汎用GPUの新しい行をコーディングすることです。私はこれをどのように使うのか分かりませんが、私の理解では、openCLはあなたにグラフィックスカードと通常のCPUの両方のプロセッサにアクセスできるようになるということです。これはまだ主流の技術ではなく、Appleによって推進されているようです。
  3. CUDA はホットなトピックのようです。 CUDAは、nVidiaのGPUパワーへのアクセス方法です。 ここ いくつかのイントロ
16
DavidG

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

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

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

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

8
biozinc

ATI Stream Computing SDK をご覧ください。これは、スタンフォードで開発された BrookGP に基づいています。

将来的には、すべてのGPU作業が OpenCL を使用して標準化される予定です。これは、グラフィックカードベンダーに中立なAppleが後援するイニシアチブです。

7
graphics

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

6
Jay Conrod

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

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

6
Adam Davis

CUDAやOpenCLを使用せずにGPUプログラミングを開始するもう1つの簡単な方法は、 OpenACC を使用することです。

OpenACCはOpenMPと同様に動作し、GPUに作業を送信するためのコンパイラディレクティブ(#pragma acc kernelsなど)を備えています。たとえば、大きなループがある場合(大きなループのみが実際にメリットがあります):

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カードの場合、PGIコンパイラのみが現在OpenACCを実際にサポートしています。

5
Kyle Niemeyer

多分あなたはこれを好きになるでしょう GPGPU IDE 、これは一般的なGPU実験のための不必要な複雑さを隠します。現在、カーネルはOpenCLおよび/またはGLSLシェーダー用にプログラムできます。

4

GPU ++ および libSh を試してください

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

3
gbjbaanb

MATLABを使用する場合、GPUを使用してテクニカルコンピューティングを簡単に実行できます(マトリックス計算と重い計算/数値計算)。ゲーム以外でGPUカードを使用する場合に役立ちます。以下のリンクをご覧ください。

http://www.mathworks.com/discovery/matlab-gpu.html

3
Chetan Rawal

このトピックと並列プログラミングにも興味があります。そして、私は次を見つけました link 、Udacity.comを見てください!

1
Randika Vishman