我々はこのような何かを参照してくださいxptxasを使用することにより、レジスタの使用状況を確認した場合:CUDA一定のメモリバンクは、
ptxas info : Used 63 registers, 244 bytes cmem[0], 51220 bytes cmem[2], 24 bytes cmem[14], 20 bytes cmem[16]
現在、明確に[X] CMEMを説明する任意のドキュメントがある場合、私は疑問に思います。定数メモリを複数のバンクに分けるポイント、合計でいくつのバンクがあるのか、そして0,2,14,16以外の他のバンクは何に使用されていますか?
サイドノート、@njuffa(あなたに特別な感謝は)以前に銀行0,2,14,16が何であるかをNVIDIAのフォーラムに説明したように:
使用される定数メモリは(一定のプログラムの変数の中で仕切られていますバンク1)、およびコンパイラ生成定数(バンク14)を含む。
CMEM [0]:カーネル引数
CMEM [2]:ユーザ定義の定数オブジェクト
CMEM [16]:リテラルに対応することができるコンパイラ生成定数(そのうちのいくつかソースコード内の定数)
大歓迎です。 NVIDIAのフォーラムで私のポストで言及したのは、銀行の割り当てと同じように、GPUアーキテクチャ間で一定の銀行の数が異なるということです。言い換えれば、プログラマがプログラミングモデルの一部ではないので、プログラマが心配するべきではない実装の詳細です。複数のバンクを使用する1つの理由は、常時メモリの使用の矛盾する可能性を最小限に抑えることです。特に、プログラマーが見える定数バンクの多くをユーザーコードに使用できるようにしてください。 – njuffa
@njuffa私はこれをあなたのフォーラムの投稿の引用符と一緒に答えに変換するべきだと思います。 :) – harrism
@njuffa私はフォローアップの質問があります。プログラミングガイドによると、実際の関数の引数や関数の引数のようなものが実行される前に、実行コンフィギュレーションの引数が評価されています。共有メモリを介して現在デバイスに渡されています._私の理解はコンパイル時です。引数はcmem [0 ]で実行されますが、実行時には、新しいブロックが開始する直前にcmemからsmemにコピーされます。あれは正しいですか? –