NVIDIA GPU技术和架构演进(干货)
共 10409字,需浏览 21分钟
· 2021-03-22
去年,NVIDIA (NV) 发布了Amper新架构的GPU,NVIDIA GPU架构的发展类似Intel的CPU,针对不同场景和技术革新,经历了不同架构的演进。
内容转自:智能计算芯世界
Kepler架构里,FP64单元和FP32单元的比例是1:3或者1:24;K80。 Maxwell架构里,这个比例下降到了只有1:32;型号M10/M40。 Pascal架构里,这个比例又提高到了1:2(P100)但低端型号里仍然保持为1:32,型号Tesla P40、GTX 1080TI/Titan XP、Quadro GP100/P6000/P5000 Votal架构里,FP64单元和FP32单元的比例是1:2;型号有Tesla V100、GeForceTiTan V、Quadro GV100专业卡。 Turing架构里,一个SM中拥有64个半精度,64个单精度,8个Tensor core,1个RT core。 Ampere架构的设计突破,在8代GPU架构中提供了该公司迄今为止最大的性能飞跃,统一了AI培训和推理,并将性能提高了20倍。A100是通用的工作负载加速器,还用于数据分析,科学计算和云图形。
NVIDIA GPU架构相关文章:
1、Fermi
2 个 Warp Scheduler/Dispatch Unit 32 个 CUDA Core(分在两条 lane 上,每条分别是 16 个) 每个 CUDA Core 里面是 1 个单精浮点单元(FPU)和 1 个整数单元(ALU),可以直接做 FMA 的乘累加 每个 cycle 可以跑 16 个双精的 FMA 16 个 LD/ST Unit 4 个 SFU
我的理解是做一个双精 FMA 需要用到两个 CUDA Core?所以是 32 / 2 = 16
2、Kepler
4 个 Warp Scheduler,8 个 Dispatch Unit CUDA Core 增加到 192 个(4 * 3 * 16,每条 lane 上还是 16 个) 单独分出来 64 个(4 * 16,每条 lane 上 16 个)双精运算单元。 SFU 和 LD/ST Unit 分别也都增加到 32 个
3、Maxwell
4 个 Warp Scheduler,8 个 Dispatch Unit 128 个 CUDA Core(4 * 32) 32 个 SFU 和 LD/ST Unit(4 * 8)
1 个 Warp Scheduler 和 2 个 Dispatch Unit 32 个 CUDA Core 8 个 SFU 和 LD/ST Unit
也许是觉得认为只有少数 HPC 科学计算才用的上的双精单元在这代上不太有必要吧。
4、Pascal
Compute Capability:6.0, 6.1, 6.2;这一代可以说是有了质的飞跃,还是先从 SM 开始:
2 个 Warp Scheduler,4 个 Dispatch Unit 64 个 CUDA Core(2 * 32) 32 个双精浮点单元(2 * 16,双精回来了) 16 个 SFU 和 LD/ST Unit(2 * 8)
1 个 Warp Scheduler 和 2 个 Dispatch Unit 32 个 CUDA Core 多了 16 个 DP Unit 8 个 SFU 和 LD/ST Unit
单个 Process Block 的流水线增加到 6 条 lane 了?
面向 Deep Learning 做了一些专门的定制(CuDNN 等等) 除了 PCIE 以外,P100 还有 NVLink 版,单机卡间通信带宽逆天了,多机之间也能通过 Infiniband 进一步扩展 NVLink(GPUDirect) 然后 NV 现在已经把 Infiniband 行业的龙头 Mellanox 给收购了…… 说不定那时候就已经有这个想法了呢 P100 上把 GDDR5 换成了 HBM2,Global Memory 的带宽涨了一个数量级 16nm FinFET 工艺,性能提升一大截,功耗还能控制住不怎么增加 Unified Memory,支持把 GPU 的显存和 CPU 的内存统一到一个相同的地址空间,驱动层自己会做好 DtoH 和 HtoD 的内存拷贝,编程模型上更加友好了
5、Volta
4 个 Warp Scheduler,4 个 Dispatch Unit(发现不需要配 2 个 Dispatch 给每个 Scheduler 了?白皮书里面倒是没有对这个的解释) 64 个 FP32 Core(4 * 16) 64 个 INT32 Core(4 * 16) 32 个 FP64 Core(4 * 8) 8 个 Tensor Core (4 * 2) 32 个 LD/ST Unit(4 * 8) 4 个 SFU(发现对特殊计算的需求减少了?)
1 个 Warp Scheduler,1 个 Dispatch Unit 16 个 FP32 Core 16 个 INT32 Core 8 个 FP64 Core 2 个 Tensor Core 8 个 LD/ST Unit 1 个 SFU
Tensor Core:最重大的改动不用说也知道是 Tensor Core 了。
所以 FP16 in -> FP16 out 和 FP16 in -> FP32 out 哪一个性能更好呢…
我没有测过,但是猜测可能默认结果是 FP32 out 更快?反而是输出 FP16 需要从 FP32 再转一次?
第一个参数 Use 是这个 fragment 在 FMA 运算里面的角色,可选项有:matrix_a、matrix_b和 accumulator,含义就是字面意思,也没什么需要再解释的了。 m,n,k,T 是这一个 warp 里面要处理的的 FMA 子矩阵的形状以及数据类型,不同的 Capability 能够支持的组合还不太一样,比如最基础的就是 a、b 都是 __half,accumulator 是 float,然后 m、n、k 都是 16。
m、n、k 的组合不是任意的,能支持的种类跟 Capability 直接相关,比如 V100 和后来出的 T4 能够支持的就不一样,具体可以在 Programming Guide 里面查。最后这个 Layout 可选项有两个 row_major 和 col_major,代表这个 fragment 在内存里面实际存储的行列主序情况。
看起来确实相当麻烦,不过想想可能好像也还好,本来如果要写出性能很好的 CUDA 代码来,每个 warp 要算多少东西也是需要精细考虑清楚的。
可能也是因为这样所以 1 个 Dispatch Unit 配 1 个 Warp Scheduler 了?因为线程指令的实现事实上更加复杂了。
所以其实最后还是同时只能执行一个分支里面的一部分,这个 upgrade 我暂时还没有想到具体的应用场景会有多常出现(上面这个带锁双向链表我觉得写在 CUDA 里面就很不常见啊…),以及会具体有多少性能收益,说不定还是原本的那种简单的设计更直接更高效一些呢。(期待一下未来的硬件里面会不会把这个恢复回去……)
以前 CUDA 编程原则里面不要写分支的那条在新架构下我觉得还是适用的,不写分支就不会有这么多额外的麻烦要考虑了。
6、Turing
Compute Capability:7.5;TU102 GPU包含6个图像处理集群(GPC)、36个纹理处理集群(TPC)和72个流式多元处理器(SM)。
64个CUDA核心 8个Tensor核心 1个256KB寄存器堆 4个纹理单元以及96KB的L1或共享内存
7、Ampere
Compute Capability:8.0;NVIDIA A100在AI训练(半/单精度操作,FP16/32)和推理(8位整数操作,INT8)方面,GPU比Volta GPU强大20倍。在高性能计算(双精度运算,FP64)方面,NVIDIA表示GPU的速度将提高2.5倍。
8 GPCs, 8 TPCs/GPC, 2 SMs/TPC, 16 SMs/GPC, 128 SMs per full GPU 64 FP32 CUDA Cores/SM, 8192 FP32 CUDA Cores per full GPU 4第三代Tensor Cores/SM, 512第三代Tensor Cores per full GPU 6 HBM2 stacks, 12 512bit 内存控制器
7 GPCs, 7 or 8 TPCs/GPC 2 SMs/TPC, up to 16 SMs/GPC, 108 SMs 64 FP32 CUDA Cores/SM, 6912 FP32 CUDA Cores 4第三代Tensor Cores/SM, 432第三代Tensor Cores 5 HBM2 stacks,10 512bit 内存控制器
NVIDIA Ampere架构 — A100的核心是NVIDIA Ampere GPU架构,其中包含超过540亿个晶体管,使其成为世界上最大的7纳米处理器。 基于TF32的第三代张量核(Tensor Core): Tensor核心的应用使得GPU更加灵活,更快,更易于使用。TF32包括针对AI的扩展,无需进行任何代码更改即可使FP32精度的AI性能提高20倍。此外, TensorCore 现在支持FP64,相比上一代,HPC应用程序可提供多达2.5倍的计算量。 多实例(Multi-Instance)GPU — MIG是一项新技术功能,可将单个A100GPU划分为多达七个独立的GPU,因此它可以为不同大小的作业提供不同程度的计算,从而提供最佳利用率。 第三代NVIDIA NVLink —使GPU之间的高速连接速度加倍,可在服务器中提供有效的性能扩展。 结构稀疏性—这项新的效率技术利用了AI数学固有的稀疏特性来使性能提高一倍。
NVIDIA GPU架构白皮书系列,下载链接:NVIDIA GPU架构白皮书
《NVIDIA A100 Tensor Core GPU技术白皮书》
《NVIDIA Kepler GK110-GK210架构白皮书》
《NVIDIA Kepler GK110-GK210架构白皮书》
《NVIDIA Kepler GK110架构白皮书》
《NVIDIA Tesla P100技术白皮书》
《NVIDIA Tesla V100 GPU架构白皮书》
《英伟达Turing GPU 架构白皮书》
转载申明:转载本号文章请注明作者和来源,本号发布文章若存在版权等问题,请留言联系处理,谢谢。
推荐阅读
更多架构相关技术知识总结请参考“架构师全店铺技术资料打包”相关电子书(35本技术资料打包汇总详情可通过“阅读原文”获取)。
全店内容持续更新,现下单“全店铺技术资料打包(全)”,后续可享全店内容更新“免费”赠阅,价格仅收188元(原总价290元)。
温馨提示:
扫描二维码关注公众号,点击阅读原文链接获取“架构师技术全店资料打包汇总(全)”电子书资料详情。