2

任何解决方案?

这甚至可能吗?

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

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

4

3 回答 3

5

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

正如我对指针的理解:[它们指向的位置]类型* [存储位置]名称;

于 2014-03-31T09:06:09.573 回答
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 规范)。希望这会有所帮助!

于 2012-09-19T08:18:01.610 回答
0

这是合法的:

global uint *globalPtr=&ptr[tid]
于 2013-03-19T07:36:49.493 回答