fbpx
维基百科

乘積累加運算

乘積累加運算(英語: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]像是平方差公式x2y2,它等價於 ((x×x) − y×y),若果x與y已知數值,使用積和融加運算來求結果,哪怕x = y時,因為在進行首次乘法操作時無視低位的有效位元,可能會使運算結果出錯,如果是多步運算,第一步就出錯則會連累後續的運算結果接連出錯,比如前述的平方差求值後,再取結果的平方根,那麼這個結果也會出錯。

參考資料 编辑

  1. ^ W.Kahan. IEEE Standard 754 for Binary Floating-Point Arithmetic. May 31, 1996 [2016-05-15]. (原始内容于2016-03-09). 

参见 编辑

乘積累加運算, 英語, multiply, accumulate, 是在数字信号處理器或一些微處理器中的特殊運算, 實作此運算操作的硬體電路單元, 被稱為, 乘数累加器, 這種運算的操作, 是將乘法的乘積結果和累加器, 的值相加, 再存入累加器, displaystyle, leftarrow, times, 若沒有使用, 指令, 上述的程序可能需要二個指令, 指令可以使用一個指令完成, 而許多運算, 例如卷积运算, 点积运算, 矩阵运算, 数字滤波器运算, 乃至多项式的求值运算, 都可以分解為數個, 指令, 因此. 乘積累加運算 英語 Multiply Accumulate MAC 是在数字信号處理器或一些微處理器中的特殊運算 實作此運算操作的硬體電路單元 被稱為 乘数累加器 這種運算的操作 是將乘法的乘積結果和累加器 A 的值相加 再存入累加器 a a b c displaystyle a leftarrow a b times c 若沒有使用 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 2016 05 15 原始内容存档于2016 03 09 参见 编辑熔合乘法累积指令集 BLAS 取自 https zh wikipedia org w index php title 乘積累加運算 amp oldid 74075057, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。