182

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

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

-アダム

4

9 に答える 9

73

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

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

それが役立つことを願っています。

于 2008-10-20T21:15:20.057 に答える
18
  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 は GPU パワーにアクセスするための nVidia の方法です。ここにいくつかの紹介があります
于 2008-10-20T21:23:03.287 に答える
9

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

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

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

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

于 2008-10-23T08:51:21.150 に答える
8

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

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

于 2011-06-25T16:31:48.997 に答える
7

ATI Stream Computing SDKを見てください。スタンフォード大学で開発されたBrookGPUをベースにしています。

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

于 2008-10-20T21:30:43.490 に答える
6

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

于 2008-10-20T21:35:31.063 に答える
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 コンパイラだけです。

于 2012-10-19T19:16:37.580 に答える
4

GPU++libShを試す

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

于 2008-10-20T21:23:43.503 に答える