使用if条件时,Cuda程序崩溃

时间:2013-04-12 12:00:06

标签: if-statement cuda

我得到了这个非常奇怪的行为,我的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()不会返回错误。

任何人都有过类似的问题,或者是否存在线程差异限制?知道如何进一步调试吗?

1 个答案:

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

所以在这种情况下没有产生错误。