1

CUDA カーネルがメモリ帯域幅の使用率に関してどの程度優れているかを知りたいです。ECCをオンにしたTesla K40cでそれらを実行します。ユーティリティによって得られた結果はbandwidthTest、達成可能なピークの適切な近似値ですか? そうでなければ、ピーク帯域幅を見つけるために同様のテストを作成するにはどうすればよいでしょうか?

デバイスのメモリ帯域幅を意味します。

4

1 に答える 1

1

帯域幅テストのソース コードは CUDA SDK に含まれているため、直接確認できます。bandwidthTest の例では、デバイスとホスト、ホストとデバイス、およびデバイスとデバイス (カード上のメモリを転送する) の間の転送時間のテストを実行します。

これはメモリ転送の実際の実行ですが、いくつかの利点があります。

  1. 中規模から大規模のメモリ転送。大量の小さな転送を行う場合、オーバーヘッドに高いペナルティを支払うことになり、転送速度が低下します。
  2. ピン留めされたメモリ。bandwidthTest は、転送が可能な限り高速になるように固定メモリを使用します。このオプションがある場合とない場合があります。
  3. メモリの持続的な読み取り/書き込み。思い出したように、bandwidthTest はキューに入れることができる多数の転送を行います。起動の遅延や異常は平滑化され、多数の転送がキューにまとめられるという利点があります。transfer-work-work-transfer を行う必要がある場合があるため、追加の遅延が発生する可能性があります。CUDA 5 からのメモリ転送の改善は、これを軽減するのに役立つ場合があります。

メモリ転送の実行中にカーネルで実際の作業を行うと、パフォーマンスが低下する可能性があります。ただし、帯域幅テスト コードを参照して、転送を改善するためのガイドとして使用できます。固定メモリ、非同期転送、またはデータの明示的な転送を必要としない新しい共有メモリ メソッドを検討してください。また、bandwidthTest はメモリ上のバルク転送のみをカウントしており、共有メモリなどを実際に測定しているわけではないことに注意してください。

最終的なパフォーマンスは、カーネルと、実行しているメモリ転送の数とサイズに大きく依存します。

于 2014-06-05T16:12:29.857 に答える