Cuda 是否使用快速数学选项将SP乘法转换为内部函数?
我快速浏览了CUDA编程指南w.r.t-使用快速数学优化,虽然附录C提到了要转换为内在函数的除法,但没有提到乘法。我问这个问题的原因是,我的内核有很多乘法运算。我知道NVCC会尝试融合乘法和加法(当使用常规的“*”和“+”运算符时,并且内部函数永远不会合并到FMAD操作中)。但是,如果我的代码是重乘法的,那么如果使用像Cuda 是否使用快速数学选项将SP乘法转换为内部函数?,cuda,nvcc,fast-math,Cuda,Nvcc,Fast Math,我快速浏览了CUDA编程指南w.r.t-使用快速数学优化,虽然附录C提到了要转换为内在函数的除法,但没有提到乘法。我问这个问题的原因是,我的内核有很多乘法运算。我知道NVCC会尝试融合乘法和加法(当使用常规的“*”和“+”运算符时,并且内部函数永远不会合并到FMAD操作中)。但是,如果我的代码是重乘法的,那么如果使用像\uu fmul\u rn这样的舍入SP内在值会有好处吗 因此有两个问题: 是否使用快速数学选项将带“*”运算符的乘法转换为SP指令,如u_fmul_rn 手动编码乘法显式使用_f
\uu fmul\u rn
这样的舍入SP内在值会有好处吗
因此有两个问题:
mul.ftz.f32
(刷新为零)
您提到的浮点整数(
\uu fmul{rm,rn,rp,rz,ftz,sat}
)只提供对IEEE舍入行为的显式控制。我不认为它们在费米或开普勒GPU上的吞吐量存在差异。请注意,_fmul_rn()映射到具有特定IEEE舍入模式的PTX指令。这反过来会抑制某些优化,特别是将单精度乘法和单精度加法合并为乘法-加法类型指令(sm_1x上的FMAD、sm_2x和sm_3x上的FFMA)。请参阅PTX手册。当需要为某些代码实现特定的数值属性时,此属性非常有用,并用于CUDA数学库中的各个位置,例如,“为某些代码实现特定的数值属性,并用于CUDA数学库中的各个位置”-你能举个例子吗?谢谢。将math_functions.h改为fmul_rn将产生各种工作示例。请注意,sm_1x FMAD涉及截断乘法。如果这导致不可接受的精度损失,您可以使用uu fmul_rn()在本地禁止FMAD合并。还有一个nvcc标志-fmad=false,但它会禁止整个编译单元的fmad合并,这通常会对性能产生显著的负面影响。