OpenCL内存架构与GPU的物理内存/缓存(L1 / L2 ......)之间的关系?

时间:2012-04-14 20:07:37

标签: memory opencl gpu-programming

OpenCL内存架构之间是否有任何直接关系:

本地/全球/常数/私人memory

物理GPU的内存和缓存。 例如,具有1GB内存/ L1缓存/ L2缓存的GPU卡。这些与本地/全球......记忆有关吗?

或者是从全局内存分配的本地/常量/专用内存? -Thanks

1 个答案:

答案 0 :(得分:5)

OpenCL并没有真正讨论缓存内存。大多数现代显卡都有一些用于全局内存的缓存协议,但在旧卡中无法保证这些协议。然而,这里是对不同记忆的概述。

私有内存 - 此内存作为每个工作项的寄存器保存。 GPU每个计算单元具​​有非常大的寄存器文件。但是,如果需要,此内存可能会溢出到本地内存中。创建变量时,默认情况下会分配专用内存。

本地内存 - 工作组本地和共享的内存。此内存系统通常位于计算单元本身上,无法由其他工作组读取或写入。这种内存通常在GPU架构上具有非常低的延迟(在CPU架构上,这个内存只是系统内存的一部分)。此内存通常用作全局内存的手动缓存。本地内存由__local属性指定。

常量内存 - 部分全局内存,但只读,因此可以积极缓存。 __constant用于定义此类型的内存。

全局内存 - 这是GPU的主内存。 __global用于将内存放入全局内存空间。