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

时间:2012-08-15 22:05:59

标签: c opencl gpgpu

任何解决方案?

这甚至可能吗?

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

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

3 个答案:

答案 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]