Parameters 不带指针的OpenCL内核参数

Parameters 不带指针的OpenCL内核参数,parameters,kernel,opencl,Parameters,Kernel,Opencl,假设我有这个内核: __kernel void myKernel( __global uint* output, uint count) 参数计数驻留在哪个内存区域?我可以在它前面加上常数还是私有?为了将其存储在常量内存或寄存器中?OpenCL规范规定所有函数参数(包括内核参数)都存储在私有地址空间中: 未使用地址空间限定符声明的内核函数内的变量、非内核函数内的所有变量以及所有函数参数都位于\u私有或私有地址空间中 尽管它的定义与OpenCL规范中的定义类似

假设我有这个内核:

__kernel void myKernel(
    __global uint* output, 
             uint count)

参数计数驻留在哪个内存区域?我可以在它前面加上常数还是私有?为了将其存储在常量内存或寄存器中?

OpenCL规范规定所有函数参数(包括内核参数)都存储在
私有
地址空间中:

未使用地址空间限定符声明的内核函数内的变量、非内核函数内的所有变量以及所有函数参数都位于\u私有或私有地址空间


尽管它的定义与OpenCL规范中的定义类似,并且完全有意义,因为它将保留在一个常量寄存器中。根据经验,我发现内核中声明的参数可以帮助解决内存瓶颈的内核(即使只是一点点)。因此,这意味着这些变量作为参数存在于
\uuu常量
内存空间中,它们确实使用带宽来检索它们,至少是第一次。此外,它们禁止编译器优化内部代码。