If statement Cuda程序在使用if条件时崩溃
我得到了一个非常奇怪的行为,我的cuda程序依赖于内核中的if子句崩溃。这段代码运行良好(相同的指令,可能是编译器对此进行了优化?) 换成这个If statement Cuda程序在使用if条件时崩溃,if-statement,cuda,If Statement,Cuda,我得到了一个非常奇怪的行为,我的cuda程序依赖于内核中的if子句崩溃。这段代码运行良好(相同的指令,可能是编译器对此进行了优化?) 换成这个 ... if( value == 0 ) { result = make_float4(0,0,1,0.01); } else { result = make_float4(1,0,1,0.01); } ... 使我的程序在调用下一个内核时因未指定的启动失败而崩溃。问题似乎真的是有条件的执行,而不是结果的价值。检查cudaGetLastErr
...
if( value == 0 )
{
result = make_float4(0,0,1,0.01);
}
else
{
result = make_float4(1,0,1,0.01);
}
...
使我的程序在调用下一个内核时因未指定的启动失败而崩溃。问题似乎真的是有条件的执行,而不是结果的价值。检查cudaGetLastError()不会返回错误
有没有人曾经遇到过类似的问题,或者是否存在线程发散限制之类的问题?你知道如何进一步调试吗?我自己在对我的问题的评论的帮助下找到了anwser:代码中的错误早就出现了。价值的计算是个问题。在这里,我做了一个数组越界访问,当if条件中的两个语句相同时,编译器似乎会对此进行优化 这: 已对此进行了优化:
...
result = make_float4(0,0,1,0.01);
...
因此,在这种情况下不会生成错误。在
cudaDeviceSynchronize()
之后调用cudaGetLastError()
(或者最好直接使用cudaDeviceSynchronize()
返回的代码)。无条件设置result=make_float4(1,0,1,0.01)
不会导致启动失败?在哪里以及如何定义color
和result
以及result
?响应“任何进一步调试的方法”可能会运行您所说的未崩溃但通过cuda memcheck影响下一个内核的可疑内核。很可能,你在这里提供的代码片段不足以解决你的问题。pQB:本地,就在if语句之前。Robertc您能为这个显示更多的代码/上下文吗?基于完全脱离上下文的几行代码,没有关于类型、定义等的信息,很难判断出哪里出了问题。请帮助我们帮助您。。。。。
...
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);
...