【问题标题】:What are the lifetimes for CUDA constant memory?CUDA 常量内存的寿命是多少?
【发布时间】:2017-08-11 03:10:16
【问题描述】:

我很难理解对 CUDA 常量内存的限制。

  1. 为什么我们不能在运行时分配__constant__ 内存?为什么需要在近全局范围的固定大小变量中进行编译?

  2. 什么时候实际加载或卸载常量内存?我知道cudaMemcpytoSymbol 用于加载特定的数组,但是每个内核是否使用自己的常量内存分配?相关的是,绑定和解除绑定是否有类似于绑定纹理的旧成本(也就是使用纹理会为每次内核调用增加成本)的成本?

  3. 常量内存驻留在芯片的什么位置?

我主要对与 Pascal 和 Volta 相关的答案感兴趣。

【问题讨论】:

  • 不,每个内核都不会获得或使用自己分配的__constant__ 内存。没有绑定/解除绑定成本。 __constant__ 内存是一个逻辑空间。物理支持由 DRAM 的特定区域和常量缓存组成。常量缓存是每个 SM 资源。 DRAM 是一种片外资源。逻辑空间的最大大小为 64KB。这并不意味着每个 SM 缓存是 64KB。常量缓存的实际大小没有很好地指定,并且可能会从一个 GPU 架构更改为另一个,但每个 SM 大约为 8KB。
  • @RobertCrovella 那么,什么时候卸载常量缓存?是否为每次调用加载/卸载?除其他外,我担心代码中不相关部分中存在一些巨大的 __constant__ 对象,可能会超过 const 缓存大小。
  • @RobertCrovella 另外,我理解它是一个逻辑空间,但我不确定到该空间的物理映射中还有什么(试图围绕常量缓存的一些限制)
  • 常量缓存,就像我熟悉的大多数其他缓存一样,在您访问 (__constant__) 内存时被加载。大多数缓存不是这样工作的吗?我熟悉的缓存没有明确的“加载”或“卸载”。从程序员的角度来看,缓存在基本层面上是一个透明的实体。如果您问常量缓存是否有任何全局失效,我很确定信息没有在任何地方指定。 “未指定”的后果之一是它可能随时更改,因此今天给出的“答案”明天可能是错误的。
  • @RobertCrovella 好吧,它通过cudaMemcpytoSymbol 显式加载,所以它不像传统的缓存。当然不像 x86 缓存是神奇地“缓存”的东西。感觉更像共享内存,但有更多限制。

标签: cuda gpu-constant-memory


【解决方案1】:

按相反的顺序回答这六个问题可能最容易:

常量内存驻留在芯片的什么位置?

它没有。常量内存存储在片外静态保留的物理内存中,并通过每个 SM 缓存访问。当编译器可以识别出变量存储在 逻辑 常量内存空间中时,它将发出特定的 PTX 指令,允许通过常量缓存访问该静态内存。另请注意,在所有当前支持的架构上都有特定的保留常量内存库用于存储内核参数。

绑定和解除绑定的成本是否类似于绑定纹理的旧成本(也就是使用纹理会为每个内核调用增加成本)?

没有。但也没有“绑定”或“解除绑定”,因为保留是静态执行的。唯一的运行时成本是主机到设备的内存传输以及作为上下文建立的一部分将符号加载到上下文中的成本。

我知道cudaMemcpytoSymbol 用于加载特定数组,但每个内核是否使用自己分配的常量内存?

没有。整个 GPU 只有一个“分配”(尽管如上所述,内核参数有特定的常量内存库,所以在某种意义上你可以说常量内存有一个内核组件)。

什么时候实际加载或卸载常量内存?

这取决于您所说的“加载”和“卸载”。加载实际上是一个两阶段的过程——首先检索符号并将其加载到上下文中(如果您使用运行时 API,这是自动完成的),其次是任何用户运行时操作以通过 cudaMemcpytoSymbol 更改常量内存的内容。

为什么需要在近乎全局范围的固定大小变量中进行编译?

如前所述,常量内存基本上是 PTX 内存层次结构中的逻辑地址空间,它由 GPU DRAM 映射的有限大小保留区域反映,并且需要编译器发出特定指令以通过专用 on 统一访问芯片缓存或缓存。鉴于其静态、编译器分析驱动的性质,它在语言中的实现也将主要是静态的。

为什么我们不能在运行时分配__constant__ 内存?

主要是因为 NVIDIA 选择不公开它。但是考虑到上面列出的所有限制,我不认为这是一个非常糟糕的选择。其中一些很可能是历史性的,因为从一开始,恒定内存就一直是 CUDA 设计的一部分。几乎所有 CUDA 设计中的原始特性和功能都映射到硬件特性,这些特性是为了硬件的第一个目的而存在的,即 GPU 旨在支持的图形 API。因此,您所问的一些问题很可能与 OpenGL 或 Direct 3D 的历史特性或限制有关,但我对两者都不够熟悉,无法肯定地说。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    相关资源
    最近更新 更多