查看“乘積累加運算”的源代码
←
乘積累加運算
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{noteTA |G1=IT }} {{主条目消歧义|關於 MAC 或 Mac 其他的意思,詳見 '''[[MAC (消歧義)]]'''。}} '''乘積累加運算'''({{lang-en|'''M'''ultiply '''Ac'''cumulate''', '''MAC'''}})是在[[數字信號處理器|-{zh-hans:数字信号; zh-hant:數位信號;}-處理器]]或一些[[微處理器]]中的特殊運算。實作此運算操作的硬體電路單元,被稱為「乘数累加器」。這種運算的操作,是將乘法的乘積結果和[[累加器]] A 的值相加,再存入累加器: :<math>a \leftarrow a + b \times c</math> 若沒有使用 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指出,如果不加思索地使用這種運算操作,在某些情況下可能會帶來問題。<ref>{{cite web |title=IEEE Standard 754 for Binary Floating-Point Arithmetic |author=W.Kahan | url=http://www.cs.berkeley.edu/~wkahan/ieee754status/ieee754.ps | date=May 31, 1996}}</ref>像是[[平方差]]公式{{math|''x''<sup>2</sup> − ''y''<sup>2</sup>}},它等價於{{math| ((''x''×''x'') − ''y''×''y'')}},若果x與y已知數值,使用積和融加運算來求結果,哪怕{{math|''x'' {{=}} ''y''}}時,因為在進行首次乘法操作時無視低位的有效位元,可能會使運算結果出錯,如果是多步運算,第一步就出錯則會連累後續的運算結果接連出錯,比如前述的平方差求值後,再取結果的[[平方根]],那麼這個結果也會出錯。 == 參考資料 == {{reflist}} == 参见 == * [[熔合乘法累积指令集]] * [[BLAS]] [[Category:計算機算術]] [[Category:数字信号处理]]
本页使用的模板:
Template:Cite web
(
查看源代码
)
Template:Lang-en
(
查看源代码
)
Template:Math
(
查看源代码
)
Template:NoteTA
(
查看源代码
)
Template:Reflist
(
查看源代码
)
Template:主条目消歧义
(
查看源代码
)
返回
乘積累加運算
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息