2016-06-27 8 views
0

私は画像を処理するためにCUDAのコードを書いています。例えば、私はスワップ機能(マトリックスのスワップブロック)を作成しましたが、毎回私はblocsの数に問題があります。スレッドの数が私のカーネルを昼食するとき。例えばCudaカーネル設定

私は

threadsPerBlock.x=threadsPerBlock.y=64とサイズ* 2048 2048の画像をTAKとnumBlocks.x=numBlocks.y=2048/threadsPerBlock.x場合

その後、正常に動作しますswap<<<threadsPerBlock,numBlocks>>>(...)

サイズ2560 * 2160,threadsPerBlock.x=threadsPerBlock.y=64numBlocks.x=2560/64numBlocks.y=2160/64+1の画像を撮影すると、エラー9無効な設定の引数があります。

私はCUDA 7.5と計算能力の5.0

答えて

2

maximum number of threads per block for your compute 5.0デバイスが問題の原因である1024とGPUを使用していますが、あなたが逆にカーネルの起動中に引数を持っているということです。画像の最大サイズが2048未満の場合は、ブロックあたり1024スレッド未満で起動できます。 2048よりも大きなブロックサイズを使用すると、このような何か行うと

違法次のようになります。

threadsPerBlock.x=threadsPerBlock.y=32 
numBlocks.x=numBlocks.y=2048/threadsPerBlock.x 
swap<<<numBlocks,threadsPerBlock>>>(...) 

をあなたは、カーネルの起動が無条件に働くはずです。

+0

はい私は計算5.0がありますが、スレッドブロック(x、y、z)の最大寸法サイズを持っています:(1024、1024、64)私は2Dimを使用しています。 2560 * 2160(最初は256×256ブロックサイズです)は、ブロック数を超えているかもしれませんが、そうではありません。 –

+0

@SalahEddine:あなたはブロックサイズの限界を誤解しています。 (Re)私の答えでリンクを読んでください。ブロックの最大サイズは(1024,1024,64)ですが、ブロックあたりのスレッドの総数*は1024以下にする必要があります。 'dim.x * dim.y * dim.z <= 1024'のブロックのみが有効です – talonmies

+0

Thnx私の問題を抱えているのはたくさんあります:) –

関連する問題