根据documentation,在fma()
中有一个math.h
函数。很好,我知道FMA的工作原理以及使用目的。但是,我不确定这在实践中如何实现?我对x86
和x86_64
体系结构最感兴趣。
是否有FMA的浮点(非矢量)指令,也许是IEEE-754 2008所定义的?
是否使用FMA3或FMA4指令?
在依赖精度的情况下,是否有固有的方法可以确保使用真实的FMA?
最佳答案
实际的实现因平台而异,但讲得很广泛:
fma( )
的调用。这不能保证,但通常是好的做法。否则,您将调用数学库,并且:fma( )
函数的结果应始终正确取整(即“真实fma”)。如果不是,那是系统数学库中的一个错误。不幸的是,fma( )
是更难于正确实现的数学库函数之一,因此许多实现都有错误。请向您的图书馆供应商报告,以使它们得到修复! 只要有一个好的编译器,就没有必要了。使用
fma( )
函数并告诉编译器您要针对的体系结构就足够了。但是,编译器并不完美,因此您可能需要在x86上使用_mm_fmadd_sd( )
和相关的内在函数(但应将错误报告给编译器供应商!)关于floating-point - fma()如何实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28630864/