2011-09-12 11 views
6

私はGPUプログラミングの世界に新たなんだ、私はウィキペディアやグーグルで読んでみましたが、私はまだいくつかの質問を持っている:GPUプログラミング?

  • 私はいくつかのGPU例をダウンロードし、CUDAのために、いくつかの.cuがありましたファイルといくつかのCPPファイルが含まれていますが、すべてのコードは通常のC/C++コードcudaMemcpyToSymbolのようなちょっと変わったコードです。残りは純粋なCコードでした。問題は、.cuコードがnvccでコンパイルされ、gccにリンクされているかどうかです。またはそれはどのようにプログラムされていますか?

  • GPUで実行するコードをコーディングすると、すべてのGPUで実行されますか?または単にCUDA?またはCUDAの書き込み方法とATIの書き込み方法と両方の書き込み方法がありますか?

答えて

10

はあなたの第二のqに答えるためにuuestion:

OpenCLは、プラットフォームに依存しないGPGPUコードを作成する場合には、(唯一の)方法です。

ATIのWebサイトには、少し検索するだけでOpenCLのリソースがたくさんあります。サンプルプロジェクトは、必要なものに簡単に変更することも、コードを理解することも簡単です。

ザ・OpenCLの仕様とリファレンスページも知識の非常に良い情報源です: http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/ http://www.khronos.org/registry/cl/specs/opencl-1.1.pdf

高速なコードを書く方法を説明し、コアな概念のいくつかを説明し、協議がたくさんあります私はそれを推奨します(これはCUDAにも当てはまります)。

あなたの最初の質問にほぼ答えるには: OpenCLでは、実行時にコードを使用している特定のGPUにコンパイルします(速度を保証するため)。

+0

実行時にコンパイルされますか?私のコードは、実行時にメモリにコピーされそこから実行されるバイトコードのようになりますか? – killercode

+0

あなたのGPGPUコードは、実行時にGPU上のコードオブジェクトにコンパイルされたソースコード文字列になります – nulvinge

5

CUDAをバックグラウンドで読んでみたいと思うかもしれません.CUDAのいくつかのコードサンプルを見れば分かります。 Amazonには現在約3種類のCUDAの書籍があり、参考資料はhttp://developer.nvidia.comです。

のご質問にお答えするには:

  • はい、.cuファイルを中間形式(PTX)にNVCCしてコンパイルされている - これは、その後、

  • 実行時にGPU固有のコードに変換され、

    nVidiaのGPUのサブセット上で実行されます生成されたコード、サブセットのサイズは、あなたのコード内で使用するものCUDA機能に応じ

+0

リンクの追加:はい、 'nvcc'によって生成された' .o'ファイルを 'gcc'や他のC(++)コンパイラとリンクすることができます。しかし、ほとんどの場合、 'nvcc'でリンクする方が簡単です。なぜなら、自動的にプログラムをすべての必要なcudaライブラリにリンクするからです(' gcc'を使用する場合、それらを手動で指定する必要があります)。 – aland

3

@nulvingeの答えを記入しておけば、私はOpenCLのようなGPUプログラミングは、GPUのレンダリングにあると言いたいと思います。しかし、マルチアーキテクチャ開発のための唯一の選択肢ではなく、DirectComputeを使用することもできますが、DirectX11互換のすべてのGPUでコードを実行したい場合は、Intelのグラフィックカードチップ右すぎる?

OpenCLでいくつかのGPUプログラミングを行うことを考えている場合でも、使用しているプラ​​ットフォームのアーキテクチャを勉強することを忘れないでください。 ATI CPU、GPU、NVIDIA GPUには大きな違いがあります。使用しているプラ​​ットフォームごとにコードを調整する必要があります。

幸いNVIDIAとAMDの両方があなたを助けるためにガイドをプログラミングしている:)

1

以前の回答に加えて、リモート1へのアクセスを持っていない限り、CUDAのためにあなたは、NVIDIAカード/ GPUが必要になり、これは私が希望コーセラからこのコースをお勧めします。

Heterogeneous Parallel Programming

それはCUDAやOpenCLの、メモリモデルへの導入を与え、タイリング、境界条件およびパフォーマンスに関する考慮事項を処理するだけでなく、このようOpenACC、高としてディレクティブベースの言語だけではなく、あなたに並列性を表現するための高水準言語コンパイラのための並列プログラミングの仕事の大半を残しています。また、このコースでは、GPUを使用できるオンラインプラットフォームが用意されています。これは、ソフトウェア/ハードウェアの設定に関することなくGPUプログラミングを開始するのに適しています。

0

異なるGPUデバイスとCPUで実行できる移植可能なコードを書きたい場合は、あなたはOpenCLを使う必要があります。

実際にカーネルを設定するには、Cでホストコードを書く必要があります.CUDAカーネル用にOpenCL 1と比較して書きたい場合は、設定ファイルが短くなることがあります。