のカーネルがあり、#pragma unroll 80
NVIDIA GT 285、コンピューティング機能 1.3、グリッド アーキテクチャで実行してdim3 thread_block( 16, 16 )
いdim3 grid( 40 , 30 )
ます。問題なく動作します。
NVIDIA GT 580、計算能力 2.0、および上記のグリッド アーキテクチャで実行してみたところ、問題なく動作しました。
GT 580 のグリッド アーキテクチャを
dim3 thread_block( 32 , 32 )
そしてdim3 grid( 20 , 15 )
、上記と同じ数のスレッドを生成するため、間違った結果が得られます。
GT 580でそれを削除#pragma unroll 80
または交換すると、正常に動作します。#pragma unroll 1
そうしないと、カーネルがクラッシュします。
なぜこれが起こるのか誰にも分かりますか?前もって感謝します
編集:両方のデバイスでカーネルエラーをチェックしたところ、「無効な引数」が表示されました。このエラーの原因を検索したところ、グリッドとブロックのサイズが制限を超えたときに発生することがわかりました。しかし、私はブロックごとに 16x16=256 スレッド、合計 40x30=1200 ブロックを使用しているため、これは当てはまりません。私の知る限り、これらの値は計算能力 1.3 の GPU グリッドの境界にあります。これが私が抱えているループ展開の問題と関係があるかどうか知りたいです。