没有指针的 OpenCL 内核参数
Posted
技术标签:
【中文标题】没有指针的 OpenCL 内核参数【英文标题】:OpenCL kernel parameter without pointer 【发布时间】:2015-01-16 00:10:19 【问题描述】:假设我有这个内核:
__kernel void myKernel(
__global uint* output,
uint count)
参数计数驻留在哪个内存区域?我可以把 __constant 或 __private 放在它前面吗?为了将它放在常量内存或寄存器中?
【问题讨论】:
【参考方案1】:OpenCL 规范说所有函数参数(包括内核参数)都存储在private
地址空间中:
未使用地址空间限定符声明的内核函数内的变量、非内核函数内的所有变量以及所有函数参数都在 __private 或私有地址空间 .
【讨论】:
尽管它在 OpenCL 规范中是这样定义的,并且完全有意义,因为它会保留在一个常量寄存器中。我根据经验发现,在内核中声明的参数可以帮助解决内存瓶颈内核(即使只是一点点)。因此,这意味着这些变量作为参数位于__constant
内存空间中,并且它们确实使用带宽来检索它们,至少是第一次。此外,它们禁止编译器优化内部代码。以上是关于没有指针的 OpenCL 内核参数的主要内容,如果未能解决你的问题,请参考以下文章
如何正确初始化此 C++ for openCL 内核的输入/输出参数?