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