本地(共享)内存是如何实际分配的?

Posted

技术标签:

【中文标题】本地(共享)内存是如何实际分配的?【英文标题】:How Local(shared) memory is actually allocated? 【发布时间】:2016-10-26 14:34:13 【问题描述】:

作为并行计算的抽象概念,本地(共享)内存按线程块 (CUDA)/工作组 (OpenCL) 分配,并在同一线程块 (CUDA)/工作组 (OpenCL) 中的所有线程之间共享。

它是如何实际分配的?它是由块/组的第一个线程分配的,还是在内存控制器创建块之前分配的?或者是其他东西 ?

【问题讨论】:

@DarkZeros:该评论可能是一个足够的答案,如果您愿意将其添加为一个 @DarkZeros 谢谢,这解释得很好 【参考方案1】:

OpenCL 认为“本地内存”是:

仅在内核执行期间可用的内存,仅由同一工作组的元素共享。每个工作组只能看到他们的本地内存。 内存使用情况在编译时已知且有限。

它与 CPU / 多核系统中的寄存器或 L1/L2 缓存非常相似。编译器了解目标 CPU 的寄存器并相应地进行规划。 当调度程序将工作组调度到硬件资源时,将始终确保每个工作组都有足够的内存。

您可以将内核执行中的本地内存视为指向已分配内存的指针,类似于寄存器或私有内存

【讨论】:

以上是关于本地(共享)内存是如何实际分配的?的主要内容,如果未能解决你的问题,请参考以下文章

垃圾收集器与内存分配策略

JVM学习-之对象的创建和内存分配

聊聊JVM Young Gen(年轻代)Eden区的线程本地分配缓冲区-TLAB(Thread Local Allocation Buffer)

“共享内存模型”与“消息传递模型”

Java中的内存分配与垃圾回收

共享内存——如何在本地没有句柄的两个地方互传数据