首页 > 代码库 > Pascal GPU 架构详解
Pascal GPU 架构详解
写在前面:本文假定读者有一定 CUDA 基础。如果你对 GPU, sm_60/sm_61,CUDA 这些名词感到陌生,可以看我之前写的博客《CUDA 从入门到精通》。
1. 前言
Nvidia 在今年的 GTC( GPU Technology Conference ) 上高调宣布了 Pascal 架构——专门针对每瓦性能优化的新架构,采用 16nm 工艺。接着发布了该系列的扛鼎之作 P100 及其装进机箱后的产品 DGX-1:
Tesla P100 采用顶级大核心 GP100
GP100 参数汇总如下:
- 芯片:GP100,sm_60
- 工艺:16 nm FinFET
- 支持:双精度 FP64, 单精度 FP32, 半精度 FP16
- 功耗:250 W
- Nvidia CUDA 核心数:3584(56 SMs, 64 SPs/SM)
- GPU 时钟:Base = 1189 MHz, Maximum Boost = 1328 MHz
- PCIe:Gen 3 x16
- 显存容量:16 GB HBM2(另有 12 GB 版本)
- 显存位宽:4096 bits(另有 3072 bits 版本)
- 显存时钟:715 MHz
- 显存带宽:732 GB/s(另有 539 GB/s 版本)
浮点运算(FP16) 达到了 170 TFlops(官方宣称相当于 250 个 x86服务器),内置 7 TB 的 SSD,两颗 16 核心的 Xeon E5-2698v3 以及 512 GB 的 DDR4 内存,整机功耗 3200W,售价为129000美元(835378.2元人民币)。
看完上述配置,深刻感到这玩意是土豪套餐,不是人人都用得起。但是看看文档又不花钱,何乐而不为。
(56) Multiprocessors, ( 64) CUDA Cores/MP: 3584 CUDA Cores
- 芯片:GP104, sm_61
- 工艺:16 nm FinFET
- 支持:单精度 FP32, 整数 INT8
- 功耗:180 W
- Nvidia CUDA 核心数:2560(20 SMs, 128 SPs/SM)
- GPU 时钟:Base = 1607 MHz, Maximum Boost = 1733 MHz
- PCIe:Gen 3 x16
- 显存容量:8 GB GDDR5X
- 显存位宽:256 bits
- 显存时钟:1251 MHz
- 显存带宽:320 GB/s
整个 GP104 芯片内置 4 个 GPC(图形处理簇),共计 20 个 SM(流多处理器),以及 8 个内存控制器。
细看每个 SM 架构如下图:
每个 GP104 SM 包括 128 CUDA core,没有 DPUnit。每个 CUDA core 支持 dp2a(双路 16 bit 整数乘累加指令)、dp4a(四路 8 bit 整数乘累加指令)。因此, GP104 十分适合做定点乘加计算,这在深度学习的模型定点化实现压缩方面有用途。
每个 GP104 SM 还内置 96 KB 共享内存、48 KB L1 缓存、256 KB 寄存器、8 个纹理单元。
4. Pascal GPU 选型
很多深度学习爱好者可能都想自己攒一台机器用于模型训练、调参,而 Nvidia 今年推出的 Pascal 架构消费级 GPU 也十分吸引眼球。这里我们做一个简单的选型对比,希望能帮到那些仍然犹豫买哪一款的朋友。
从上表对比来看,GTX1080 应该是个不错的选择,差不多人民币 5000 元左右就能买到 9.0 TFLOPS 计算能力。而更高端的 Titan X(Pascal) 则需要付出多一倍的价格,仅换得额外 2.0 TFLOPS 计算能力,其实还不如买两块 GTX1080 划算。
GTX1070 和 GTX1080 的 GPU 芯片均为 GP104。但 GTX1070 使用 GDDR5,而 GTX1080 使用 GDDR5X。
对于 GP102、GP106 架构,从目前还没看到公布的架构资料,但根据一些指标来看和 GP104 差别不大。如果官方公布架构细节,本文也会随时更新。
5. 使用 Pascal 架构 GPU 时的注意事项
Pascal 架构是全新的,所以需要使用全新的开发环境。安装 CUDA 至少要 8.0【3】,cuDNN 则至少要 v5.1.5【4】。
在编译 Caffe 时,应当在 Makefile.config 时找到如下语句:
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 -gencode arch=compute_20,code=sm_21 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_50,code=compute_50
改为:
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 -gencode arch=compute_20,code=sm_21 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_50,code=compute_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61
为了编译速度更快,可以删掉旧的计算架构,例如你编译用于 GTX1080 的代码时,可以改为:
CUDA_ARCH := -gencode arch=compute_61,code=sm_61
只是一旦这么做,你的代码就只能运行在 6.1 及以上架构,而不能直接运行在更低版本架构(如 Maxwell、Kepler、Fermi 等)。
6. 参考文献
【1】 Whitepaper NVIDIA Tesla P100:The Most Advanced Datacenter Accelerator Ever Built Featuring Pascal GP100, the World’s Fastest GPU
【2】 Whitepaper NVIDIA GeForce GTX 1080:Gaming Perfected
【3】 https://devblogs.nvidia.com/parallelforall/cuda-8-features-revealed/
【4】 https://developer.nvidia.com/rdp/cudnn-download
Pascal GPU 架构详解