If statement 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

我得到了一个非常奇怪的行为,我的cuda程序依赖于内核中的if子句崩溃。这段代码运行良好(相同的指令,可能是编译器对此进行了优化?)

换成这个

... 
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);
...