1

私のさまざまなカーネルは、いくつかの定数データを使用します。コードを最適化するために、定数メモリの代わりにテクスチャ メモリを使用することを検討していました。これは、各スレッドが異なるデータをロードするためです (ただし、すべてのブロックで同じです)。

各スレッドのデータには、float ( M )、サイズ 3 の float のベクトル ( K )、または float の 3 行 3 列の行列 ( J ) のいずれかが含まれます。

少なくとも 2 つの選択肢があります。

  • Mを 1D 配列に、Kを 2D 配列に、Jを 3D 配列に格納します。
  • MK、およびJをいくつかのマッピングを使用して線形メモリに格納します。

スレッド数が非常に少ない (N = 32) ため、どのソリューションが最適でしょうか? それは同等ですか、それともandtex1Dfetchよりも高速ですか? CUDA 配列によってもたらされる機能 (ハードウェア補間など) は必要ありません。メモリの制限は明らかに問題ではありません。tex2Dtex3D

4

1 に答える 1

1

のアクセス パターンMは完全に結合されているため、2.x を超えるコンピューティング機能デバイスのキャッシュ階層を利用したグローバル メモリは、そのアレイに最適なパフォーマンスを提供します。

K と J で同じアクセス パターンがあるため、アクセスも結合されます。したがって、グローバル メモリを使用せずに最高のパフォーマンスを得る理由はありません。

メモリの制限は明らかに問題ではないとコメントしたように、配列のサイズが小さくなることを理解しているので、キャッシュ階層の良好な動作が期待できます。

一歩前進したい場合は、K配列を 1D テクスチャ メモリにコピーして、両方のアプローチのパフォーマンスを比較できます。

于 2012-12-13T17:53:04.250 に答える