CUDA の最適化について学んでいます。このリンクでプレゼンテーションを見つけました: Paulius Micikevicius による CUDAの最適化。
このプレゼンテーションでは、
グローバルメモリ帯域幅を最大化
、彼らは、グローバルメモリの合体が帯域幅を改善すると言います。
私の質問は、グローバル メモリ帯域幅をどのように計算しますか。誰でも簡単なプログラムの例で説明できますか?
CUDA の最適化について学んでいます。このリンクでプレゼンテーションを見つけました: Paulius Micikevicius による CUDAの最適化。
このプレゼンテーションでは、
グローバルメモリ帯域幅を最大化
、彼らは、グローバルメモリの合体が帯域幅を改善すると言います。
私の質問は、グローバル メモリ帯域幅をどのように計算しますか。誰でも簡単なプログラムの例で説明できますか?
理論上の帯域幅は、ハードウェア仕様を使用して計算できます。
たとえば、NVIDIA GeForce GTX 280 は、1,107 MHz のメモリ クロック レートと 512 ビット幅のメモリ インターフェイスで DDR RAM を使用します。これらのデータ項目を使用すると、NVIDIA GeForce GTX 280 の理論上のピーク メモリ帯域幅は 141.6 GB/秒です。
この計算では、メモリ クロック レートが Hz に変換され、インターフェイス幅 (ビットをバイトに変換するために 8 で除算) を乗算し、ダブル データ レートのために 2 を乗算します。最後に、この積を 109 で割り、結果を GB/秒 (GBps) に変換します。
有効な帯域幅は、特定のプログラム アクティビティのタイミングを計り、プログラムがデータにアクセスする方法を知ることによって計算されます。これを行うには、次の式を使用します。
実効帯域幅 = (( Br + Bw ) / 109 ) / 時間
ここで、実効帯域幅の単位は GBps、Br はカーネルごとの読み取りバイト数、Bw はカーネルごとの書き込みバイト数、時間は秒単位です。
詳細については、CUDA ベスト プラクティス ガイドを参照してください。