OpenCL内核中数组的内存空间是什么?



我写了一个opencl内核函数我声明了内核内的本地阵列,例如:

float arr[10000];

现在,每个工作项似乎都有10000个元素的独立阵列。我在这里有些困惑,因为私人寄存器每个线程可能无法容纳10000个元素阵列。

有人对此有任何想法吗?

参数的通用地址空间名称为程序中的函数或函数的局部变量为 __private

因此,在内核中,float arr[10000]位于私人地址空间中。这就是规格所说的。

从理论上讲,除此之外,发生的事情取决于实现:未指定私人地址空间是否应物理存储在寄存器中,寄存器文件,某种外芯片内存,这些组合的组合或其他东西。

实际上,某些实现将根据许多因素将小阵列放入寄存器中,而较大的阵列将放在芯片外存储器上。

最新更新