OpenCL:将指针存储到本地内存中的全局内存?

任何解决方案

这有可能吗?

__global *float abc; // pointer to global memory stored in private memory 

我希望abc存储在本地内存而不是私有内存中。

我认为这在表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 

正如我对指针的理解:[他们指出的地方]类型* [存储地点]名称;

好吧,我也遇到过类似的问题,正如我所研究的那样,我认为它的工作方式是这样的:在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类型指针,没有内存空间限定符,因此它将自动被视为指向_ private memory space。 在OpenCL中,指向地址空间A(例如,_global)的指针只能分配给指向同一地址空间(__global)的指针。 因此,在上面的示例中,指向__private地址空间的指针不能使用指向__global地址的指针(ptr)进行分配。 (关于这一点,您还可以在“地址空间限定符”部分中参考OpenCL规范)。 希望这会有所帮助!

这是合法的:

 global uint *globalPtr=&ptr[tid]