揭秘英伟达 GPU 架构演进近十年,从费米到安培( 二 )


之前一直提到 Warp,但之前只说明了是 32 个线程,我们在这里终于开始详细说明,首先来看 Dual Warp Scheduler 的概览 。

揭秘英伟达 GPU 架构演进近十年,从费米到安培

文章插图
 
在之前的 SM 概览图以及上图里,可以注意到 SM 内有两个 Warp Scheduler 和两个 Dispatch Unit. 这意味着,同一时刻,会并发运行两个 warp,每个 warp 会被分发到一个 Cuda Core Group(16 个 CUDA Core), 或者 16 个 load/store 单元,或者 4 个 SFU 上去真正执行,且每次分发只执行 一条 指令,而 Warp Scheduler 维护了多个(比如几十个)的 Warp 状态 。
这里引入了一个核心的约束,任意时刻,一个 Warp 里的 Thread 都在执行同样的指令,对于程序员来说,观测不到一个 warp 里不同 thread 的不同执行情况 。
但是众所周知,不同线程可能会进入不同的分支,这时如何执行一样的指令?
揭秘英伟达 GPU 架构演进近十年,从费米到安培

文章插图
 
可以看上图,当发生分支时,只会执行进入该分支的线程,如果进入该分支的线程少,则会发生资源浪费 。
在 SM 概览图里,我们可以看到 SM 内 64KB 的 On-Chip Memory,其中 48KB 作为 shared memory, 16KB 作为 L1 Cache. 对于 L1 Cache 以及非 On-Chip 的 L2 Cache,其作用与 CPU 多级缓存结构中的 L1/L2 Cache 非常接近,而 Shared Memory,则是相比 CPU 的一个大区别 。无论是 CPU 还是 GPU 中的 L1/L2 Cache,一般意义上都是无法被程序员调度的,而 Shared Memory 设计出来就是让渡给程序员进行调度的片上高速缓存 。
Kepler2012 年 NVIDIA 发布了 Kepler 架构,我们直接看使用 Kepler 架构的 GTX680 概览图:
揭秘英伟达 GPU 架构演进近十年,从费米到安培

文章插图
 
可以看到,首先 SM 改名成了 SMX,但是所代表的概念没有大变化,我们先看看 SMX 的内部:
揭秘英伟达 GPU 架构演进近十年,从费米到安培

文章插图
 
还是 Fermi 中熟悉的名词,就是数量变多了很多 。
本人认为这个 Kepler 架构中最值得一提的是 GPUDirect 技术,可以绕过 CPU/System Memory,完成与本机其他 GPU 或者其他机器 GPU 的直接数据交换 。毕竟在 2021 年的当今,Bypass CPU/OS 已经是最重要加速手段之一 。
Maxwell2014 年 NVIDIA 发布了 Maxwell 架构,我们直接看架构图:
揭秘英伟达 GPU 架构演进近十年,从费米到安培

文章插图
 
可以看到,这次的 SM 改叫 SMM 了,Core 更多了,也更强大了,这里就不过多介绍了 。
Pascal2016 年 NVIDIA 发布了 Pascal 架构,这是第一个考虑 Deep Learning 的架构,也是一个值得大书笔墨的架构,首先看如下图 P100 。
揭秘英伟达 GPU 架构演进近十年,从费米到安培

文章插图
 
可以看到,还是一如既往地增加了很多 Cores, 我们细看 SM 内部:
揭秘英伟达 GPU 架构演进近十年,从费米到安培

文章插图
 
单个 SM 只有 64 个 FP32 Cuda Cores,相比 Maxwell 的 128 和 Kepler 的 192,这个数量要少很多,并且 64 个 Cuda Cores 分为了两个区块 。需要注意的是,Register File 的大小并未减少,这意味着每个线程可以使用的寄存器更多了,而且单个 SM 也可以并发更多的 thread/warp/block. 由于 Shared Memory 并未减少,同样意味着每个线程可以使用的 Shared Memory 及其带宽都会变大 。
增加了 32 个 FP64 Cuda Cores, 也就是上图的 DP Unit. 此外 FP32 Cuda Core 同时具备处理 FP16 的能力,且吞吐率是 FP32 的两倍,这却是为了 Deep Learning 准备的了 。
这个版本引入了一个很重要的东西:NVLink 。
随着单 GPU 的计算能力越来越难以应对深度学习对算力的需求,人们自然而然开始用多个 GPU 去解决问题 。从单机多 GPU 到多机多 GPU,这当中对 GPU 互连的带宽的需求也越来越多 。多机之间,采用 InfiniBand 和 100Gb Ethernet 去通信,在单机内,特别是从单机单 GPU 到达单机 8GPU 以后,PCIe 的带宽往往就成为了瓶颈 。为了解决这个问题,NVIDIA 提供了 NVLink 用以单机内多 GPU 内的点到点通信,带宽达到了 160GB/s, 大约 5 倍于 PCIe 3 x 16. 下图是一个典型的单机 8 P100 拓扑 。
揭秘英伟达 GPU 架构演进近十年,从费米到安培

文章插图
 
一些特殊的 CPU 也可以通过 NVLink 与 GPU 连接,比如 IBM 的 POWER8 。
Volta2017 年 NVIDIA 发布了 Volta 架构,这个架构可以说是完全以 Deep Learning 为核心了,相比 Pascal 也是一个大版本 。首先还是一如既往地增加了 SM/Core, 我们就直接看单个 SM 内部吧 。


推荐阅读