web-dev-qa-db-ja.com

GPUプログラミング、CUDAまたはOpenCL?

私はGPUプログラミングの初心者です。 NVIDIA GeForce GT 640カードを搭載したラップトップを使用しています。私は2つのジレンマに直面しています。提案は大歓迎です。

  1. CUDAに行く場合-UbuntuまたはWindows明らかにCUDAはWindowsに適していますが、Ubuntuにインストールすることは重大な問題になる可能性があります。 buntu 11.1 および buntu 12.04 にCUDA 5をインストールしたと主張するブログ投稿を見てきました。しかし、私はそれらを機能させることができませんでした。また、 標準CUDA教科書 はWindowsドメインでの作業を好み、Unix/Ubuntuのインストールと動作に関しては多少サイレントです。

  2. CUDAまたはOpenCL-これはおそらく、最初の質問よりも難しいでしょう!私は主にCUDA/Nvidiaを使用してGPGPUプロジェクトに出会いましたが、OpenCLはおそらくオープンソースの次善の選択肢であり、Ubuntuへのインストールはおそらく問題ではありませんが、ここでのいくつかの提案は最も有用です。 CUDAではなくOpenCLを使用する場合、機能を犠牲にしますか?

ヘルプや提案はありますか?

72
Arkapravo
  1. OpenCLを使用する場合、WindowsとLinuxの両方で簡単に使用できます。OpenCLプログラムを実行するにはディスプレイドライバーがあれば十分であり、SDKをインストールするだけでプログラミングできます。 CUDAは特定のGCCバージョンなどに対してより多くの要件がありますが、Linuxにインストールすることもそれほど難しくありません。

  2. Linuxでは、CUDAにはGCC 4.6または4.7を使用するなどの奇妙な要件があります。 GCCの別のバージョンを使用している場合、プログラムをコンパイルできなくなります。 OpenCLを使用する場合、共通のOpenCLライブラリとリンクするだけでよいため、任意のコンパイラを使用できます。そのため、OpenCLはセットアップ、使用、コンパイルが簡単です。 OpenCLプログラムをコンパイルすると、別のブランドのOpenCL SDKを使用してコンパイルされた場合でも、(そうするようにコーディングされている限り)任意のハードウェアで実行できます。

Nvidia、AMD、およびIntelハードウェア、GPU、CPU、およびアクセラレータで機能するOpenCLプログラムを作成できます。さらに、アルテラはFPGAでのOpenCLのサポートに取り組んでいます! CUDAを使用する場合は、Nvidia GPUのみを使用し、OpenCLまたは他のプラットフォーム用の他の言語でコードを再作成する必要があります。 CUDAの使用に関する深刻な制限と、長期的には深刻な時間の無駄の原因。

誰かがCUDAとOpenCLの間に古いリファレンスを投稿しているようですが、古いものです!それらのドキュメントが公開されたとき、AMDだけがOpenCLを適切にサポートしていました。 2013年以降、OpenCLはARM、Altera、Intelなどでサポートされ、業界標準になりました。

唯一の欠点は、OpenCLが非常に柔軟であるため、プログラムでメモリの割り当て、転送などをコーディングするためのより多くのオプションと方法に直面することです。したがって、おそらくより複雑に感じるかもしれません。

92
Evren Yurtesen

Ubuntuでcuda環境をセットアップすることはそれほど難しくないと思います。試してみてください。

コンピューティングアーキテクチャの学生として、OpenCLとCUDAの両方を学ぶ必要があると思います。 CUDAはより多くのハードウェアとランタイム情報を公開するため、最初にcudaを学習する必要があります。GPUコードを最適化する場合、ハードウェアの認識は非常に重要です。

8
Xiaolong Xie