【问题标题】:OpenCL device memory read/write issueOpenCL 设备内存读/写问题
【发布时间】:2015-04-28 06:28:42
【问题描述】:

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

我遇到了一个奇怪的问题,我无法将其重写到我正在计算累积频率的“cum”数组中。我只能阅读我第一次写给它的任何内容。之后的写入未注册。 有解决这个问题的办法吗?

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

这段代码 sn-p 在 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;
            }
        }
...

【问题讨论】:

  • 如果你写的是累积频率,它不应该看起来像cum[(i*8)+(2*pid)+1] += localvar1 + localvar2;
  • @Christian localvar1 是元素本身。所以我已经在阅读它以获得累积总和。

标签: opencl


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    相关资源
    最近更新 更多