OpenCL的内存架构:本地/全局/常量/私有memory与物理GPU的内存和缓存之间是否存在直接关系?例如,具有1GB内存/L1缓存/L2缓存的GPU卡与本地/全局...内存是否相关? 或者,本地/常量/私有内存是从全局内存中分配的吗? -谢谢
OpenCL并没有真正讨论内存缓存。大多数现代显卡确实有一些用于全局内存的缓存协议,但旧显卡不能保证拥有这些功能。以下是不同内存的概述。私有内存 - 每个工作项都保留为寄存器的内存。GPU每个计算单元都有非常大的寄存器文件。但如果需要,此内存可以溢出到本地内存。创建变量时,默认情况下分配私有内存。本地内存 - 工作组本地共享的内存。此内存系统通常位于计算单元本身上,并且其他工作组无法读取或写入该内存。在GPU架构上,此内存通常具有非常低的延迟(在CPU架构上,此内存只是您的系统内存的一部分)。此内存通常用作全局内存的手动高速缓存。使用__local属性指定本地内存。常量内存 - 全局内存的一部分,但只读,因此可以积极缓存。使用__constant定义此类型的内存。全局内存 - 这是GPU的主要内存。使用__global将内存放置到全局内存空间中。