我写了一个我声明的OpenCL内核函数 内核中的本地数组,如:
float arr[10000];
现在看来每个工作项都有一个10000个元素的独立数组。私人注册后我在这里有点困惑 每个线程可能无法容纳10000个元素数组。
有没有人对此有任何想法?
答案 0 :(得分:1)
OpenCL规范,§6.5地址空间限定符说:
程序中函数的参数的通用地址空间名称,或函数的局部变量是
__private
。
因此,在内核中,float arr[10000]
驻留在私有地址空间中。这就是所有规范所说的。
理论上,除此之外发生的事情取决于实现:未指定私有地址空间是否应物理存储在寄存器,寄存器文件,某种片外存储器,这些存储器的组合中,或者别的什么。
在实践中,一些实现会根据许多因素将小数组放入寄存器中,而较大的数组将放在片外存储器中。