CUDA_EXCEPTION_5, Warp Out-of-range Address エラーが発生し、その原因となる可能性のあるさまざまなシナリオを把握しようとしています。
私は C プロジェクト (他の誰かによって書かれた) を CUDA に移植することに取り組んでいます。C コードは非常にレジスターが多く、スタック内の多くの配列をインスタンス化します。レジスタのオーバーフローが発生する可能性が非常に高く、それがワープ範囲外エラーを引き起こしている可能性があると想定しています。
最初に実行してから、コードの最適化を開始することに注意してください。
ウィキペディアによると、「スレッドごとのローカルメモリ」が512KBのCompute Capable 3.0ハードウェアを使用しています。SMごとに512KBのレジスタスペースがあることを他の場所で読みました。実行中のスレッドごとに 512KB のレジスタ空間を持つことは可能ですか?
私は現在、次のようにカーネルを実行しています (はい、非常に遅いことはわかっています)。
dim3 grid(28800,1);
cuPlotLRMap<<<grid,1>>>(...)
いくつかの詳細(これがどれほど役立つかわかりません):
私のハードウェアには 7 つの SM があります。実行中のブロックは 112 ありますが、これは各ブロックが 512k 相当のレジスタ空間の 1/16 を取得するということですか?
また、スレッドがレジスタ空間を超えると、グローバル メモリにオーバーフローする可能性があることも理解しています。これが発生した場合、同時スレッドが同じグローバル メモリ空間にオーバーフローする可能性はありますか?