CUDA学习(六十七)

数学函数:
参考手册列表及其说明列出了设备代码支持的C / C ++标准库数学函数的所有功能,以及所有固有功能(仅在设备代码中支持)
标准函数:
本节中的功能可用于主机和设备代码。
本节规定了每个功能在设备上执行时的错误界限,以及在主机不提供功能的情况下在主机上执行时的错误界限。
加法和乘法符合IEEE标准,因此最大误差为0.5 ulp。
将单精度浮点操作数四舍五入为整数,其结果为单精度浮点数的推荐方法是rintf(),而不是roundf()。 原因是roundf()映射到设备上的8指令序列,而rintf()映射到单个指令。 truncf(),ceilf()和floorf()也分别映射到单个指令。
具有最大ULP误差的单精度数学标准库函数
最大误差表示为正确舍入的单精度结果与CUDA库函数返回的结果之间的差值的绝对值。
1
2
3
4
双精度浮点函数:
将双精度浮点操作数舍入为一个整数,其结果是一个双精度浮点数的推荐方法是rint(),而不是round()。 原因是round()映射到设备上的8个指令序列,而rint()映射到单个指令。 trunc(),ceil()和floor()也分别映射到单个指令。
具有最大ULP误差的双精度数学标准库函数:
最大误差表示为正确舍入的双精度结果与CUDA库函数返回的结果之间的差值的绝对值。
5
6
7
8
内在函数:
在这些函数中,标准函数的某些函数的准确性较低,但速度更快。它们具有以__为前缀的相同名称(如__sinf(x))。 它们映射到更少的原生指令时速度更快。 编译器有一个选项(-use_fast_math),它强制表8中的每个函数编译为其内部对应部分。 除了降低受影响功能的准确性之外,还可能会在特殊情况下处理一些差异。 更稳健的方法是通过调用内部函数来选择性地替换数学函数调用,只有在性能增益的情况下才适用数学函数调用,并且可以容忍更改的属性(如精度降低和不同的特殊情况处理)。
受use_fast_math影响的函数:
9
以_rn结尾的函数使用该轮以最接近的舍入模式运行。
使用_rz后缀的函数使用舍入为零的舍入模式进行操作。
以_ru结尾的函数使用舍入(到正无穷)舍入模式进行操作。
以_rd结尾的函数使用向下舍入(到负向无限)舍入模式进行操作
单精度浮点函数:
_fadd [rn,rz,ru,rd]()和__fmul_ [rn,rz,ru,rd]()映射到编译器不会合并到FMAD中的加法和乘法操作。 相比之下,'*'和'+'运算符产生的加法和乘法运算常常被合并到FMAD中。
浮点除法的精度取决于代码是使用-prec-div = false还是-prec-div = true编译的。 当使用-prec-div = false编译代码时,常规除法/运算符和__fdividef(x,y)具有相同的准确性,但对于2126 __fdividef(x,y)将结果为零 ,而/运算符将正确结果提供给表9中所述的精度。同样,对于2126 __fdividef(x,y)将传递NaN(由于将无穷大乘以零 ),而/运算符返回无穷大。 另一方面,当代码使用-precdiv = true或完全没有任何-prec-div选项编译时,/ operator是符合IEEE的,因为它的默认值为true。
单精度浮点内部函数:
CUDA运行时库支持各自的错误界限
10
11
双精度浮点函数:
__dadd_rn()__dmul_rn()映射到编译器不会合并到FMAD中的加法和乘法操作。 相比之下,'*'和'+'运算符产生的加法和乘法运算常常被合并到FMAD中。
双精度浮点内部函数:
12
timg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值