我想了解當我創建一個具有隻讀屬性的緩衝區並將其與__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實現和/或硬件架構。 –