私はGeForce GTX 745(CC 5.0)を持っています。CUDA CC 5.0のレジスタ数はいくつですか?
deviceQueryコマンドは、ブロックごとに使用できるレジスタの総数が65536(65536 * 4/1024 = 256KB)であることを示しています。
サイズ10Kの配列を使用するカーネルを書きましたが、カーネルは次のように呼び出されます。私は配列を割り当てる2つの方法を試しました。
// using registers
fun1() {
short *arr = new short[100*100]; // 100*100*sizeof(short)=256K/per block
....
delete[] arr;
}
fun1<<<4, 64>>>();
// using global memory
fun2(short *d_arr) {
...
}
fun2<<<4, 64>>>(d_arr);
どちらの場合でも正しい結果が得られます。 レジスタを使用する最初の方がはるかに高速です。
しかし、私は、エラーコード77
fun1<<<6, 64>>>();
を得た6つのブロックを使用してカーネルを起動する際に不正なメモリアクセスが
に遭遇した今、私が実際にどのように多く、思ったんだけどレジスタは使用できますか?そしてそれはどのようにブロックの数に関連していますか?
これはおそらくレジスタの数とは関係ありませんが、コードにバグがあります。デバッグに関する助けが必要な場合は、完全でビルド可能なコードを投稿してください。すべてのAPI呼び出しとすべてのカーネル起動の戻り状況を確認するとどうなりますか? – njuffa
@njuffa in fun1()ブロックあたりのレジスタの制限を超える256 KBを配列に割り当てました。それはなぜ機能するのですか? –
'arr'のような動的に割り当てられた配列はレジスタに格納されません。 – njuffa