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
デバイスを完全に非アクティブ化せずにビデオ出力を非アクティブ化するにはどうすればよいですか?