1

ほとんどの論文は、CUDA カーネルのフロップ/Gflops と達成された帯域幅を示しています。次の質問に対するstackoverflowの回答も読みました。

CUDA のパフォーマンスを評価するには?

CUDA カーネルのプロファイリングと最適化の方法

カーネルの Gflops の計算方法

プログラムで FLOPS/GFLOPS をカウントする - CUDA

CUDA カーネルの達成帯域幅を計算する方法

ほとんどのことは問題ないように見えますが、それでもこれらの計算を快適に行うことはできません。誰でも単純な CUDA カーネルを作成できますか? 次に、deviceQuery の出力を示します。次に、フロップ/Gflops を段階的に計算し、このカーネルの帯域幅を達成します。次に、このカーネルの Visual Profiler の結果を表示します。つまり、この単純な CUDA カーネルについてステップバイステップで得られたすべての情報を含む詳細な結果を表示します。それは私たちのほとんどにとって本当に役に立ちます。ありがとう!

4

2 に答える 2

1

Nsight Visual Studio Edition 2.1 以降

要求された情報は、達成された FLOPS実験とメモリ統計 - バッファー実験を収集する場合に利用できます。

ビジュアル プロファイラー 4.2 以降

達成された帯域幅: タイムラインでカーネルの上にマウスを置くと、この情報が [プロパティ] ペインの[メモリ\DRAM 使用率] の下に表示されます。

プロファイラーはまだ FLOPS カウントを収集できません。これは、cuobjdump -sass を実行してアセンブリ コードを表示することで実行できます。カーネルをステップ実行し、単精度および倍精度の浮動小数点命令をカウントして、FMA および DFMA 演算を 2 で乗算します。各命令は、述語付きの真のスレッドでも乗算する必要があります。制御フローも考慮する必要があります。これは楽しいものではなく、命令セットに関する深い知識を持つ人が必要です。これは、デバッガーでアセンブリをシングル ステップ実行することにより、より適切に実行できる場合があります。カーネルの期間は、Visual Profiler の [プロパティ] ペインと [詳細] ペインでDurationとして利用できます。

于 2012-09-22T00:51:08.450 に答える
0

Optimizing Parallel Reductions in CUDAの Mark Harris の計算に従うことができます。そこで彼は、入力データをベースとして使用し、それをカーネル実行時間で分割します。例では 2^22 int を使用したため、入力データは 0,016777216 GB になります。最初のカーネルは 8,054 ミリ秒かかり、2,083 GB/秒の帯域幅を達成しました。

いくつかの最適化の後、彼は 62,671 GB/s に近づき、それを使用した GPU のピーク パフォーマンスである 86,4 GB/s と比較しました。

彼は int を使用しましたが、それをフロップ/Gflop に簡単に適応させることができます。

于 2013-01-28T10:08:37.397 に答える