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中添加了双精度浮点支持(
GPU编程和流式多处理器(四)
最新推荐文章于 2025-08-01 12:26:48 发布