我得到了这个非常奇怪的行为,我的 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);
}
...
调用下一个内核时,使我的程序因未指定的启动失败而崩溃。问题似乎确实是条件执行而不是result的值。检查 cudaGetLastError() 不会返回错误。
任何人都遇到过类似的问题,或者是否有类似线程发散限制的东西?知道如何进一步调试吗?