油条大哥大 发表于 2024-3-1 10:46:08

C++11中的 std::fma 实现之必要性的讨论

C++11在常用数学函数里新增加了一个函数std::fma, 解释为 fused multiply-add operationfloat       fma( float x, float y, float z );double      fma( double x, double y, double z );long double fma( long double x, long double y, long double z );Promoted    fma( Arithmetic x, Arithmetic y, Arithmetic z );http://en.cppreference.com/w/cpp/numeric/math/fma
fma(x,y,z)= x*y+z
我在想,有必要添加这个函数吗,
换句话问,就是x*y+z 常用吗,在什么领域常用?

azanuvahejih 发表于 2024-3-1 10:46:24

原来是DSP里面常用,比先乘后加 更高效,且精度更高(一个只需一次四舍五入,一个要做2次四舍五入)。
http://en.wikipedia.org/wiki/FMA_instruction_set
http://en.wikipedia.org/wiki/Mul ... ccumulate_operation

ivamvanibumiq 发表于 2024-3-1 10:47:13

在大数乘法中,经常用到类似的操作。不过,注重效率的大数乘法的实现一般会使用汇编优化,而不使用这个。

asomiajht 发表于 2024-3-1 10:47:43

FMA 在未来的 CPU 中有直接的汇编指令对应,
也许该函数能直接调用到该指令吧。
确实,我也觉得,直接写相应的汇编效率会更高。

ejiwueu 发表于 2024-3-1 10:47:54

显然目的就是直接翻译成对应的汇编指令

anadavetag 发表于 2024-3-1 10:48:53

恩,我也是今天才发觉到,都集成到硬件指令集里去了
页: [1]
查看完整版本: C++11中的 std::fma 实现之必要性的讨论