【发布时间】:2015-05-08 10:41:07
【问题描述】:
我在声明的地方写了一个 OpenCL 内核函数 内核内部的本地数组,例如:
float arr[10000];
现在似乎每个工作项都有一个包含 10000 个元素的独立数组。我在这里有点困惑,因为私人注册 每个线程可能无法容纳 10000 个元素的数组。
有人对此有任何想法吗?
【问题讨论】:
我在声明的地方写了一个 OpenCL 内核函数 内核内部的本地数组,例如:
float arr[10000];
现在似乎每个工作项都有一个包含 10000 个元素的独立数组。我在这里有点困惑,因为私人注册 每个线程可能无法容纳 10000 个元素的数组。
有人对此有任何想法吗?
【问题讨论】:
OpenCL 规范,第 6.5 节地址空间限定符说:
程序中函数参数或函数局部变量的通用地址空间名称是
__private。
所以在内核中,float arr[10000] 驻留在私有地址空间中。规范就是这么说的。
理论上,超出这一点的情况取决于实现:没有指定私有地址空间是否应该物理存储在寄存器、寄存器文件、某种片外存储器、这些的组合中,或者别的东西。
在实践中,一些实现会根据多种因素将小数组放在寄存器中,而将较大的数组放在片外内存中。
【讨论】: