カーネルのif句に依存してcudaプログラムがクラッシュするという非常に奇妙な動作が発生しました。このコードは問題なく動作します (同じ手順、おそらくコンパイラがこれを最適化しますか?):
...
if( value == 0 )
{
result = make_float4(0,0,1,0.01);
}
else
{
result = make_float4(0,0,1,0.01);
}
...
これに変更
...
if( value == 0 )
{
result = make_float4(0,0,1,0.01);
}
else
{
result = make_float4(1,0,1,0.01);
}
...
次のカーネルを呼び出すときに、不特定の起動エラーでプログラムがクラッシュします。問題は、結果の値ではなく、条件付き実行にあるようです。cudaGetLastError() をチェックしてもエラーは返されません。
誰もが同様の問題を抱えていましたか、それともスレッド発散制限のようなものはありますか? これをさらにデバッグする方法はありますか?