2.xコンピューティング機能デバイスについて正しく理解しているので、スレッドごとに63個のレジスタ制限があります。コンピューティング機能1.3のデバイスのスレッドあたりのレジスタ数はどれくらいですか?スレッドごとのCudaレジスタ
私はGTX260でテストしている大きなカーネルを持っています。私は、カーネルが非常に複雑で多くのローカル変数が必要なので、私はたくさんのレジスタを使用していると確信しています。 Cudaプロファイラによれば、私のレジスタ使用量は63です(スタティック・スメムは68ですが、その意味とダイナミック・スメムは0です)。しかし、私は63以上のローカル変数を持っていると確信しています。コンパイラはレジスタを再利用したり、ローカルメモリに書き込んだりしています。
今私は、コンピューティング機能1.3のデバイスのスレッドあたりのレジスタの上限が2.xデバイスよりも大きいと考えました。私の推測では、このデバイスのSMのレジスタの制限数である256 * 64は16384であるのに対し、256 * 63は16128の256スレッドのブロックを使用しているため、コンパイラが63制限を選択していたと思います。だから私の推測では、ブロックあたりのスレッド数を減らすと、使用するレジスタの数を増やすことができるということでした。だから私は196スレッドのブロックでカーネルを走らせた。しかし、63×192が12096で64×192が12288であっても、プロファイラは63個のレジスタを表示しますが、これはSMの16384の限界内にあります。
なぜコンパイラが63レジスタに制限されているのですか?それはレジスタの再利用のためにすべてであるか、それともレジスタを溢れさせるのでしょうか?スレッドごと
質問の最初の部分に対する回答は、[ここ](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-technical-specifications.xml)です。 – talonmies
ええ、私は以前それを見ていました。テーブルでは、 "マルチプロセッサあたりの32ビットレジスタの数"は16Kですが、必要なのはスレッドごとに**許可されているレジスタの最大数です**ここには指定されていません。私は2.xのデバイスでは限界が63だが1.3には限界があることを知っていますか? – Atirag
探してみると、スレッドごとの番号はすぐ下にある – talonmies