OpenCL设备内存读/写问题

时间:2015-04-27 04:22:19

标签: opencl

我正在使用TI的Keystone II,其中ARM作为主机和8个加速器DSP内核。这些DSP内核不会相互通信,因为它们没有任何共享内存。

我遇到了这个奇怪的问题,我无法重写到这个“暨”数组,我计算累积频率。我只能读第一次写给它的东西。之后的写入未注册。 这个问题的任何解决方案?

该设备具有统一内存架构。 'cum'和'frequency'也属于'CL_MEM_READ_WRITE'类型。

此代码段在DSP内核上运行

...             
        //upscan
        for(i=0; i < 32; i++)
        {   
            if(pid<4)
            {
            localvar1 = frequency[(i*8)+(2*pid)];
            localvar2 = frequency[(i*8)+(2*pid)+1];
            cum[(i*8)+(2*pid)+1] = localvar1 + localvar2;
            }
        }
        for(i=0; i < 32; i++)
        {
            if(pid<2)
            {
            localvar1 = cum[(i*8)+(4*pid)+3];
            localvar2 = cum[(i*8)+(4*pid)+1];
            cum[(i*8)+(4*pid)+3] = localvar1 + localvar2;
            }           
        }
        for(i=0; i < 32; i++)
        {
            if(pid<1)
            {
            localvar1 = cum[(i*8)+(pid)+7];
            localvar2 = cum[(i*8)+(pid)+3];
            cum[(i*8)+(pid)+7] = localvar1 + localvar2;
            }
        }
...

1 个答案:

答案 0 :(得分:0)

在for循环之间使用barriermem_fence,确切的标记选择取决于您正在使用的内存类型(全局,本地)和设备特定的详细信息,但屏障应该解决你的问题。