OpenCL内核中的阵列的存储空间是多少?

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

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

1
float arr[10000];

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

有人对此有任何想法吗?


OpenCL规范,第6.5节"地址空间限定符"说:

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

因此在内核中,float arr[10000]驻留在专用地址空间中。这就是规范所说的全部。

从理论上讲,超出此范围的情况取决于实现:未指定是否将私有地址空间物理存储在寄存器,寄存器文件,某种片外存储器,它们的组合中,或其他的东西。

实际上,某些实现会根据许多因素将小的数组放入寄存器中,而将更大的数组放在片外存储器中。