2013-07-09 19 views
7

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レジスタに制限されているのですか?それはレジスタの再利用のためにすべてであるか、それともレジスタを溢れさせるのでしょうか?スレッドごと

+1

質問の最初の部分に対する回答は、[ここ](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-technical-specifications.xml)です。 – talonmies

+0

ええ、私は以前それを見ていました。テーブルでは、 "マルチプロセッサあたりの32ビットレジスタの数"は16Kですが、必要なのはスレッドごとに**許可されているレジスタの最大数です**ここには指定されていません。私は2.xのデバイスでは限界が63だが1.3には限界があることを知っていますか? – Atirag

+2

探してみると、スレッドごとの番号はすぐ下にある – talonmies

答えて

13

最大レジスタhere

を文書化されていることは、コンパイラは63個のレジスタがあると判断したかもしれCC 2.xおよび3.0のための63、CC 1.xのための128とCC 255 3.5

です十分であり、追加のレジスタを使用する必要はありません。レジスタは再利用することができるので、多くのローカル変数があるからといって、必ずしもスレッドごとのレジスタが高くなければならないというわけではありません。

私の提案は、様々な制限を指定して、コンパイラはそれがPTXを作成するときに使用しているどのように多くのレジスタを教えてくれ持つように-Xptxas -voptionを使用するNVCC -maxrregcountoptionを使用することです。

+0

ありがとうございました! – Atirag

+2

また、[launch bounds](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#launch-bounds)を使用して、スレッドごとのレジスタ制限をより正確に制御することもできますカーネル単位で実行されます。 –

関連する問題