PTX情報に関する有用な情報があまり--ptxas-options=-v
見つかりません。小さな宣伝文句がある2008NVCCpdfを見つけましたが、詳細はありません。
1)どういう64 bytes cmem[0], 12 bytes cmem[16]
意味ですか?私はそれが一定の記憶を指していることを収集します。私はコードで定数memを使用していないので、これはコンパイラーからのものでなければなりません。(RO memには何が入りますか?)
2)どういう49152+0 bytes smem
意味ですか?はい、それは共有メモリですが、2つの#はどういう意味ですか?
3)これを支援するドキュメントはありますか?(それは何と呼ばれていますか?)
4)* .ptxファイルを説明するドキュメントはどこにありますか?(cuda assyコードを読んで理解できるようにしたいと思います。)
2 に答える
cmem
ここで議論されています。あなたの場合、カーネルに引数を渡すために64バイトが使用され、コンパイラが生成した定数によって12バイトが占有されることを意味します。の場合
smem
、最初の数字はコードが要求するデータの量で、2 番目の数字 (0
) はシステム目的で使用されるメモリの量を示します。ptxas
詳細な出力形式に関する公式情報は知りません。たとえば、「CUDA Occupancy calculator」では、smem
説明なしで値を合計するように単純に言います。nVidia の Web サイトには、いくつかの PTX ドキュメントがあります。最も基本的なものはPTX: Parallel Thread Execution ISA Version 3.0です。
「その他の NVCC の使用法」を参照してください。彼らは、一定の銀行割り当てはプロファイル固有であると述べています。
PTX ガイドでは、64KB のコンスタント メモリとは別に、コンスタント メモリ用にさらに 10 個のバンクがあると述べています。ドライバーは、これらの領域に定数バッファーを割り当てて初期化し、ポインターをカーネル関数パラメーターとしてバッファーに渡すことができます。
nvcc に指定されたそのプロファイルは、どの定数がどのメモリに入るかを処理すると思います。とにかく、各定数メモリcmem[n] が 64KB 未満であっても心配する必要はありません。各バンクのサイズは 64KB であり、グリッド内のすべてのスレッドに共通であるためです。