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

文章讨论了浮点计算在不同精度(半精度、单精度、双精度)下的应用,并对比了CPU和GPU在处理这些计算上的差异。GPU通常拥有更多的计算单元,适合并行处理,其在单精度计算上表现出色,而在双精度计算上相对较弱。Nvidia的GPU产品线(GeForce,Quadro,Tesla)针对不同应用场景(游戏、专业图形、高性能计算)有不同的优化和配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载:

https://blog.csdn.net/qq_41972382/article/details/102498010

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

对于浮点计算来说,CPU可以同时支持不同精度的浮点运算,但在GPU里针对单精度和双精度就需要各自独立的计算单元,一般在GPU里支持单精度运算的Single Precision ALU称之为FP32 core或简称core,而把用作双精度运算的Double Precision ALU称之为DP unit或者FP64 core,在Nvidia不同架构不同型号的GPU之间,这两者数量的比例差异很大。

Nvidia 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 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的GPU产品主要分成3个系列产品,分别面向不同的应用类型和用户群体,这三个系列产品分别是:

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

Nvidia 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&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


 

INT8、FP16FP32是不同的数据类型用于表示数字的精度存储方式。 INT8是指八位整型数据类型,占用1个字节,用8位二进制表示一个数字,它是一种定点计方式,适用于对整数进行运,虽然精度较低,但数据量小、能耗低,计速度相对更快,适合在移动终端进行AI计FP16是指半精度浮点数数据类型,占用2个字节,用16位二进制表示一个数字,其中1位为符号位,5位为指数位,10位为有效数字位。与FP32相比,FP16的访存消耗仅为1/2,因此在一些GPU中可以加速计速度,但也容易造成溢出。 FP32是指单精度浮点数数据类型,占用4个字节,用32位二进制表示一个数字,其中1位为符号位,8位为指数位,23位为尾数位。FP32精度相对较高,但相应地需要更多的存储空间资源。 因此,INT8适用于对整数进行计的场景,FP16适用于移动终端等资源受限的场景,而FP32适用于需要较高精度的计场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [FP32FP16INT8](https://blog.csdn.net/weixin_44942126/article/details/115014754)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [深度学习模型权重数值精度FP32,FP16,INT8数值类型区别](https://blog.csdn.net/baidu_39629638/article/details/121460896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值