在OpenCL上向指针添加偏移量

时间:2016-03-03 13:21:51

标签: pointers opencl address-space

我有一个缓冲区,我通过cl_mem对象传递给OpenCL内核,我希望根据区域将其解释为不同的类型,例如

kernel void do_something(global void * data) {
    global double * offset_ptr = data + 20;
    global uint * offset2_ptr = data + 40;

    offset_ptr[5] = 4.0;
    offset2_ptr[2] = 5;
}

我的问题是第2和第3行;我从编译器得到这条消息:

Bitcasts between pointers of different address spaces is not legal.Use AddrSpaceCast instead.
%26 = bitcast i8 addrspace(1)* %19 to i8*

或类似的东西。我可以用

解决这个问题
... = (global) data + 20;

但我觉得这是在解决这个问题并且我误解了地址空间的基本内容。当我在程序中引入另一个错误时,这些相同的行然后给我这个:

warning: incompatible integer to pointer conversion initializing '__global double *__attribute__((address_space(16776963)))' with an expression of type 'unsigned int'

我应该在这做什么?

0 个答案:

没有答案