[当我尝试这样做时,即使将'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 Prefix Sum (Scan) with CUDA
我会在OpenCL device memory read/write issue中查看您正在使用的TI Keystone II SDK,以查看它们是否具有任何扫描或并行前缀总和实现或内置函数。