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

3

OpenCL的内存架构:本地/全局/常量/私有memory与物理GPU的内存和缓存之间是否存在直接关系?例如,具有1GB内存/L1缓存/L2缓存的GPU卡与本地/全局...内存是否相关?

或者,本地/常量/私有内存是从全局内存中分配的吗? -谢谢

1个回答

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

非常感谢,您能否告诉我在现代GPU中是否可以分配全局内存大小50%的私有/本地内存? - Maiss
1
@Maiss:对于现代GPU,每个计算单元的本地内存在16KB到64KB之间(据我所知不会溢出到全局内存)。因此,不,你不能。 - Grizzly
我已经阅读了各种来源,称私有内存可以是片外DRAM,这将使其成为最慢的,但最近的GPU将此内存缓存到寄存器/L1中,这是内存层次结构中最高的。有人能确认一下吗?是否有一种方法来确定您的私有内存的性质?似乎它可能是最慢的(片外)或最快的可能性(寄存器)。 - JDS
@YoungMoney 我从未听说过GPU的私有内存存在于片外DRAM上。如果有缓存而不使用它,这似乎非常违反直觉。所有现代GPU都具有用于私有内存的L1 / L2缓存。私有内存可以在片外DRAM中通过寄存器溢出的方式实现,但只有在强制执行时才会发生(因为GPU将仅分配较少的工作组到计算单元以避免溢出)。 - KLee1
AMD显卡的一些手册中提到的LDS是什么?可能是__local吗? - huseyin tugrul buyukisik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接