私のプログラムのプロファイリング結果によると、理論的に達成された最大占有率は 50% であり、リミッターはレジスターです。CUDA コードでレジスタの数を最小限に抑えるための一般的な手順は何ですか? プロファイリングの結果を見ると、レジスタの数が、コード内の (スレッドごとに) 32 ビットおよび 16 ビットの変数の数よりもはるかに多いことが示されています。潜在的な理由は何ですか?
さらに、「maxregcount」を 32 (32 * 2048 (SMX あたりの最大スレッド数) = 65536 (SMX あたりの最大レジスタ数) に設定すると、占有制限の問題は解決しますが、速度はあまり向上しません。「maxregcount」は最適化を試みますか?より多くのコードを使用して、レジスターの使用に無駄がないようにしますか? それとも、レジスターのスピルのために L1 キャッシュまたはローカル メモリを選択するだけですか?