双精度数举例_CUDA 8的混合精度编程

CUDA 8引入了对Pascal GPU上的混合精度编程支持,特别是Volta和Turing GPU的Tensor Cores能加速FP16计算。文章详细探讨了FP16的精度特点、性能优势,并介绍了NVIDIA库如cuDNN、TensorRT、cuBlas在混合精度计算中的应用。同时,展示了如何在CUDA代码中使用FP16类型和内在函数,以及整数点乘本征,以实现更高的计算性能。
摘要由CSDN通过智能技术生成

CUDA 8的混合精度编程

Volta和Turing GPU包含 Tensor Cores,可加速某些类型的FP16矩阵数学运算。这样可以在流行的AI框架内更快,更轻松地进行混合精度计算。要使用Tensor Core,需要使用 CUDA 9 或更高版本。NVIDIA还 为TensorFlow,PyTorch和MXNet添加了 自动混合精度功能。

流行AI框架的张量核心优化示例

在软件开发的实践中,程序员通常会及早学习到使用正确的工具完成工作的重要性。当涉及数值计算时,这一点尤其重要,因为在数值计算中,精度,准确性和性能之间的折衷使得必须选择最佳的数据表示形式。随着Pascal GPU架构和CUDA 8的推出,NVIDIA正在利用新的16位浮点和8/16位整数计算功能扩展可用于混合精度计算的工具集。

“随着架构和软件的不断变化以及GPU等加速器的破坏性影响,随着不同精度的相对成本和易用性的发展,将看到越来越多的混合精度算法得到开发和使用。” —曼彻斯特大学理查森应用数学教授尼克·海姆(Nick Higham)

许多技术和HPC应用程序都要求使用32位(单浮点或FP32)或64位(双浮点或FP64)浮点进行高精度计算,甚至GPU加速的应用都依赖于更高的精度(128) -或256位浮点数!)。在许多应用中,低精度的算术就足够了。例如,在快速发展的深度学习领域中的研究人员发现,由于深度神经网络体系结构用于训练反向传播算法,因此对误差具有自然的抵抗力,并且有人认为16位浮点数(半精度或FP16)足以训练神经网络。

与更高精度的FP32或FP64相比,存储FP16(半精度)数据可减少神经网络的内存使用量,从而可以训练和部署更大的网络,并且FP16数据传输比FP32或FP64传输花费的时间更少。此外,对于许多网络而言,可以使用8位整数计算执行深度学习推理,而不会对准确性产生重大影响。

除了深度学习之外,使用来自相机或其它实际传感器的数据的应用程序通常不需要高精度的浮点计算,因为传感器会生成低精度或低动态范围的数据。射电望远镜处理的数据就是一个很好的例子。正如将在本文后面看到的那样,通过使用8位整数计算,可以大大加速用于处理射电望远镜数据的互相关算法。

在计算方法中不同数值精度的组合使用称为混合精度。NVIDIA Pascal架构通过添加将多个操作打包到32位数据路径中的矢量指令,旨在为可以利用较低精度计算的应用程序提供更高的性能。具体来说,这些指令对16位浮点数据(“ half”或FP16)以及8位和16位整数数据(INT8和INT16)进行操作。

由GP100 GPU驱动的新型NVIDIA Tesla P100可以以FP32两倍的吞吐量执行FP16算术运算。GP102(Tesla P40和NVIDIA Titan X),GP104(Tesla P4)和GP106 GPU均支持可在2和4元素8位向量上执行整数点积的指令,并累加为32位整数。这些指令对于实现高效的深度学习推理以及射电天文学等其它应用程序非常有价值。

在本文中,将提供有关半精度浮点的一些详细信息,并提供有关使用FP16和INT8矢量计算的Pascal GPU可获得的性能的详细信息。还将讨论各种CUDA平台库和API提供的混合精度计算功能。

浮点精度(或16)

正如每位计算机科学家都应该知道的那样,浮点数提供了一种表示形式,可以在范围和精度之间进行权衡的情况下,在计算机上近似实数。浮点数将实际值近似为一组有效数字(称为尾数或有效位数),然后以固定基数(今天大多数计算机上使用的IEEE标准浮点数的基数2)进行缩放。

常见的浮点格式包括32位(称为“单精度”)(在C派生的编程语言中为“ float”)和64位(称为“双精度”(double))。如IEEE 754标准所定义,一个32位浮点值包括一个符号位,8个指数位和23个尾数位。64位双精度数包括一个符号位,11个指数位和52个尾数位。在本文中,对(较新的)IEEE 754标准16位浮点半类型感兴趣,该类型包括一个符号位,5个指数位和10个尾数位,如图1所示。

70f1ac20a98e6bd91972d2c70abeb98d.png

图1:16位半精度浮点(FP16)表示形式:1个符号位,5个指数位和10个尾数位。

要了解16位精度会有什么不同&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值