0

私はいくつかの CUDA プログラム (2D および 3D 格子ボルツマン ソルバー) のベンチマークを行っており、何か変わったことに遭遇しました。時間の経過とともに、ソルバーのパフォーマンスがランダムに変動することが予想されますが、問題のサイズ、ブロック サイズ、OS および GPU がさまざまに異なるためです (2D コードと 3D コードは完全に分離されており、異なる構成ではないことは言うまでもありません)。同じプログラム) カーネルの実行時間に非常に明確な正弦波の変動が見られます。私がテストした 2 つの GPU (K5000m と K20c) では、変動は 10 ~ 12Hz の範囲の周波数を持っているようです。

これについて既知の説明はありますか?私の頼りになるアイデアは熱/電力管理ですが、それを証明することはできませんでした. 他の誰かがこれを経験しましたか?

詳細情報と例

小さなサンプル コードの MSVC2010 プロジェクトは、https: //docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxtYXJram1hd3NvbnxneDplOWMwNWNhNDA4MmMwMjg にあります。プロジェクトを手動で行うのは簡単です。コードはかなり自明であり、単純なカーネル (複数の配列から読み取り、複数の配列に書き込むカーネルがデフォルトで実行されます) の 100 回の反復が計測され、その結果がファイルに出力されます。実行時間の FFT を実行すると、K5000m で 11Hz 付近に目に見えるピークが得られます。画像を投稿しますが、評判がありません。

4

1 に答える 1

1

特に WDDM モードで GPU を実行している場合、Windows は GPU カーネル実行の詳細なタイミングに影響を与えます。X が GPU で実行されていない Linux 環境で、観測と FFT を再実行してください。これにより、最も一貫した動作が得られます。WDDM セットアップの CUDA ドライバーは、ある程度、Windows オペレーティング システムの影響を受けます。

SM35 デバイス、CentOS 5.5、CUDA 5.5 でコードを実行したところ、次の Times.dat 出力が得られました。

0.007648 0.0024 0.001888 0.001888 0.001888 0.001888 0.001888 0.00192 0.001888 0.001888 0.00192 0.00192 0.001856 0.00192 0.001888 0.00192 0.001888 0.001888 0.001888 0.001888 0.00192 0.001888 0.001888 0.001888 0.001856 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.002016 0.001888 0.001888 0.00192 0.001952 0.001888 0.001888 0.001888 0.001888 0.00192 0.00192 0.001888 0.00192 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.00192 0.001888 0.001888 0.001856 0.001888 0.00192 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.003904 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.00192 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.00192 0.001888 0.001888 0.001888 0.001888 0.00192 0.001888 0.00192 0.001888 0.001888 0.001888 0.001888 0.001888 0.00192 0.001888 0.00192 0.001856 0.001888 0.001856 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001952 0.001888 0.001888 0.00192 0.00192 0.00192 0.001888 0.001888 0.001952 0.001888 0.00192 0.001888 0.001856 0.001888 0.00192 0.001888 0.001888 0.001888 0.00192 0.001856 0.001888 0.001888 0.001888 0.001888 0.00192 0.00192 0.001888 0.001888 0.00192 0.001888 0.001888 0.001888 0.001888 0.001888 0.00192 0.001888 0.00192 0.001888 0.001888 0.00192 0.001888 0.00192 0.001888 0.001888 0.001888 0.001888 0.001888 0.00192 0.004448 0.001888 0.001952 0.001888 0.001888 0.001888 0.001888 0.001888 0.001856 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.00192 0.001856 0.001888 0.001888 0.001888 0.001888 0.001856 0.001888 0.001888 0.001856 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888 0.001888

時折変動がありますが、変数がミリ秒単位cudaTimeで時間をキャプチャしていることを忘れないでください。したがって、上記のデータで見られる変動は、ほとんどの場合、実行ごとに 1 マイクロ秒未満の変動です。

最初の数値を除外すると、私が目にする最大の変動は、いくつかのケースでは約 2 ~ 3 マイクロ秒です。測定された実行時間が通常 2 マイクロ秒未満であることを考えると、これは大きな変動ですが、まだノイズの中にあり、報告している数十マイクロ秒のようなものではありません。

訓練を受けていない私の目には、データに正弦波パターンも見られませんが、そこに 11 Hz の周波数があると言われたら (これらのデータ ポイントにはタイムスタンプが付けられていないため、それが何を意味するのかさえわかりません)。 -- 私はあなたの言葉を信じます。

于 2013-08-21T00:53:06.440 に答える