5

CUDA プログラミング ガイドには、次のように記載されています。

「帯域幅は、パフォーマンスにとって最も重要なゲーティング要因の 1 つです。コードへのほとんどすべての変更は、帯域幅にどのように影響するかというコンテキストで行う必要があります。」

続いて、毎秒数百ギガバイトの理論上の帯域幅を計算します。グローバルメモリに読み書きできるバイト数が、カーネルがどれだけ最適化されているかを反映している理由について、私は途方に暮れています。

共有メモリやレジスタに格納されたデータに対して集中的な計算を行うカーネルを使用し、最初に 1 回の読み取りのみを行い、最後にグローバル メモリとの間で書き込みを行う場合、有効な帯域幅は確実に小さくなります。カーネル自体は非常に効率的かもしれません。

このコンテキストで帯域幅をさらに説明できる人はいますか?

ありがとう

4

3 に答える 3

1

ほとんどのカーネルはメモリ バウンドであるため、メモリ スループットを最大化することが重要です。幸運にもコンピューティング バウンド カーネルを使用できる場合は、一般に、コンピューティングの最適化がより簡単になります。発散に注意する必要がありますが、メモリのレイテンシを隠すのに十分なスレッドがあることを確認する必要があります。

実際のパフォーマンスと理論上のパフォーマンスを比較する方法に関するヒントなど、詳細についてはAdvanced CUDA Cプレゼンテーションをご覧ください。CUDA ベスト プラクティス ガイドにもいくつかの優れた情報があり、CUDA ツールキット ( NVIDIA サイトからダウンロード) の一部として入手できます。

于 2010-03-05T08:25:22.950 に答える
0

通常、カーネルはかなり小さく単純で、大量のデータに対して同じ操作を実行します。より複雑な操作 (処理パイプラインと考えてください) を実行するために、一連のカーネルを順番に呼び出す場合があります。明らかに、パイプラインのスループットは、カーネルの効率性と、何らかの方法でメモリ帯域幅によって制限されているかどうかの両方に依存します。

于 2010-03-04T17:52:06.970 に答える