我想了解当我创建具有只读属性的缓冲区并将其与__constant
内核中的地址空间限定符一起使用或与const __global
地址空间限定符一起使用时有什么区别。
我已经发现这些并不是我问题的真正答案,但它们包含一些有用的信息:
如果我理解得很好,GPU 内存中的分配发生在 clCreateBuffer 函数调用中。所以我不明白的是编译器如何决定缓冲区是在常量内存(有 64 KB 的限制)还是在全局内存中。(我知道在大多数情况下,常量内存是全局内存空间的一部分。)如果它取决于地址限定符,这意味着可以使用const __global
.
__constant
和之间的性能有什么区别const __global
吗?__global 内存可能会被缓存,因此它们都是只读的并且(可能)被缓存。(来源:3.3 内存模型/全局内存部分和图 3.3; http://www.khronos.org/registry/cl/specs/opencl-1.x-latest.pdf#page=24)