来自内核的OpenCL不一致结果

时间:2015-04-28 02:08:35

标签: parallel-processing opencl gpu

当我尝试这个时,我在'output'得到了错误的结果,即使我将'cum'数组的值复制到输出。

但是如果我重命名代码中前面提到的'cum'数组。我得到正确的数组值。因此,我无法重用结果值。

该设备有8个内核,没有共享内存。

赞赏所有评论/建议。

kernel void histogram(global unsigned int *input,
                             global unsigned int *output,
                             global unsigned int *frequency,
                             global unsigned int *cum,
                             unsigned int N) 
{
    int pid = get_global_id(0);

    //cumulative sum
    for(int i=0; i < 16; i++)
    {               
        cum[(i*16)+(2*pid)+1] = frequency[(i*16)+(2*pid)] + frequency[(i*16)+(2*pid)+1];
    }
    barrier(CLK_GLOBAL_MEM_FENCE);

    for(int i=0; i < 32; i++)
    {               
        output[(i*8)+pid] = cum[(i*8)+pid]; 
    }

    barrier(CLK_GLOBAL_MEM_FENCE);
}

1 个答案:

答案 0 :(得分:0)

确保您了解并行前缀和。特别是我没有看到总额或部分的降级步骤:

http://http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html

我会查看您在OpenCL device memory read/write issue中使用的TI的Keystone II SDK,看看它们是否有任何扫描或并行前缀和实现或内置函数。