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

How Local(shared) memory is actually allocated?

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

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

OpenCL 认为 "Local Memory" 是:

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

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

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