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