私はcudaレジスタのメモリに関するいくつかの質問がありますCUDAでレジスタメモリを使用
1)cudaカーネルでレジスタを解放する方法はありますか?私は変数、1Dと2D配列をレジスタに持っています。 (最大配列サイズ48)
2)デバイスの機能を使用すると、実行後にデバイス機能で使用したレジスタはどうなりますか?カーネルの実行やその他のデバイス機能を呼び出すために利用できるでしょうか?
3)nvccはレジスタの使用を最適化する方法を教えてください。メモリ集中型カーネルの重要な点を共有してください。
PS:計算のために多くのレジスタを取っているcudaに移植する複雑なアルゴリズムがあります。中間データをレジスタに格納するかどうかを調べることを試みています。 1つのカーネルを書き込むか、またはグローバルメモリに格納し、複数のカーネルでアルゴリズムを中断させます。
私はすでに共有して一定のメモリを使用したが、それでもアルゴリズムの集中的な性質を計算するため、午前、レジスタの多くは必要とされている(> 255、私は実際にアルゴリズムを設計する際に必要なレジスタの数を計算するためにこの質問をしました)。中間結果をグローバルメモリに格納し、計算を複数のカーネルに分割すると、私は読み書きのサイクルを無駄にすることになります。レジスタをローカルメモリに流す方が良いでしょうか? (したがって、次世代のGPUであれば、スレッドごとのレジスタが増えると同じアルゴリズムがサポートされるようになる) – Adarsh
@Adarsh:CUDAのソースコードだけで使用するレジスタの数を推測することはできません。 'maxrregcount'を使用するか、より少ないローカル変数を使用します。CPUからCUDAにコードを移植するときは、アルゴリズムをGPUハードウェアのより快適なものに変更することも検討してください。ビッグタスクを複数のカーネルに分割することは、コンピューティングバウンドアルゴリズム(回答が更新された)の最適なアプローチです。カーネルごとのレジスタの使用量が少ないほど、アクティブなスレッドはロード/ストアを隠します。 nvvpは、あなたのカーネルがこのカテゴリに該当するかどうかを伝えます。 "確か"ではない、試してみてください。 –
@Adarsh私の答えがあなたを満足させている場合は、受け入れられたものとして署名するか、何が欠けているかを明確にしてください。 –