ローカルメモリについて言及しているCUDAのドキュメントを読みました。(これは主に初期のドキュメントです。)device-propertiesは、local-memサイズ(スレッドごと)を報告します。「ローカル」メモリとはどういう意味ですか?「ローカル」メモリとは何ですか?「ローカル」メモリはどこにありますか?「ローカル」メモリにアクセスするにはどうすればよいですか?__device__
記憶ですよね?
device-propertiesは、グローバル、共有、および一定のmemサイズも報告します。これらのステートメントは正しいですか:
グローバルメモリは__device__
メモリです。グリッドスコープとグリッド(カーネル)の存続期間があります。
コンスタントメモリは__device__ __constant__
メモリです。グリッドスコープとグリッド(カーネル)の有効期間があります。
共有メモリは__device__ __shared__
メモリです。単一のブロックスコープと(スレッドの)そのブロックの存続期間があります。
共有メモリはSMメモリだと思います。つまり、その単一のSMのみが直接アクセスできるメモリ。かなり限られたリソース。SMは一度にたくさんのブロックを割り当てられていませんか?これは、SMが異なるブロックの実行をインターリーブできる(またはインターリーブできない)ことを意味しますか?つまり、ブロック* A *スレッドをストールするまで実行します。次に、ブロック* B *スレッドを停止するまで実行します。次に、再びブロック* A *スレッドにスワップバックします。またはSMは、ブロック* A *のスレッドのセットを、ストールするまで実行しますか。次に、別のブロック* A *スレッドのセットがスワップインされます。このスワップは、ブロック* A *が使い果たされるまで続きます。それからそしてその時だけ、作業はブロック* Bで始まります*。共有メモリのためにお願いします。1つのSMが2つの異なるブロックからコードをスワップインしている場合、SMはどのようにして共有メモリチャンクをすばやくスワップイン/スワップアウトしますか?(後のsenerioは真であり、共有メモリスペースのスワップイン/スワップアウトはないと思います。Block* A *は完了するまで実行され、次にblock * B *が実行を開始します。注:block * A *は異なる場合があります。ブロックよりカーネル* B *。)