OpenCL的内核结果不一致

问题描述 投票:0回答:1

[当我尝试这样做时,即使将'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);
}
parallel-processing opencl gpu
1个回答
0
投票

请确保您了解并行前缀和。特别是我看不到总金额或部分金额的下调步骤:

Parallel Prefix Sum (Scan) with CUDA

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

© www.soinside.com 2019 - 2024. All rights reserved.