9

私は C++ AMP を学び始めたばかりで、VS 2012 RC でビルドしたサンプルをいくつか入手しましたが、GPU のパフォーマンスが CPU よりも遅いことがわかりました。たとえば、Kate Gregory による例: http://ampbook.codeplex.com/releases/view/90595 (彼女の今後の書籍http://www.gregcons.com/cppamp/に関連するもの))。それらは、私が見た講義で彼女によって実演され、そこで彼女はラップトップの GPU (彼女は 6650 だと言ったと思います) を CPU (彼女が持っていた CPU は不明) と比較して、第 4 章の例で約 5 倍のパフォーマンス向上を得ました。この例を自分でテストしてみましたが、いくつかのシステム構成 (以下を参照) で、常に CPU の方が高速であることがわかりました。他の例もテストしましたが、同じことがわかりました。私は何か間違ったことをしていますか?パフォーマンスが予想よりも遅い理由はありますか? GPUが高速であることを確実に示す例はありますか?

  • システム 1: オンボード グラフィックスを搭載した Intel i7 2600K (これは遅くなると思います)
  • システム 2: AMD 6770 と切り替え可能な Intel HD を搭載した Intel i7 2630QM (パフォーマンス モードで実行しているので、6770 を使用する必要があります)
  • システム 3: Intel i5 750 と 2xCrossfire AMD HD 5850

結果の例: chapter4 プロジェクトは、1.15 ミリ秒の CPU、2.57 ミリ秒の GPU、2.55 ミリ秒の GPU を並べて表示します。

編集

ああ、私はその理由を見つけたと思います-彼女が講義で使用した行列のサイズの値が異なっていました. Web サイトのサンプルでは、​​M=N=W=64 を使用しています。彼女が講義で行ったように 64、512、および 256 を使用すると、対応する最大 5 倍のパフォーマンス向上が得られます。

4

1 に答える 1

7

あなたの包括的な質問のように思えますが、GPU に移行しても必ずしもメリットが得られるとは限らないのはなぜですか。答えはコピー時間です。n の 2 乗に比例する時間がかかる計算を想像してみてください。コピーには n に比例する時間がかかります。GPU との間のコピーに時間を費やす前に、かなり大きな n が必要になる可能性があります。

この本では、最初の章でこれについて簡単に言及しており、第 7 章と第 8 章ではすべてパフォーマンスと最適化について説明しています。第7章はラフカットです。第8章はまもなくそこにあるはずです。(そのコードは Codeplex に既にあります - リダクションのケーススタディです。)

以前の番号の代わりに Tech Ed の開始番号を使用する第 4 章コードの更新をチェックインしました。行列が小さいと、GPU との間のコピーに時間がかかりすぎます。より大きなものは、良いデモになるには時間がかかりすぎます。ただし、サイズを自由にいじってください。1、2 分の「デッド エアー」を気にしないので、それらをさらに大きくして、何が起こるかを確認します。

于 2012-08-07T11:34:46.333 に答える