4

PTXAS -vカーネル スタックの使用状況とレジスタ スピル (sm_35 アーキテクチャの場合) に関する CUDAの情報を完全に理解しようとしています。私のカーネルの1つでは、次のものが生成されます。

    3536 bytes stack frame, 3612 bytes spill stores, 6148 bytes spill loads
ptxas info    : Used 255 registers, 392 bytes cmem[0]

スタック フレームは、ローカル メモリに割り当てられます。ローカル メモリは、グローバル メモリがある場所に物理的に存在し、各スレッドにプライベートです。

私の質問は次のとおりです。

  1. レジスタ スピルに必要なメモリもローカル メモリに割り当てられていますか?
  2. レジスタのスピルとスタックの使用に必要なメモリの合計量は、[スレッド数]x[3536 バイト] に等しくなります。したがって、レジスタ流出ロード/ストアはスタック フレームで動作しますか?
  3. スピルストア/ロードの数は、転送のサイズの詳細を示していません。これらは常に 32 ビット レジスタですか? したがって、64 ビット浮動小数点数のスピルは 2 つのスピル ストアとしてカウントされますか?
  4. スピル ストア/ロードは L2 キャッシュにキャッシュされますか?
4

1 に答える 1

3
  1. レジスタはローカル メモリにスピルされます。「ローカル」は「スレッドローカル」、つまり各スレッド専用のストレージを意味します。
  2. 起動全体に必要なローカル メモリの量は、少なくともnumber_of_threads に local_memory_bytes_per_thread を掛けたものです。割り当ての粒度により、多くの場合、それ以上になることがあります。
  3. スピル転送のコンパイラ統計は、個々のローカル メモリ アクセスの幅が異なる可能性があるため、既にバイトに正規化されています。生成されcuobjdump --dump-sassたマシン コード (バイナリで実行) を調べると、個々のアクセスの幅が表示されます。関連する命令には、LLD、LST、LDL、STL などの名前が付いています。
  4. ローカル メモリ アクセスが L1 および L2 キャッシュにキャッシュされていることは確かですが、現時点ではドキュメントから関連する段落を引用することはできません。
于 2013-09-28T20:03:57.433 に答える