8

xptxasを使用してレジスタの使用状況を確認すると、次のようになります。

ptxas info : Used 63 registers, 244 bytes cmem[0], 51220 bytes cmem[2], 24 bytes cmem[14], 20 bytes cmem[16]

現在、cmem[x]を明確に説明しているドキュメントはあるのでしょうか。コンスタントメモリを複数のバンクに分割することのポイントは何ですか、合計でいくつのバンクがありますか、そして0、2、14、16以外の他のバンクは何に使用されますか?

補足として、@ njuffa(特にあなたに感謝します)は以前にnvidiaのフォーラムで銀行0,2,14,16とは何かを説明しました:

使用される定数メモリは、定数プログラムの「変数」(バンク1)と、コンパイラによって生成された定数(バンク14)に分割されます。

cmem [0]:カーネル引数

cmem [2]:ユーザー定義の定数オブジェクト

cmem [16]:コンパイラによって生成された定数(ソースコードのリテラル定数に対応するものもあります)

4

2 に答える 2

6

CUDAによるGPUコンスタントバンクの使用法は、私の知る限り公式には文書化されていません。コンスタントバンクの数と使用法は、GPU世代間で異なります。これらは、プログラマーが心配する必要のない低レベルの実装の詳細です。

定数バンクの使用法は、必要に応じて、特定のプラットフォーム用に生成されたマシンコード(SASS)を調べることにより、リバースエンジニアリングできます。実際、これが私が元の質問で引用された情報を思いついた方法です(この情報は私のNVIDIA開発者フォーラムの投稿から来ました)。私が提供した情報は、Fermiクラスのデバイスに特に適用されたアドホックリバースエンジニアリングに基づいていましたが、現時点ではフォーラムにアクセスできないため、現時点ではこれを確認できません。

複数の定数バンクを使用する理由の1つは、ハードウェアまたはツールによって提供される追加の読み取り専用情報を追加の定数バンクに格納しながら、CUDAプログラマーが使用できるようにユーザーに表示される定数メモリを予約することです。

CUDA数学ライブラリはソースファイルとして提供され、関数はユーザーコードにインライン化されるため、CUDA数学ライブラリ関数の一定のメモリ使用量は、ユーザーに表示される一定のメモリの統計に含まれることに注意してください。

于 2012-09-06T04:31:26.833 に答える
0

「その他のNVCCの使用法」を参照してください。彼らは、一定の銀行配分はプロファイル固有であると述べています。

PTXガイドでは、64KBのコンスタントメモリとは別に、コンスタントメモリ用にさらに10個のバンクがあると述べています。ドライバーは、これらの領域に定数バッファーを割り当てて初期化し、カーネル関数パラメーターとしてバッファーにポインターを渡すことができます。

私は、nvccに与えられたそのプロファイルが、どの定数がどのメモリに入るのかを処理すると思います。とにかく、各定数メモリcmem [n]が64KB未満であるかどうかを心配する必要はありません。これは、各バンクのサイズが64KBであり、グリッド内のすべてのスレッドに共通であるためです。

于 2013-03-28T17:27:20.933 に答える