1. Kepler内存层次结构

Kepler 架构支持统一内存加载和存储请求,每个 SMX 多处理器有一个 L1缓存、共享内存、L2 Cache和片上DRAM内存。此外,KeplerGK110 还为编译器指示为只读的数据增设一个新的只读数据缓存,如下图所示。
NVIDIA GPU架构与原理分析(七)——Kepler GPU 内存子系统-LMLPHP

2. 64 KB 可配置共享内存和 L1 缓存

在 KeplerGK110 架构中,每个 SMX 有 64KB 的片上存储器,可配置为 48 KB 的 共享内存和 16 KB 的 L1缓存,或配置为 16 KB 的共享内存和48KB 的 L1 缓存,此外还支持共享内存和 L1缓存之间以 32KB/32KB 划分。

3. 48KB 只读‐数据缓存

除 L1 缓存之外,Kepler为只读数据引入 48KB 缓存。在 Fermi 时代,该缓存只能由纹理单元访问。使用只读的路径好处极大,因为它使负载和工作组的影响远离共享/L1缓存路径。此外,其他情况下,只读数据缓存更高的带宽支持全速非对齐内存访问模式。该路径的使用是由编译器自动管理(通过参数 C99 访问任何变量或称为常量的数据结构)。标准关键字 “const_restrict” 将被编译器标记以通过只读数据缓存加载。

4. 改进的 L2 缓存

Kepler GK110 GPU 具有 1536KB的专用 L2 缓存内存,是Fermi架构中 L2 的 2 倍。L2 缓存是 SMX 单元之间主要数据统一点,处理所有加载、存储和纹理请求并提供跨 GPU 之间有效、高速的数据共享。Kepler 上的 L2缓存提供的每时钟带宽是 Fermi 中的 2 倍。

5. 内存保护支持

Kepler的注册文件、共享内存、L1 缓存、L2 缓存和 DRAM 内存受单错纠正双错检测 (SECDED) ECC 代码保护。此外,只读的数据缓存‐通过奇偶校验支持单错纠正,在奇偶校验错误的情况下,缓存单元自动失效,迫使从 L2 读取正确的数据。 ECC 校验位从 DRAM 获取必定消耗一定量的带宽,这会导致启用 ECC和停用 ECC的运算之间的差异,尤其对于内存带宽敏感的应用程序。基于 Fermi 的经验,Kepler GK110 对 ECC 校验位获取处理进行了几项优化。

6. Dynamic Parallelism

Dynamic Parallelism 是 Kepler GK110 引入的新功能,能够让 GPU 在无需 CPU 干预的情况下,通过专用加速硬件路径为自己创建新的任务,对结果同步,并控制这项任务的调度。

在 KeplerGK110中,任何一个内核都可以启动另一个内核,并创建处理额外的工作所需的必要流程、事件以及管理依赖,而无需主机 CPU 的干预。该架构可以为其他任务释放系统 CPU资源,或可以用功能少的 CPU 配置系统实现处理相同的工作负载。

NVIDIA GPU架构与原理分析(七)——Kepler GPU 内存子系统-LMLPHP

7. HyperQ

Hyper‐Q 允许 32 个并发,硬件管理的连接( 对比 Fermi 的单一连接),增加了主机和GPU 中 CUDAWork Distributor (CWD)逻辑之间的连接总数(工作队列)。Hyper‐Q允许来自多个 CUDA流、多个消息传递接口(MPI)进程,甚至是进程内多个线程的单独连接。以前遇到跨任务虚假串行化任务的应用程序,限制了GPU 的利用率,而现在无需改变任何现有代码,性能就能得到 32 倍的大幅度提升。

NVIDIA GPU架构与原理分析(七)——Kepler GPU 内存子系统-LMLPHP

每个 CUDA 流在其自己硬件工作队列管理,优化流间的依赖关系,一个流中的运算将不再阻塞其他流,使得流能够同时执行,无需特别定制的启动顺序,消除了可能的虚假依赖。Hyper‐Q 避免了虚假依赖,大大提高了 MPI 进程间共享 GPU 的效率。

NVIDIA GPU架构与原理分析(七)——Kepler GPU 内存子系统-LMLPHP

    HyperQ CUDA 流一起工作:左侧显示 Fermi 模式,仅 (C,P) (R,X) 可以同时运行,因为单个硬件工作队列导致的流内依赖。Kepler HyperQ 模式允许所有流使用单独的工作队列同时运行。

8. Grid Management Unit ‐ 有效地保持 GPU 的利用率

Kepler 中,Grid 可从 CPU 启动,就和 Fermi 的情况一样,但是新 Grid还可通过编程由 CUDA 在 Kepler SMX单元中创建。要管理 CUDA 创建的 Grid 和主机生成的 Grid,在 KeplerGK110 中引入新 Grid Management Unit(GMU)。该控制单元管理并优先化传送到 CWD(CUDA Work Distributor) 要发送到 SMX 单元执行的 Grid。

Kepler 中的 CWD 保留准备好调度的 Grid,并能调度 32 个活跃的 Grid,这是 Fermi CWD 容量的两倍。KeplerCWD 通过双向链接进行通信,允许 GMU 暂停新 Grid 的调度并保留挂起和暂停的 Grid,直到需要。GMU 也有到 Kepler SMX 单元的直接连接,允许 Grid 通过 DynamicParallelism 在 GPU 上启动其他工作,以将新工作传回到GMU 进行优先化和调度

NVIDIA GPU架构与原理分析(七)——Kepler GPU 内存子系统-LMLPHP

重新设计的 Kepler HOST GPU 的工作流显示新 Grid Management Unit,允许其管理主动调度的 Grid、暂停调度、保留挂起和暂停的 Grid

08-29 03:37