CUDA現在、nVidia GTX 480で開発しています。CUDA仕様によると、カードにはそれぞれ 32 コアのストリーミング マルチプロセッサ (SM) が 15 個搭載されています。
私のコードは、Nそれぞれ 32 コアのブロックで動作します。
理想的にはN <= 15、各ブロックを異なる SM に割り当てることができるため、各ブロックは 1 つのブロックと同じ速度で実行されると予想されます。「N > 15」の場合、ブロックが SM を共有し始めると、個々のブロックのパフォーマンスが低下するはずです。maxoccがカーネルの最大占有率である場合N > 15*maxocc、SM ですべてのブロックをスケジュールできるわけではないため、 の時点でパフォーマンスが停滞するはずです。
これは私が実際に観察したことでもあります。個々のブロックのパフォーマンスは の時点で低下し始め、N = 12の時点でパフォーマンスが停滞していますN = 57。つまり、SM を占有する 3 つの余分なブロックがあるかのようです。
GTX 480 を使用する他のプログラムは実行していません。ただし、カードはテキスト コンソールを実行する外部ディスプレイに接続されています。つまり、X-windows ではありません。
ここで質問です。GTX 480 を使用してコンソールを駆動するとCUDAリソースが占有されるかどうか知っている人はいますか? もしそうなら、正確にはいくらですか?どうすればそれを回避できますか、つまり、CUDAデバイスを完全に非アクティブ化せずにビデオ出力を非アクティブ化するにはどうすればよいですか?