"CUDA C Programming Guide"によれば、マルチプロセッサ定数キャッシュ(セクション5.3.2.4)がヒットした場合のみ、定数メモリアクセスが有効です。さもなければ、合体された大域メモリ読み出しの場合よりも、半ワープに対するメモリ要求がさらに多くなる可能性がある。なぜ、一定のメモリサイズが64 KBに制限されているのですか?CUDAで一定のメモリサイズが制限されるのはなぜですか?
さらにもう一度質問しないように質問します。私が理解する限り、Fermiアーキテクチャでは、テクスチャキャッシュはL2キャッシュと結合されています。テクスチャの使用はまだ有効か、グローバルメモリの読み込みは同じ方法でキャッシュされますか?
定数メモリ(セクション5.3.2.4)
が一定のメモリ空間はデバイスメモリ内に常駐し、セクションF.3.1およびFに記載された一定のキャッシュ内にキャッシュされています4.1。
コンピューティング機能1.xのデバイスの場合、ワープの定数メモリ要求は、最初に独立して発行されるハーフワープごとに2つの要求に分割されます。
要求は、最初の要求に異なるメモリアドレスが存在する場合と同じように多くの個別の要求に分割され、個別の要求の数に等しい要因でスループットが低下します。
結果の要求は、キャッシュヒットの場合は定数キャッシュのスループットで、それ以外の場合はデバイスメモリのスループットで処理されます。
グレッグ、私はおそらく十分にはっきりしていないと申し訳ありません。私は定数メモリの使い方を知っています。質問では、キャッシュされた8 KBだけが実際にグローバルメモリのパフォーマンスよりも優れたパフォーマンスを提供する場合、定数メモリのサイズは64 KBに制限されているのでしょうか?同様に、L1キャッシュを介してグローバルメモリにアクセスすることができる。したがって、プログラマの観点からは、グローバルメモリと定数メモリの両方が同じ方法でキャッシュされるので、それらの違いは何ですか? – AdelNick
定数キャッシュは、グラフィックスと計算シェーダに最適なサイズです。 CUDA APIは、開発者が追加のキャッシュを利用できるように、定数キャッシュを公開します。定数キャッシュは、すべてのスレッドが同じアドレスにアクセスするときに最適なパフォーマンスを発揮します。ヒットは非常に速いです。ミスはL1ミスと同じ性能を持つことができます。定数キャッシュは、L1のスラッシングを減らすために使用できます。計算機能1.xデバイスにはL1またはL2キャッシュがないため、一定のキャッシュを使用して一部のアクセスを最適化しました。 –