任何解决方案?
这甚至可能吗?
__global *float abc; // pointer to global memory stored in private memory
我希望abc存储在本地内存而不是私有内存。
答案 0 :(得分:5)
我认为这是澄清here清单5.2:
__global int global_data[128]; // 128 integers allocated on global memory
__local float *lf; // pointer placed on the private memory, which points to a single-precision float located on the local memory
__global char * __local lgc[8]; // 8 pointers stored on the local memory that points to a char located on the global memory
正如我对指针的理解:[他们指出的地方]类型* [存储地点]名称;
答案 1 :(得分:1)
好吧,我也遇到过类似的问题,正如我所探讨的那样,我认为它的工作方式是这样的:在OpenCL内核中,没有地址限定符(__local,__ global等)的内核中的变量将是自动认为存储在__private内存空间中。对于未使用空格限定符声明的指针,它也将被视为指向__private空间。以下是一个示例代码段:
__kernel void foo(__global uint *ptr)
{
uint tid = get_global_id(0);
uint * localPtr = ptr;
uint var= *(localPtr + tid);
... ...
}
在上面的代码片段中,localPtr是一个没有内存空间限定符的uint类型指针,因此它将自动被视为指向_ 私有内存空间。在OpenCL中,指向地址空间A(例如 _global)的指针只能分配给指向同一地址空间(__global)的指针。因此,在上面的示例中,指向__private地址空间的指针不能使用指向__global地址的指针(ptr)进行分配。 (关于这一点,您还可以参考“地址空间限定符”部分中的OpenCL规范)。希望这会有所帮助!
答案 2 :(得分:0)
这是合法的:
global uint *globalPtr=&ptr[tid]