我得到了这个非常奇怪的行为,我的cuda程序崩溃依赖于我的内核中的if子句。这段代码工作正常(相同的指令,可能是编译器优化了这个?):
...
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()不会返回错误。
任何人都有过类似的问题,或者是否存在线程差异限制?知道如何进一步调试吗?
答案 0 :(得分:0)
在我的问题评论的帮助下,我自己找到了anwser:错误在代码中是先前的。 值的加速是问题所在。在那里,我做了一个超出绑定访问的数组,似乎当if条件中的两个语句都相同时,编译器会优化它。
此:
...
int value = stupidArray[wrongIndex];
if( value == 0 )
{
result = make_float4(0,0,1,0.01);
}
else
{
result = make_float4(0,0,1,0.01);
}
...
对此进行了优化:
...
result = make_float4(0,0,1,0.01);
...
所以在这种情况下没有产生错误。