乘积累加运算(Multiply Accumulate, MAC)
轉自:https://www.mobibrw.com/2019/17864
乘積累加運算(英語:Multiply?Accumulate,?MAC)是在數字信號處理器或一些微處理器中的特殊運算。實現此運算操作的硬件電路單元,被稱為“乘數累加器”。這種運算的操作,是將乘法的乘積結果和累加器?A 的值相加,再存入累加器:
若沒有使用 MAC 指令,上述的程序可能需要二個指令,但 MAC 指令可以使用一個指令完成。而許多運算(例如卷積運算、點積運算、矩陣運算、數字濾波器運算、乃至多項式的求值運算)都可以分解為數個 MAC 指令,因此可以提高上述運算的效率。
MAC指令的輸入及輸出的數據類型可以是整數、定點數或是浮點數。若處理浮點數時,會有兩次的數值修約(Rounding),這在很多典型的DSP上很常見。若一條MAC指令在處理浮點數時只有一次的數值修約,則這種指令稱為“融合乘加運算”/“積和熔加運算”(fused multiply-add, FMA)或“熔合乘法累積運算”(fused multiply–accumulate, FMAC)。
積和熔加運算
融合乘加運算的操作和乘積累加的基本一樣,對于浮點數的操作也是一條指令完成。但不同的是,非融合乘加的乘積累加運算,處理浮點數時,會先完成b×c的乘積,將其結果數值修約到N個比特,然后才將修約后的結果與寄存器a的數值相加,再把結果修約到N個比特;融合乘加則是先完成a+b×c的操作,獲得最終的完整結果后方才修約到N個比特。由于減少了數值修約次數,這種操作可以提高運算結果的精度,以及提高運算效率和速率。
積和融加運算可以顯著提升像是這些運算的性能和精度:
- 點積
- 矩陣乘法
- 多項式方程求解(像是秦九韶算法等)
- 牛頓法求解函數的零點
積和融加運算通常被依靠用來獲取更精確的運算結果。然而,Kahan指出,如果不加思索地使用這種運算操作,在某些情況下可能會帶來問題。[1]像是平方差公式x2???y2,它等價于?((x×x) ??y×y),若果x與y已知數值,使用積和融加運算來求結果,哪怕x?=?y時,因為在進行首次乘法操作時無視低位的有效比特,可能會使運算結果出錯,如果是多步運算,第一步就出錯則會連累后續的運算結果接連出錯,比如前述的平方差求值后,再取結果的平方根,那么這個結果也會出錯。
參考鏈接
- ^?W.Kahan.?IEEE Standard 754 for Binary Floating-Point Arithmetic. May 31, 1996.
- 乘積累加運算
總結
以上是生活随笔為你收集整理的乘积累加运算(Multiply Accumulate, MAC)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Microsoft Teams的Meet
- 下一篇: [教程] 中断闪存或备份后如何修复 MT