我想了解当我创建一个具有只读属性的缓冲区并将其与__constant
地址空间限定符一起用于内核或与const __global
地址空间一起使用时预选赛。OpenCL:__constant内存和const之间的区别__global内存
我已经找到了那些不是真正为我的问题的答案,但它们包含一些有用的信息:
http://www.khronos.org/message_boards/showthread.php/6466-__constant-vs-const-__global
Is the access performance of __constant memory as same as __global memory on OpenCL
如果我理解好,GPU内存中的分配发生在clCreateBuffer函数调用中。所以我不明白的是编译器如何决定缓冲区是在常量内存(它有一个64 KB的限制)还是在全局内存中。 (我知道在大多数情况下,常量内存是全局内存空间的一部分。)如果它取决于地址限定符,则意味着使用const __global
可以忽略64 KB限制。
__constant
和const __global
之间的性能有任何区别吗? __global内存可能被缓存,所以它们都是只读的并且(可能)被缓存。 (来源:3.3内存模型/全局内存部分和图3.3; http://www.khronos.org/registry/cl/specs/opencl-1.x-latest.pdf#page=24)
我的猜测是依赖于OpenCL实现和/或硬件架构。 –