カーネルは以下を使用します: ( --ptxas-options=-v
)
0 バイトのスタック フレーム、0 バイトのスピル sotes、0 バイトのスピル ロード
ptxas 情報: 45 個のレジスタを使用、49152+0 バイトの smem、64 バイトの cmem[0]、12 バイトの cmem[16]
次のコマンドで起動するkernelA<<<20,512>>>(float parmA, int paramB);
と、問題なく実行されます。
次で起動するとkernelA<<<20,513>>>(float parmA, int paramB);
、リソース不足エラーが発生します。(起動に要求されたリソースが多すぎます)。
Fermi デバイスのプロパティ: SM ごとに 48KB の共有メモリ、定数メモリ 64KB、SM ごとに 32K レジスタ、ブロックごとに最大 1024 スレッド、comp 対応 2.1 (sm_21)
共有メモリ領域をすべて使用しています。約 700 スレッド/ブロックでブロック レジスタ スペースが不足します。MAX_threads/block の半分以上の数を要求すると、カーネルが起動しません。単なる偶然かもしれませんが、私はそれを疑っています。
- スレッドの完全なブロック (1024) を使用できないのはなぜですか?
- どのリソースが不足しているのか推測できますか?
- ストールしたスレッドのデータ/状態がワープ間でどこに行くのか、よく疑問に思います。これらを保持しているリソースは何ですか?