我有一个数组,我想__constant__
在 CUDA 设备的内存中初始化。直到运行时我才知道它的大小或值。
我知道我可以使用__constant__ float Points[**N**][2]
或类似的东西,但我如何使这个动态?也许以__constant__ float* Points
?
这可能吗?可能更重要的是,这是个好主意吗?如果有更好的选择来做这样的事情,我很想听听他们的意见。
正如在 CUDA 中的常量内存的动态分配和常量内存分配和初始化中讨论的那样,您不能。正如在常量内存分配和初始化中注意到的那样,
常量在编译时嵌入到可执行文件中(这就是为什么您必须将字节复制到符号指定的地址以在运行时设置常量值)。因此,您将无法为同一编译内核的不同调用分配不同大小的常量数组。
常量内存分配和初始化中的建议是使用纹理内存,因为
纹理大小可以动态设置并被缓存。
如果您使用的是开普勒,我的建议是用const __restrict
. 通过这种方式,您将能够动态分配数组,编译器将安排事情,以便在运行时通过纹理缓存自动读取数据。