我想了解如何最大程度地利用CPU进行操作。我正在做一个简单的矩阵乘法程序,并且有一个Skylake处理器。我在Wikipedia页面上查找有关此体系结构的触发器信息,并且在理解方面有很多困难。

据我了解,FMA指令允许3种方式输入FP,对吗?并允许在它们之间的加法和乘法之间混合。但是,当我仅添加两个浮点数时会发生什么?它只是简单地乘以一吗?我可以在1个周期内添加3个浮子,还是将其拆分?我看到了天际,单精度输入有32个FLOP/周期,但是“两个8宽FMA指令”的含义是什么?

预先感谢您的解释

最佳答案

FMA在单个操作中计算±a * b±c,并且具有单个舍入误差。那就是它所做的,仅此而已。使用FMA指令无法计算a + b + c;为此,您需要两个相关的ADD操作。

根据编译器的不同,您可能必须打开编译器选项以允许使用FMA指令,因为它们给出的结果与乘以加号的结果不同。在某些情况下,您可能需要重新排列代码,例如,ab + cd + e将被计算为x = ab; y = FMA(c,d,x),z = y + e,但e + ab + c * d将按x = FMA(a,b,e)计算; z = FMA(c,d,x)。 FFT的基本运算计算可以用八个浮点运算执行,并且可以使用四个FMA和两个其他运算重写为10个运算。

“两个8宽FMA指令”意味着它可以对两个256位向量寄存器执行FMA指令,每个寄存器包含8个浮点数,其中两个浮点数在同一周期内。

10-01 00:52