7

ubuntu で CUDA nsight プロファイラーを使用して、GPU で高速化されたアプリケーションのメモリ帯域幅使用率とコンピューティング スループット使用率の 2 つの全体的な測定値を確立しようとしています。アプリケーションは、Tesla K20c GPU で実行されます。

私が必要とする 2 つの測定値は、このグラフに示されている測定値にある程度匹敵します。 図 1

問題は、ここに正確な数値が示されていないことと、さらに重要なことに、これらのパーセンテージがどのように計算されているかがわからないことです.

メモリ帯域幅使用率

プロファイラーは、GPU の最大グローバル メモリ帯域幅が 208 GB/s であることを示しています。

ここに画像の説明を入力

これは、デバイス メモリ帯域幅またはグローバル メモリ帯域幅を指しますか? グローバルと書かれていますが、最初のものの方が私には理にかなっています。

私のカーネルでは、プロファイラーはデバイスのメモリ帯域幅が 98.069 GB/s であることを教えてくれます。

ここに画像の説明を入力

最大 208 GB/秒がデバイス メモリを参照すると仮定すると、単純にメモリ帯域幅使用率を 90.069/208 = 43% として計算できますか? このカーネルは、追加の CPU-GPU データ転送なしで複数回実行されることに注意してください。したがって、システム BW は重要ではありません。

コンピューティング スループット使用率

コンピューティング スループット使用率を数値化する最善の方法が何であるかは正確にはわかりません。私の最善の推測は、サイクルあたりの命令数を使用して、サイクルあたりの命令数を最大にすることです。プロファイラーは、最大 IPC が 7 であることを教えてくれます (上の図を参照)。

まず、それは実際にはどういう意味ですか?各マルチプロセッサには 192 個のコアがあるため、最大 6 つのアクティブなワープがあります。最大 IPC を 6 にする必要があるということでしょうか?

プロファイラーは、カーネルが IPC = 1.144 を発行し、IPC = 0.907 を実行したことを示しています。コンピューティング使用率を 1.144/7 = 16% または 0.907/7 = 13% として計算する必要がありますか? またはこれらのいずれでもないのですか?

これら 2 つの測定値 (メモリとコンピューティングの使用率) は、カーネルがリソースをどれだけ効率的に使用しているかについて適切な第一印象を与えていますか? それとも、他に含めるべき重要な指標はありますか?

追加グラフ

ここに画像の説明を入力

4

1 に答える 1

3

注:今後、追加の詳細についてこの回答を更新しようとします。Visual Profiler のレポートでは、計算のすべての個々のコンポーネントを簡単に確認できるとは思いません。

コンピューティング使用率

これは、論理パイプ (メモリ、制御フロー、演算) のパイプライン使用率です。SM には、文書化されていない多数の実行パイプがあります。命令スループットのグラフを見ると、使用率の計算方法を大まかに判断できます。パイプラインの詳細については、kepler または maxwell アーキテクチャ ドキュメントを参照してください。CUDA コアは、整数/単精度浮動小数点演算パイプラインのマーケティング用語です。

この計算は IPC に基づいていません。これは、パイプラインの使用率と発行サイクルに基づいています。たとえば、1 サイクルあたり 1 命令を発行すると (決してデュアル発行ではない)、100% の使用率になる可能性があります。倍精度命令を最大レートで発行すると、100% になることもあります (GPU によって異なります)。

メモリ帯域幅の使用率

プロファイラーは、L1、TEX、L2、およびデバイス メモリの使用率を計算します。最高値が表示されます。データ パスの使用率が非常に高くても、帯域幅の使用率が非常に低い可能性が非常に高くなります。

メモリ レイテンシの境界理由も計算する必要があります。プログラムがメモリ レイテンシに制約されても、計算使用率やメモリ帯域幅に制約されないようにすることは非常に簡単です。

于 2015-01-25T21:06:09.957 に答える