1

Nicholas Wilt によるThe CUDA Handbookのコピーを調べているときに、明らかに 1 バイトと 2 バイトのメモリ トランザクションが結合されていないことに気付きました。ただし、Fermi および Kepler (SM2+) アーキテクチャは、メモリを満たすために必要な数のキャッシュ ラインをフェッチすると理解していました。私には、それは合体のように聞こえます。

私のアプリケーションは、スペースを節約するために、1 バイトと 2 バイトのデータ フィールド (大きな 2D ピッチ線形配列) を多用し、グローバル メモリを大量に消費していました。

先に進み、アプリケーションを変更して、符号なし整数と 4 つの符号なし文字を結合し、結合をフェッチするだけで、スレッドが一度に 4 つのエントリをフェッチするようにしました。

私のテスト データで実行したところ、Kepler ラップトップ カード (750M、SM3.5) で ~32%、Tesla C2075 (SM2.0) で ~45% の改善が見られました。

この改善の可能性が高い理由は何ですか?? スレッドごとの作業が増えた、全体的なメモリ フェッチ リクエストが減った、または結合が小さなデータ型に対してどのように機能するかについての私の理解が間違っていたのでしょうか?

4

1 に答える 1