CPUのパフォーマンスと比較して、CUDAまたはOpenCLがどれだけ速くベンチマークできますか?

StackOverflow https://stackoverflow.com/questions/4268181

質問

一般的なシングルプロセッサコアと比較して、CUDAまたはOpenCLコードのアルゴリズムはどれくらい速くできますか? (アルゴリズムが書かれていることを考慮して、CPUターゲットとGPUターゲットの両方に対して最適化されています)。

グラフィックカードとCPUの両方に依存していることは知っていますが、Nvidiaの最も速いGPUの1つと(Aの単一コア)Intel I7プロセッサの1つですか?

そして、私はそれがアルゴリズムのタイプにも依存していることを知っています。

厳密な答えは必要ありませんが、次のような例を経験しました。 画像操作アルゴリズムの場合、二重精度のフローティングポイントとピクセルあたり10操作を使用して、最初の5分かかり、このハードウェアを使用してx秒で実行されます。

役に立ちましたか?

解決

あなたの質問は非常に広く、答えるのは非常に困難です。さらに、アルゴリズムのごくわずかな割合(多くの共有状態なしで対処するもの)のみがGPUで追跡可能です。

しかし、私はあなたに請求について批判的であることを促したいと思っています。私はImageProcessingを使用しており、主題に関する多くの記事を読んでいますが、GPUの場合、GPUに入力データをアップロードし、結果をメインメモリにダウンロードする時間は、 いいえ 因子の計算に含まれています。

これが重要ではないケースはいくつかありますが(両方とも小さく、結果がサイズの結果をさらに削減する第2段階の計算があります)、通常、結果と初期データを転送する必要があります。

アップロード/ダウンロード時間のみがメインのCPUが計算を行う必要があるよりも長かったため、これが主張されたプラスをネガティブに変えるのを見てきました。

異なるGPUカードの結果を組み合わせることには、ほぼ同じことが当てはまります。

アップデート 新しいGPUは、Ping-Pongバッファーを使用して同時にアップロード/ダウンロードと計算できるようです。しかし、国境条件を完全に確認することをアドバイスしています。そこにはたくさんのスピンアウトがあります。

他のヒント

あなたの質問は一般的に、答えるのが難しいです。正確または公正な答えを与えるのを難しくする多くの異なる変数があります。

特に、あなたは両方を比較しています

たとえば、GPU対CPUでは異なるアルゴリズムが望ましい場合があることに注意してください。また、GPUとの間のデータ転送も、タイミングで説明する必要があります。

AMDには、CPUおよびGPUで実行されるOPENCLコードのOPENCLパフォーマンスのケーススタディ(実際にはいくつか)があります。 ここ スパースマトリックスベクトルの増殖のパフォーマンス結果があるものです。

私はこれだと思います ビデオ紹介 OpenCLは、最初または2番目のエピソードであなたの質問に良い答えを与えます(覚えていません)。最初のエピソードの終わりだったと思います...

一般に、それは問題をどれだけうまく並べることができるかに依存します。問題のサイズ自体も要因です。これは、データをグラフィックカードにコピーする時間がかかるためです。

これは、アルゴリズムと実装の効率がどれほど効率的かに大きく依存します。

全体として、GPUはCPUよりも計算が優れていると言うのは公平です。したがって、上限は、トップエンドGPUの理論的GFLOPS評価をトップエンドCPUで分割することです。理論メモリ帯域幅について同様の計算を行うことができます。

たとえば、GTX580の1581.1 GFLOPS対I7 980XE用の107.55 GFLOPS。 GTX580の評価は単一の精度であることに注意してください。 Fermiクラスの非テスラの場合、それを4倍に削減する必要があると思います。したがって、この例では、約4倍が期待されるかもしれません。

なぜあなたがより良いことをするかもしれない理由について警告します(または、はるかに大きなスピードアップを主張する結果を見る):

  1. GPUは、データがカード上にあると、CPUよりもメモリ帯域幅が優れています。時には、メモリバインドアルゴリズムがGPUでうまく機能する場合があります。

  2. キャッシュ(テクスチャメモリなど)の巧妙な使用により、広告された帯域幅よりも優れたことができます。

  3. マルコが言うように、転送時間は含まれませんでした。私は個人的に私の仕事にそのような時間を常に含めているので、すべてのデータがGPUに適合する反復アルゴリズムにあることがわかった最大のスピードアップがあります(私はここでミッドレンジCPUからミッドレンジGPUで300倍以上になりました。 )。

  4. リンゴとオレンジの比較。トップエンドGPUとローエンドCPUの比較は本質的に不公平です。反論は、ハイエンドのCPUのコストがハイエンドGPUよりもはるかに高いということです。 GFLOPS/$またはGFLOPS/WATTの比較に行くと、GPUにとってはるかに好ましいように見えます。

2倍から400倍の範囲の数字を見てきました。また、中距離GPUは二重精度計算で高レンジCPUと競合できないことも知っています。8コアXeonのMKLは、300ドルのGPUでCulaまたはCublasよりも速くなります。

openclは、cudaよりも逸話的にはるかに遅いです。

Oak Ridge National LabとGeorgia TechのShoc(Scalable Heterogenous Computing)と呼ばれる新しいベンチマークスイートには、多くの重要なカーネルのOpenCLとCUDAの両方の実装があります。からスイートをダウンロードできます http://bit.ly/shocmarx. 。楽しみ。

__kernel void vecAdd(__global float* results )
{
   int id = get_global_id(0);
}

このカーネルコードは、10ミリ秒で新しい60 $ R7-240 GPUに16mのスレッドを生成できます。

これは、10ナノ秒単位で16個のスレッド作成またはコンテキストスイッチに相当します。 140 $ FX-8150 8コアCPUタイミングとは何ですか?コアあたり50ナノ秒の1つのスレッドです。

このカーネルに追加されたすべての命令は、分岐するまでGPUの勝利です。

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