OpenCL内核中数组的内存space是多少?

What is the memory space of an array in OpenCL kernel?

我写了一个 OpenCL 内核函数,我在其中声明 内核中的本地数组,例如:

float arr[10000];

现在似乎每个工作项都有一个独立的 10000 元素数组。我在这里有点困惑,因为私人注册 每个线程可能无法容纳 10000 个元素的数组。

有人知道吗?

OpenCL 规范,§ 6.5 地址 Space 限定符 说:

The generic address space name for arguments to a function in a program, or local variables of a function is __private.

因此在内核中,float arr[10000] 位于私有地址 space 中。这就是规范所说的全部内容。

理论上,超出该点会发生什么取决于实现:未指定私有地址 space 是否应物理存储在寄存器、寄存器文件、某种片外存储器中,这些的组合,或其他东西。

实际上,一些实现会根据多种因素将小数组放在寄存器中,而较大的数组将放在片外内存中。