Mali/Adreno GPU 上存在 OpenCL 本地内存

OpenCL local memory exists on Mali/Adreno GPU

  1. OpenCL 本地内存是否真的存在于 Mali/Adreno GPU 上,还是仅存在于某些特殊手机中?
  2. 如果它们存在,在什么情况下我们应该使用本地内存,例如GEMM/Conv或其他cl内核?

有趣的问题。 OpenCL 定义了许多概念性内存,包括本地内存、常量内存、全局内存和私有内存。正如您所知,在物理上,这些存储器的硬件​​实现依赖于硬件。例如,有些人可能会使用缓存或系统内存来模拟本地内存​​,而不是使用物理内存。

AFAIK,ARM Mali GPU 没有 有本地内存,而 Qualcomm Adreno GPU 本地内存。

例如下面table显示了OpenCL中每个内存的定义及其 Adreno GPU 中的相对延迟和物理位置引用自 OpenCL Optimization and Best Practices for Qualcomm Adreno GPU*


答案已更新

正如下面 SK-logic 评论的那样,Mali6xx 有一个本地内存(与缓存共享)。

内存在最近的Mali上是共享的,不是本地的,但是OpenCL还是有内存分离的概念,所以有专门的命令来保证不被拷贝。不建议使用 private/local 内存。

有关通过 Mali OpenCL 最佳使用内存的更多信息,请阅读:

https://developer.arm.com/documentation/101574/0400/Optimizing-OpenCL-for-Mali-GPUs/Optimizing-memory-allocation/About-memory-allocation?lang=en