Numba のドキュメントで参照されている、いわゆるコンスタント メモリのパフォーマンスについて明確にわかりません。
https://numba.pydata.org/numba-doc/dev/cuda/memory.html#constant-memory
このメモリのサイズ制限、他のメモリ タイプと比較した場合の高速/低速、およびそれを使用する際の落とし穴があるかどうかについて興味があります。
ありがとうございました!
Numba のドキュメントで参照されている、いわゆるコンスタント メモリのパフォーマンスについて明確にわかりません。
https://numba.pydata.org/numba-doc/dev/cuda/memory.html#constant-memory
このメモリのサイズ制限、他のメモリ タイプと比較した場合の高速/低速、およびそれを使用する際の落とし穴があるかどうかについて興味があります。
ありがとうございました!
これは、CUDA 対応デバイスの定数メモリに関する一般的な質問です。公式の CUDA プログラミング ガイドとここに記載されている情報を見つけることができます。
デバイスには合計 64 KB の定数メモリがあります。定数メモリ空間はキャッシュされます。その結果、定数メモリからの読み取りは、キャッシュ ミスの場合にのみ、デバイス メモリからの 1 つのメモリ読み取りにコストがかかります。それ以外の場合は、定数キャッシュからの読み取りが 1 回だけかかります。ワープ内のスレッドによる異なるアドレスへのアクセスはシリアル化されるため、コストはワープ内のすべてのスレッドによって読み取られる一意のアドレスの数に比例して増加します。そのため、一定のキャッシュは、同じワープ内のスレッドがいくつかの異なる場所にのみアクセスする場合に最適です。ワープのすべてのスレッドが同じ場所にアクセスする場合、定数メモリはレジスタ アクセスと同じくらい高速になります。
これが他のメモリタイプとどのように比較されるかについて、ここに私の短い答えがあります. 詳細については、次のページをお読みください。
レジスタ: スレッド プライベート オンチップ読み取り + 書き込みメモリ。GPU で最速のメモリ空間と見なすことができます。
ローカル メモリ: スレッド プライベート オフチップ読み取り + 書き込みメモリ。誤解を招く名前にもかかわらず、グローバル メモリと物理的に同じ場所にあります。したがって、その高いレイテンシ。
グローバル メモリ: レイテンシが高く、グローバルスコープを持つ最大のメモリであり、読み取りと書き込みのアクセス許可を持つオフチップでもあります。
コンスタント メモリ: ワープのすべてのスレッドが同じ場所にアクセスする場合、レジスタと同じ速さでスレッドがアクセスできる 64 KB に制限されたオフチップ キャッシュ読み取り専用メモリ。
共有メモリ: オンチップ、低レイテンシ、マルチプロセッサあたりの限られたスペースでの読み取り + 書き込み (デバイスの計算能力に応じて 48 KB から 164 KB)。
テクスチャ メモリ: ハードウェア フィルタリングなどの独自の機能をサポートする 2D 空間局所性用に最適化されたオンチップ キャッシュ読み取り専用メモリ。
固定 (ページロック) メモリ: 明示的なデバイス メモリではありません。CPU コードと GPU コードの両方から直接アクセスでき、CPU/GPU 間のデータ転送を最大化し、オーバーラップするために使用されます。
これらの記憶には、さまざまな範囲、寿命、用途があります。質問で言及した Numba ページでは基本について説明していますが、公式の CUDA プログラミング ガイドにはさらに多くの詳細があります。結局のところ、各メモリをいつ使用するかという質問に対する答えは、アプリケーションに大きく依存します。