質問

両方をコーディングした経験を持つ人々から聞きたいです。私自身、私はNvidiaの経験しかありません。

Nvidia Cudaは、競争よりもはるかに人気があるようです。 (このフォーラムで質問タグをカウントするだけで、「cuda」は「opencl '3:1」を上回り、「nvidia」は「ATI」15:1を上回り、「ati-stream」のタグはまったくありません)。

一方、Wikipediaによると、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の実行ユニットがあります。

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

役に立ちましたか?

解決

比phor的に言えば、ATIはNvidiaと比較して優れたエンジンを持っています。しかし、Nvidiaにはより良い車があります:d

これは主に、Nvidiaが科学的コンピューティング(BLA、FFT)に必要な重要なライブラリを開発するためにかなりの量のリソース(お金と人々)を投資したためです。これが、CUDAがATI(またはOpenCL)と比較してここでタグを支配する理由かもしれません

一般的なGPGPUタスクで実現されている利点については、メモリ転送帯域幅、優れたコンパイラ、おそらくドライバーなど、他の問題(アプリケーションに応じて)に応じて最終的になります。 Nvidiaは、より成熟したコンパイラ、Linuxのより安定したドライバー(Linux(科学的コンピューティングで使用されているため、Linux)がCudaを支持してバランスを傾けます(少なくとも今のところ)。


編集 2013年1月12日

私がこの投稿を作成してから2年が経ちましたが、それでも時々見解を引き付けるようです。それで、私はいくつかのことを明確にすることにしました

  • AMDはゲームを強化しました。現在、BLAとFFTライブラリの両方があります。 OpenCLを中心に多数のサードパーティライブラリも発生しています。
  • Intelは、OpenMPとOpenCLの両方をサポートする野生にXeon Phiを導入しました。また、既存のX86コードを使用する機能もあります。 コメントに記載されているように、今のところSSEなしで限られたX86
  • NvidiaとCudaは、利用可能なライブラリの範囲にまだ優位性があります。しかし、彼らは以前ほどopenclに焦点を合わせていないかもしれません。

要するに、OpenCLは過去2年間でギャップを埋めました。フィールドには新しいプレイヤーがいます。しかし、Cudaはまだパックよりも少し先です。

他のヒント

Cuda vs. Openclについて強い感情はありません。おそらく、OpenCLは長期的な未来であり、オープンな基準であるということだけです。

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

この違いの大きな部分は、利用可能なオンライン情報の量です。 Nvidiaをご覧ください CUDAゾーン 対AMDの GPGPU開発者セントラル. 。開発者が起動するためのものの量は、比較に近づくことさえありません。 Nvidiasサイトには、おそらくあなたのような問題に取り組んでいる人々から、たくさんの論文と貢献したコードを見つけるでしょう。 Nvidiaなどのオンラインクラスや、開発者のベストプラクティスガイドなどの非常に有用なドキュメントなど、たくさんのオンラインクラスがあります。無料のデベルツール(プロファイラー、Cuda -GDBなど)の可用性は、圧倒的にNvidiasの方法を傾けます。

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

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

私はnvidiaシルではありません。私はそれがこのようではなく、2つの(またはそれ以上!)同様に説得力のあるGPGPUプラットフォームがあったことを願っています。競争は良いです。たぶん、AMDはすぐにゲームを強化するでしょう - そして、今後のFusion製品は非常に説得力があります。しかし、今日どのカードを購入するか、そして今どこに時間を費やすかについて誰かにアドバイスをすることで、私は両方の開発環境も同様に良いと良心的に言うことはできません。

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

(編集者:この段落の情報はもはや正確ではありません。)ハードウェアの観点から、AMDカードのSIMDユニット内のベクトル化の要件により、NVIDIAハードウェアよりも紙のパフォーマンスがさらに難しくなります。

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

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

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

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

OpenCLでいくつかの反復コーディングをしました。そして、それをNvidiaとATIで実行した結果は、ほとんど同じです。同じ値($)カードで同じ速度に近い。

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

CUDAをテストしませんでしたが、ランダムメモリフェッチの問題を魔法のように解決できるとは思いません。今日、CudaとOpenclはほぼ同じであり、CudaよりもOpenclの将来が多いと思います。主な理由は、IntelがプロセッサのOpenCLを備えたドライバーを立ち上げていることです。これは将来的には大きな進歩になります(CPUでOpenCLの16、32、または64スレッドを実行するのは非常に高速で、GPUに移植するのは非常に簡単です)。

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 パラメーターを使用するため、さまざまなハードウェアの占有率を簡単に制御できます。コンパイラには、すべてのバージョンで変更される最適なコードが何であるかについて多くのランダムなアイデアがあります。もっとゆっくり。

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

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

Nvidiaには、アカデミックリサーチサポートプログラムもあり、サポートを申請できます。テスラ2075カードを受け取りました。 ATIまたはIntelがこのように研究をサポートしているかどうかはわかりません。

OpenCLについて私が聞いたことは、それが一度にすべてになろうとしているということです。あなたのOpenCLコードがよりポータブルになることは事実ですが、どちらのプラットフォームの完全な機能を活用しない可能性もあります。もう少し学び、リソースをより良く利用するプログラムを作成したいと思います。今年発売されたばかりのテスラK10を使用すると、Nvidiaは4.5 Teraflopsの範囲にありますので、Nvidiaが遅れていることは明らかではありません...しかし、Intel Micsは、特にGPGPUユニットをに移動することに成功した場合、実際の競合他社であることが証明される可能性があります。マザーボード。しかし今のところ、私はnvidiaを選びました。

OpenCLの浮動点パフォーマンスを評価した私の経験は、Nvidiaカードを好む傾向があります。 8600m GTからGTX 460に至るまで、NVIDIAカードのフローティングポイントベンチマークをいくつか操作しました。NVIDIAカードは、これらのベンチマークで理論的なシングルプレシーノピークの約半分を一貫して達成しています。
私が働いてきたATIカードは、シングルサイジョンピークの3分の1以上を達成することはめったにありません。 ATIでの私の経験は歪んでいることに注意してください。 5000シリーズカードを1枚しか作業できませんでした。私の経験は、主にHD 4000シリーズカードであり、これは十分にサポートされていませんでした。 HD 5000シリーズカードのサポートははるかに優れています。

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

そして、はい、PGIがCUDA向けのX86コンパイラを発表したことで、OpenCLでより多くの時間とリソースを書くのに多くの時間を費やす理由はありません:)

PS:CUDAに関するほとんどすべてのGPGPU作業を行っているので、私の議論は偏っているかもしれません。 CUDAのコアIP/CV機能を加速する画像処理/コンピュータービジョンライブラリCuvi(ビジョンとイメージングのCUDA)があります。

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

関係するように、不均一なコンピューティングと手持ちのデバイスに関しては、OPENCLは近い将来に確実に人気を獲得するでしょう。現在のところ、OpenCLの最大の貢献者はAMDであり、彼らのサイトで見えるものです。

私の経験で:

  • 最高の絶対パフォーマンスが必要な場合は、最新のハードウェアイテレーションに誰がいるかを確認し、スタック(最新 /ベータリリースを含む)を使用する必要があります。

  • お金に最適なパフォーマンスが必要な場合は、「プロフェッショナル」カードではなくゲーマーカードを目指し、さまざまなプラットフォームをターゲットにする柔軟性はOpenCLを支持します。

  • 特に始めている場合、CUDAはより洗練されており、より多くのツールとライブラリを持っている傾向があります。

最後に、私の個人的なテイクは、Nvidiaからの「サポート」をぞっとさせた後(私たちは死んだテスラを手に入れましたが、クライアントが待っている間、それは数ヶ月間変更されませんでした):OpenCLで船をジャンプする柔軟性は、パフォーマンスがわずかに低いリスクの価値がありますNvidiaがリリースサイクルで先を行っているとき。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top