web-dev-qa-db-ja.com

NVIDIA対AMD:GPGPUのパフォーマンス

両方のコーディングの経験がある人から話を聞きたいです。私自身、NVIDIAの経験しかありません。

NVIDIA CUDAは、競合他社よりもはるかに人気があるようです。 (このフォーラムで質問タグを数えると、「cuda」は「opencl」3:1を上回り、「nvidia」は「ATI」15:1を上回り、「ATI-stream」のタグはまったくありません)。

一方、ウィキペディアによると、ATI/AMDカードには、特に1ドルあたりの可能性がはるかに高いはずです。現在の市場で最速のNVIDIAカードであるGeForce 580($ 500)は、1.6単精度TFlopsと評価されています。 AMD Radeon 6970の価格は370ドルで、定格は2.7 TFlopsです。 580には、772 MHzで512の実行ユニットがあります。 6970には、880 MHzで1536の実行ユニットがあります。

AMDのNVIDIAに対する紙の優位性はどれほど現実的であり、ほとんどのGPGPUタスクで実現される可能性がありますか?整数タスクはどうなりますか?

103
Eugene Smith

比phor的に言えば、ATIはnvidiaと比較して良いエンジンを持っています。しかし、nvidiaはより良い車を持っています:D

これは主に、nvidiaが科学計算に必要な重要なライブラリ(BLAS、FFT)を開発するために(お金と人の)十分なリソースを投資し、それを再び促進するのに良い仕事をしたからです。これが、ATI(またはOpenCL)と比較して、CUDAがここでタグを支配する理由かもしれません。

一般にGPGPUタスクで実現される利点については、メモリ転送帯域幅、優れたコンパイラー、おそらくドライバーなどの他の問題(アプリケーションに依存)に依存します。より成熟したコンパイラ、Linuxでより安定したドライバ(科学計算で広く使用されているためLinux)を備えたnvidiaは、CUDAに有利にバランスを傾けています(少なくとも現時点では)。


[〜#〜] edit [〜#〜]2013年1月12日

この投稿をしてから2年が経ちましたが、それでも時々意見を集めているようです。だから私はいくつかのことを明確にすることにしました

  • AMDはゲームを強化しました。現在、BLASとFFTの両方のライブラリがあります。 OpenCLを中心に多数のサードパーティライブラリも登場しています。
  • インテルは、OpenMPとOpenCLの両方をサポートするXeon Phiを導入しました。また、既存のx86コードを使用する機能もあります。 コメントに記載されているように、SSEは今のところなしで制限されたx86
  • NVIDIAとCUDAは、利用可能なライブラリの範囲でまだエッジを持っています。しかし、彼らは以前ほどOpenCLに焦点を合わせていないかもしれません。

要するに、OpenCLは過去2年間でギャップを埋めました。フィールドに新しいプレーヤーがいます。しかし、CUDAはまだ少し先を行っています。

79

私はCUDA対OpenCLについて強い感情を持っていません。おそらく、OpenCLは、オープンスタンダードであることだけで、長期的な未来です。

しかし、現在のNVIDIA対GPGPU用のATIカード(グラフィックスパフォーマンスではなく、GPGPU)、私は強い意見を持っています。そしてそれを導くために、私は 現在の大きなクラスターのトップ500リスト で、NVIDIAはAMD 4システムを1にリードし、 gpgpu.org で、 NVIDIAの検索結果(論文、オンラインリソースへのリンクなど)は、AMD 6:1の結果を上回っています。

この違いの大きな部分は、利用可能なオンライン情報の量です。 NVIDIA CUDA Zone vs AMDの GPGPU Developer Central をご覧ください。開発者が立ち上げるためにそこにあるものの量は、比較にさえ近づきません。 NVIDIAのサイトでは、おそらくあなたのような問題に取り組んでいる人々からの大量の論文と寄稿されたコードを見つけることができます。 NVIDIAや他の場所からの膨大なオンラインクラスや、開発者のベストプラクティスガイドなどの非常に有用なドキュメントを見つけることができます。無料の開発ツール(プロファイラー、cuda-gdbなど)の入手可能性は、NVIDIAの方法を圧倒的に傾けます。

(編集者:この段落の情報はもはや正確ではありません。)そして、ハードウェアの違いもあります。 AMDのカードは、ピークフロップに関してより優れた仕様を備えていますが、そのかなりの部分を取得するには、問題を多くの完全に独立したストリームプロセッサに分割する必要があるだけでなく、各作業項目もベクトル化する必要があります。 GPGPUingのコードは非常に難しいことを考えると、いくつかのプロジェクトを作成したり壊したりするには、アーキテクチャがさらに複雑になるだけで十分です。

そして、これらすべての結果として、NVIDIAユーザーコミュニティは成長を続けています。 GPUクラスターの構築を考えている3つまたは4つのグループのうち、AMDカードを真剣に検討しているグループはありません。そしてそれは、NVIDIA側でさらに多くのグループが論文を書いたり、コードを寄稿したりすることを意味します。

私はNVIDIAシリングではありません。この方法ではなく、GPGPUプラットフォームが2つ(またはそれ以上)等しく魅力的であることを願っています。競争はいいです。 AMDはすぐにゲームをステップアップするかもしれません-そして、今後の融合製品は非常に魅力的に見えます。しかし、今日どのカードを買うべきか、そして今どこで時間を費やすべきかについて誰かにアドバイスする際に、私は両方の開発環境が同様に良いと言って良心的ではありません。

編集して追加:上記は元の質問に答えるという点では少し楕円形だと思うので、もう少し明確にしましょう。ハードウェアから得られるパフォーマンスは、無限の時間を利用できる理想的な世界では、基礎となるハードウェアとプログラミング言語の機能にのみ依存します。しかし実際には、一定の投資時間で得られるパフォーマンスの量は、開発ツール、既存のコミュニティコードベース(公開ライブラリなど)にも大きく依存しています。これらの考慮事項はすべて、NVIDIAを強く示しています。

(編集者:この段落の情報はもはや正確ではありません。)ハードウェアに関しては、AMDカードのSIMDユニット内でのベクトル化の要件により、NVIDIAハードウェアよりも紙の性能を達成することがさらに難しくなります。

59
Jonathan Dursi

AMDとNVIDIAのアーキテクチャの主な違いは、AMDはアルゴリズムの動作をコンパイル時に決定できる問題に対して最適化され、NVIDIAはアルゴリズムの動作が実行時にのみ決定できる問題に対して最適化されることです。

AMDのアーキテクチャは比較的単純で、ALUにより多くのトランジスタを使用できます。問題がコンパイル時に完全に定義され、ある程度静的または線形の方法でアーキテクチャに正常にマッピングされる限り、AMDはNVIDIAよりも高速にアルゴリズムを実行できる可能性が高くなります。

一方、NVIDIAのコンパイラは、コンパイル時の分析が少なくなっています。代わりに、NVIDIAには、実行時にのみ出現するアルゴリズムの動的な動作を処理できるロジックにより多くのトランジスタを費やした、より高度なアーキテクチャがあります。

GPUを使用するほとんどのスーパーコンピューターがNVIDIAに対応しているという事実は、科学者が計算の実行に関心を持っているタイプの問題であり、一般にAMDよりもNVIDIAのアーキテクチャにより適していると考えています。

17
Roger Dahl

OpenCLで反復コーディングを行いました。 NVIDIAとATIで実行した結果は、ほぼ同じです。同じ値($)カードで同じ速度に近い。

どちらの場合も、速度はCPUと比較して約10倍から30倍でした。

CUDAをテストしませんでしたが、ランダムメモリフェッチの問題を魔法のように解決できるとは思いません。最近では、CUDAとOpenCLはほぼ同じであり、CUDAよりもOpenCLの方が将来を見込んでいます。主な理由は、Intelがプロセッサ用のOpenCLでドライバーを起動していることです。これは将来的に大きな進歩となるでしょう(CPUでOpenCLの16、32または64スレッドを実行することは本当に高速で、GPUへの移植が非常に簡単です)。

7
DarkZeros

FermiとKepler向けのCUDAを数年間使った後、GCNカード用のOpenCLで時間を費やしましたが、プログラミング言語としてCUDAを好み、オプションがあればCUDAを備えたAMDハードウェアを選択します。

NVIDIAとAMD(OpenCL)の主な違い:

AMDの場合:

  • Maxwellを使用しても、NVidiaのコマンドレイテンシは長くなり、AMDでは複雑なアルゴリズムが10倍高速になります(同じ理論上のTflopsを想定)。 Kepler VS GCNのギャップは最大60%でした。この意味で、NVidia用に複雑なカーネルを最適化することは困難です。

  • 安いカード。

  • OpenCLは、他のベンダーが利用できるオープンスタンダードです。

Nvidiaの場合:

  • 信頼性の高いサーバー負荷に適したハードウェアのテスラ製品ラインを備えています。

  • 新しいMaxwellは、はるかに電力効率が高くなっています。

  • コンパイラーとツールはより高度です。 AMDはまだmaxregcoutパラメーターを実装できません。そのため、さまざまなハードウェアの占有を簡単に制御できます。また、コンパイラーは、バージョンごとに変化する最適なコードについてのランダムなアイデアをたくさん持っています。突然40%遅くなったため、半年ごとに古いコードを再訪すること。

この時点でGPGPUが目標の場合、AMDを使用したopencLはサーバーファームの準備ができておらず、コンパイラが常に「ベータ版」であるように見えるため、AMDの効率的なコードを書くことが非常に難しいため、CUDAが唯一の選択肢です。

7

私はGPGPUは初めてですが、科学計算(物理学の博士号)の経験があります。私は研究チームを結成しており、計算にGPGPUを使用したいと考えています。利用可能なプラットフォームから選択する必要がありました。いくつかの理由でNvidiaに決めました。ATIの方が紙上では速いかもしれませんが、Nvidiaはより成熟したプラットフォームとより多くのドキュメントを持っているため、このプラットフォームのピークパフォーマンスに近づけることができます。

Nvidiaには学術研究サポートプログラムもあり、サポートを申し込むことができます。TESLA2075カードを受け取りました。 ATIまたはIntelがこの方法で研究をサポートしているかどうかはわかりません。

OpenCLについて聞いたことは、すべてを一度にしようとしているということです。OpenCLコードはより移植性が高いことは確かですが、どちらのプラットフォームの全機能も活用しない可能性があります。私はむしろもう少し学び、リソースをより活用するプログラムを書きたいです。今年登場したばかりのTESLA K10では、Nvidiaは4.5 TeraFlopsの範囲にあるため、Nvidiaが遅れていることは明らかではありません...マザーボード。しかし今のところ、私はNvidiaを選びました。

6
Andras

OpenCL浮動小数点パフォーマンスの評価における私の経験は、NVIDIAカードを好む傾向があります。 8600M GTからGTX 460までの範囲のNVIDIAカードで、2つの浮動小数点ベンチマークを使用しました。NVIDIAカードは、これらのベンチマークで理論的なシングルプレシチノピークの約半分を一貫して達成します。
私が使用したATIカードは、単精度ピークの3分の1を超えることはめったにありません。 ATIでの私の経験は歪んでいることに注意してください。 5000シリーズのカードを1枚しか使用できませんでした。私の経験は主にHD 4000シリーズカードであり、十分にサポートされていませんでした。 HD 5000シリーズカードのサポートははるかに優れています。

5
virtuallinux

私は議論に追加したいと思います。ソフトウェアのビジネスでは、生の単精度パフォーマンスを生産性に妥協することができますが、すでに指摘したように、OpenCLを使用してATIのハードウェアで達成できるほどのパフォーマンスを達成できないため、妥協する必要はありませんNVIDIAのハードウェア上のCUDAで記述する場合。

そして、はい、CUDA用のx86コンパイラーのPGIの発表では、OpenCLで書くのにより多くの時間とリソースを費やす正当な理由はありません:)

追伸:私たちはほとんどすべてのGPGPU作業をCUDAで行っているため、私の議論は偏っているかもしれません。 CUDAのコアIP/CV機能の一部を高速化する画像処理/コンピュータービジョンライブラリCUVI(ビジョンおよびイメージング用CUDA)があります。

1
Salman Ul Haq

Cudaは、OpenCLより3〜4年前にリリースされたため、今日のOpenCLよりも確かに人気があります。 OpenCLがリリースされて以来、NvidiaはCUDAに集中しているため、この言語にはあまり貢献していません。ドライバー用のopenCL 1.2バージョンもリリースしていません。

ヘテロジニアスコンピューティングおよびハンドヘルドデバイスに関する限り、OpenClは近い将来確実に人気を獲得するでしょう。現在、OpenCLへの最大の貢献者はAMDであり、それは彼らのサイトで見ることができます。

0
shunya