GPU编程和流式多处理器(四)

本文详细介绍了GPU中的浮点运算,包括单精度、双精度和半精度的处理。重点讨论了单精度的加法、乘法、除法和特殊功能单元(SFU),以及双精度的实现和半精度的转换。CUDA提供了内置数学库,支持各种精度的浮点运算,并详细列举了相关函数的误差范围。

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

GPU编程和流式多处理器(四)
3.2. 单精度(32位)
单精度浮点支持是GPU计算的主力军。GPU已经过优化,可以在此数据类型上原生提供高性能,不仅适用于核心标准IEEE操作(例如加法和乘法),还适用于非标准操作(例如对先验的近似(例如sin()和log()))。32位值与整数保存在同一寄存器文件中,因此单精度浮点值和32位整数(使用__float_as_int()和__int_as_float())之间的强制转换是免费的。
加法,乘法和乘加
编译器自动将浮点值的+,–和运算符转换为加,乘和乘加指令。所述__fadd_rn()和__fmul_rn()内部函数可以被用于加入抑制融合和乘法操作进入乘加指令。
对等与除法
对于具有2.x或更高版本的计算能力的设备,使用–prec-div = true编译代码时,除法运算符符合IEEE规定。对于具有计算能力1.x的设备或对于具有计算能力2.x的设备,当使用–prec-div = false编译代码时,除法运算符和__fdividef(x,y)具有相同的精度,但精度为2 126 <y <2 128,__fdividef(x,y)的结果为零,而除法运算符的结果为正确。另外,对于2 126 <y <2 128,如果x为无穷大,则__fdividef(x,y)返回NaN,而除法运算符返回无穷大。
先验者(SFU)
SM中的特殊功能单元(SFU)实现了六个常见超越功能的快速版本。
• 正弦和余弦
• 对数和指数
• 倒数和倒数平方根
(摘自有关Tesla架构论文)摘录了受支持的操作和相应的精度。SFU并不能完全实现精度,但是它们可以很好地近似于这些功能,并且速度很快。对于比优化的CPU等效端口(例如25倍或更多)快得多的CUDA端口,代码很可能依赖SFU。
SFU精度
给出的内在函数访问SFU。指定–fast-math编译器选项将使编译器将常规C运行时调用替换为上面列出的相应SFU内部函数。
__saturate(x)如果x <0返回0 ,如果x> 1返回1,否则返回x。
3.3.双精度(64位)
带有SM 1.3的CUDA中添加了双精度浮点支持(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值