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

转载 2017年10月16日 15:20:26

转自: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

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

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

这种比例在这些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


半精度浮点数(fp16,Half-precision floating-point)

今天看NVIDIA的帕斯卡架构介绍时,看到了fp16浮点数格式,以前没见过,想弄清楚他的格式和表示范围,几经查找,终于搞懂了。主要参考:fp16-wiki          如图,一个fp16数据占...
  • mc18740458059
  • mc18740458059
  • 2016-09-05 23:16:21
  • 5071

让Faster R-CNN支持TX1的fp16(half float, float16)特性

为什么要用float16? 一句话,float16的运算速度是float32运算速度的2倍。nVidia说的,数据不对不要怪我,(≖ ‿ ≖)✧ 在说一下缺点,也是一句话,精度损失了。(卧槽,废话,(...
  • JiaJunLee
  • JiaJunLee
  • 2016-02-24 23:28:12
  • 5872

程序员必知之浮点数运算原理详解

导读:浮点数运算是一个非常有技术含量的话题,不太容易掌握。许多程序员都不清楚使用==操作符比较float/double类型的话到底出现什么问题。 许多人使用float/double进行货币计算时经常会...
  • tercel_zhang
  • tercel_zhang
  • 2016-09-14 14:30:05
  • 26257

ARM 浮点运算详解

一:早期ARM上的浮点模拟器:早期的ARM没有协处理器,所以浮点运算是由CPU来模拟的,即所需浮点运算均在浮点运算模拟器(float math emulation)上进行,需要的浮点运算,常要耗费数千...
  • sydnash
  • sydnash
  • 2011-04-27 15:19:00
  • 12681

详解浮点运算的定点编程

我们使用的处理器一般情况下,要么直接支持硬件的浮点运算,比如某些带有FPU的器件,要么就只支持定点运算,此时对浮点数的处理需要通过编译器来完成。在支持硬件浮点处理的器件上,对浮点运算的编程最快捷的方法...
  • nameisjinjianghua
  • nameisjinjianghua
  • 2017-08-05 12:31:32
  • 611

浮点运算

以前就听说过浮点运算,但是只是听说过名称而已,很少运用,今天因为写程序需要用到浮点运算的运算命令,瞬间头晕了,这是什么玩意儿,说好的实数运算怎么在计算机上变成这么复杂的东西,今天就总结一下平时需要用到...
  • qq_22642239
  • qq_22642239
  • 2016-04-08 16:25:03
  • 586

CPU整数运算与浮点运算分别决定其什么方面性能?

由CPU benchmark测试集可以了解到CPU整数运算和浮点运算的应用场景。简单说, 压缩算法、排序算法等大量应用,都是依赖CPU整数运算性能。 视频编码解码、数字图像处理、3D游戏等,依赖C...
  • u011729865
  • u011729865
  • 2017-05-27 22:53:41
  • 1759

FPGA中浮点运算实现方法——定标

有些FPGA中是不能直接对浮点数进行操作的,只能采用定点数进行数值运算。对于FPGA而言,参与数学运算的书就是16位的整型数,但如果数学运算中出现小数怎么办呢?要知道,FPGA对小数是无能为力的,一种...
  • yuan1164345228
  • yuan1164345228
  • 2014-10-04 10:55:39
  • 6765

NVIDIA GPU 运算能力列表

FROM: https://developer.nvidia.com/cuda-gpus CUDA GPUs NVIDIA GPUs power millions of desktops,...
  • Real_Myth
  • Real_Myth
  • 2015-03-16 16:34:18
  • 39141

不同显卡(GPU)浮点数计算能力

1、SP总数=TPC&GPC数量*每个TPC中SM数量*每个SM中的SP数量; TPC和GPC是介于整个GPU和流处理器簇之间的硬件单元,用于执行CUDA计算。特斯拉架构硬件将SM组合成TPC(纹理处...
  • ZIV555
  • ZIV555
  • 2016-06-24 16:59:15
  • 6802
收藏助手
不良信息举报
您举报文章:Nvidia GPU的浮点计算能力(FP64/FP32/FP16)
举报原因:
原因补充:

(最多只允许输入30个字)