OpenCL Out of Resources - 代码行崩溃,此时尚未达到

时间:2012-03-06 06:59:52

标签: c++ opencl

我正在做一些OpenCL编程,在我的代码中的某个位置我得到了奇怪的错误。

a和a_end是指向本地内存的指针

if (a+POS<=a_end) {
    max = ....
} else {
    max = *(a_end-1);
}

在我的情况下,在当前循环中未达到“else”。但是,如果该行是代码的一部分,则应用程序将崩溃为-5 CL_OUT_OF_RESOURCES。 如果我评论该线程,该程序运行良好。这很奇怪。

你有什么建议吗?

此致 克里斯

修改:更多代码

a,a_end和POS1崩溃之前的值: a:3298304 a_end:3311264 POS1:34

border=b-b_end; //TODO: Check if all dummy elements are removed in this case
if(POS1<border && a+POS1<a_end) {
    s_data[POS1+s_maxes[2]-border+1]=a[POS1];
    s_ids[POS1+s_maxes[2]-border+1] = a_pos+POS1;
}

if(POS1+1==border) {
    debug[0] = a+POS1;
    debug[1] = a_end;
    s_maxes[1]=*(b_end-1);

    if(a+POS1<=a_end) {
        s_maxes[0]=s_data[s_maxes[2]];
    } else {
        s_maxes[0]=*(a_end-1); //Here is the line where it crashes
    }
}
if(POS2<border && a+POS2<a_end) {
    s_data[POS2+s_maxes[2]-border+1]=a[POS2];
    a_pos+POS2;
}
if(POS2+1==border) {
    s_maxes[1]=*(b_end-1);
    if(a+POS2<=a_end) {
        s_maxes[0]=s_data[s_maxes[2]];
    } else {
        s_maxes[0]=*(a_end-1);
    }
}
a+=border;a_pos+=border;

1 个答案:

答案 0 :(得分:0)

很有可能发生以下情况:在if a_end的值被破坏之前,很可能它被初始化为0(没有进一步了解代码这是我最好的但它也可能是一个小于a + POS的值,然后显然会执行else分支,它会尝试取消引用在地址0 - 1找到的值,这是一个相当大的数字,然后应用程序崩溃。显然,如果删除else分支,则不会执行此代码。

提示:为a_end的值添加一些打印输出。