【问题标题】:does normal pointer arithmetic works on opencl kernels?普通指针算术是否适用于 opencl 内核?
【发布时间】:2016-11-08 01:38:44
【问题描述】:

比如,这段sn-p的代码能正常编译执行吗?

int* end = local_buffer + BUFFER_SIZE;
for(int* x = local_buffer; x < end; ++x)
{
   ...
}

【问题讨论】:

  • 可以,只要指针都在设备空间中。没问题。

标签: c opencl gpu gpgpu


【解决方案1】:

指针算法确实有效,但您需要使用适当的内存空间注释您的指针。所以你的示例代码很可能是错误的:如果local_buffer 被声明为

local int local_buffer[BUFFER_SIZE];

那么endx 变量的类型必须也有local 说明符:

local int* end = …;
for (local int* x = …

默认是global,如果你的指针指向本地或常量内存,这将导致事情严重失败。我发现许多 OpenCL 实现不会对此发出警告,因此您必须非常小心。

【讨论】:

    猜你喜欢
    • 2018-09-18
    • 2016-04-25
    • 2016-04-06
    • 2013-10-02
    • 2013-06-12
    • 2019-08-30
    • 2015-01-16
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多