Nvidia GPU的浮点计算能力(FP64/FP32/FP16)

转自:http://weibo.com/ttarticle/p/show?id=2309403987017473113077服务器

​​其实说到浮点计算能力,首先得区分不一样精度的浮点数,虽然Linpack测试里只关心双精度的浮点计算能力,但在其余领域,有时候反而会更加关注单精度甚至是半精度的浮点计算能力。架构

半精度、单精度、双精度这些概念是在IEEE 754标准里定义的,浮点计数是利用浮动小数点的方式使用不一样长度的二进制来表示一个数字,与之对应的是定点数。一样的长度下浮点数能表达的数字范围相比定点数更大,但浮点数并不能精确表达全部实数,而只能采用更加接近的不一样精度来表达。单精度的浮点数中采用4个字节也就是32位二进制来表达一个数字,双精度浮点数采用8个字节也就是64bits来表达,固然半精度浮点数也就是采用16bits了。由于采用不一样位数的浮点数的表达精度不同,因此形成的计算偏差也不同,对于须要处理的数字范围大并且须要精确计算的科学计算来讲,就要求采用双精度浮点数,而对于常见的多媒体和图形处理计算,32位的单精度浮点计算已经足够了,对于要求精度更低的机器学习等一些应用来讲,半精度16位浮点数就能够甚至8位浮点数就已经够用了。机器学习

CPU和GPU最大的不一样在于内部计算单元数量的差别以及处理方式的不一样,CPU内部的核心数较少并且设计上更倾向于顺序串行处理数据,GPU则由于只须要支持相对单一的数据类型和计算方式,因此计算单元较小但数量更多并且更倾向于并行处理数据。一个简单的比较是如今的Intel CPU最多也就支持24核但GPU则动不动就支持几千个核了。
性能

CPU vs GPUCPU vs GPU学习

对于浮点计算来讲,CPU能够同时支持不一样精度的浮点运算,但在GPU里针对单精度和双精度就须要各自独立的计算单元,通常在GPU里支持单精度运算的Single Precision ALU称之为FP32 core或简称core,而把用做双精度运算的Double Precision ALU称之为DP unit或者FP64 core,在Nvidia不一样架构不一样型号的GPU之间,这二者数量的比例差别很大。测试

Nvidia GPU Architecture evolutionNvidia GPU Architecture evolution优化

在第三代的Kepler架构里,FP64单元和FP32单元的比例是1:3或者1:24
spa

第四代的Maxwell架构里,这个比例降低到了只有1:32设计

第五代的Pascal架构里,这个比例又提升到了1:2,但低端型号里仍然保持为1:32blog

这种比例在这些GPU的架构图表现也很是明显,好比下面Tesla P100采用的GP100架构图中,用黄色标记的DP Unit和绿色的Core比例很明显就是1:2,因此P100的单精度性能和双精度性能也相差了一倍。

Nvidia Pascal P100 ArchitectureNvidia Pascal P100 Architecture

GPU的浮点计算理论峰值能力测试跟CPU的计算方式基本同样,

理论峰值 = GPU芯片数量*GPU Boost主频*核心数量*单个时钟周期内能处理的浮点计算次数,

只不过在GPU里单精度和双精度的浮点计算能力须要分开计算,以最新的Tesla P100为例:

双精度理论峰值 = FP64 Cores * GPU Boost Clock * 2 = 1792 *1.48GHz*2 = 5.3 TFlops

单精度理论峰值 = FP32 cores * GPU Boost Clock * 2 = 3584 * 1.58GHz * 2 =  10.6 TFlops

由于P100还支持在一个FP32里同时进行2次FP16的半精度浮点计算,因此对于半精度的理论峰值更是单精度浮点数计算能力的两倍也就是达到21.2TFlops 。

Nvidia的Tesla P100基本也表明了现在GPU的最强性能,双精度5.3TFlops的计算能力也确实能秒掉采用Intel最高端E7 v4 CPU的四路X86服务器了,虽然这个理论峰值计算里面采用的GPU核心频率是Boost后的主频,相比通常计算CPU理论峰值计算能力时采用的基本主频来讲并不太公平,但即便去掉Boost后提高的11%性能,单个Tesla P100的浮点计算能力也仍是超过当前最高端的4路E7 v4服务器的3TFlops 了。

Tesla P100是Tesla系列里面最新的产品,相比前两代采用Kepler架构的K40和Maxwell架构的M40两款产品来讲,P100不只在单精度浮点计算性能超过前两代产品,双精度浮点性能相比Kepler更有3倍多的提高,相比Maxwell就更是高到不知道哪里去了。这三者详细的参数对比能够看下表

K40 vs M40 vs P100K40 vs M40 vs P100

Nvidia的GPU产品主要分红3个系列产品,分别面向不一样的应用类型和用户群体,这三个系列产品分别是:

1.主要面向3D游戏应用的GeForce系列,几个高端型号分别是GTX1080、Titan X和GTX980,分别采用最新的Pascal架构和Maxwell架构,由于面向游戏玩家,对双精度计算能力没有需求,因此双精度计算单元只有单精度计算单元的1/32,但同时也由于受众群体较大,出货量也大,单价相比采用相同架构的Tesla系列产品要便宜不少,也常常被用于机器学习

Nvidia GeForceNvidia GeForce

2.面向专业图形工做站应用的Quadro系列,主要是针对CAD、3DMaxs、Maya这一类的设计软件作过驱动层的优化,由于针对专业用户人群,出货量少,因此采用相同架构的Quadro售价比GeForce高出许多,也不多有人会拿它去用做别的用途

3.专用GPU加速计算的Tesla系列,Tesla本是第一代产品的架构名称,后来演变成了这个系列产品的名称了,最新的第五代架构名为Pascal,对应的产品型号就是前面提到的P100。而采用前两代架构Kepler和Maxwell的产品目前也还在销售,分别对应K系列和M系列的产品,目前市面上常见的也就是K40/K80、M4/M40/M60等几个型号。K系列更适合用做HPC科学计算,M系列则更适合机器学习用途。

另外Nvidia还有一个专门针对虚拟化环境应用的GRID GPU产品,目前只有K1和K2两个型号,一样采用Kepler架构,实现了GPU的硬件虚拟化,可让多个用户共享使用同一张GPU卡,适用于对3D性能有要求的VDI或云环境下多租户的GPU加速计算场景。K1上集成了4颗入门级的Kepler GPU,支持的CUDA核心数量较少只有768核,但提供更大的总显存容量16GB,K2则集成了2颗高端的Kepler GPU,支持3072个CUDA核心数,显存容量虽然较少只有8GB但由于采用GDDR5相比K1的DDR3提供更高的带宽能力。

Nvidia GRID K1&K2Nvidia GRID K1&K2

以二者中性能更好的K2来看,使用了2颗Kepler GK104 的GPU芯片,每一个GK104的GPU内含1536个FP32 CUDA Core和64个FP64  Units (24:1)

单精度浮点数 理论峰值 = 2 GPU * 1536 FP32 Core * 2 * 745MHz  = 4.58TFlops

双精度浮点数 理论峰值 = 2 GPU * 64 FP64 core * 2 * 745MHz = 0.19TFlops