ARM 汇编中的乘法、累加与浮点运算
1. 乘法累加指令及其重要性
在现代应用中,如对象识别和语音翻译,其执行速度很大程度上取决于矩阵乘法的速度,而矩阵乘法又依赖于乘累加(Multiply with Accumulate)操作的速度。这也是 ARM 处理器在硅片上为乘累加操作分配大量资源的原因。
乘累加指令如下:
- MADD Xd, Xn, Xm, Xa
- MSUB Xd, Xn, Xm, Xa
- SMADDL Xd, Wn, Wm, Xa
- UMADDL Xd, Wn, Wm, Xa
- SMSUBL Xd, Wn, Wm, Xa
- UMSUBL Xd, Wn, Wm, Xa
这些指令与之前讨论的乘法指令密切相关,实际上,大多数乘法指令是使用零寄存器作为 Xa 的这些乘累加指令的别名。计算方式为:
- Xd = Xa + Xn * Xm
- Xd = Xa – Xn * Xm
需要注意的是,Xd 可以与 Xa 相同,用于计算累加和。当 Xa 为零寄存器时,就得到了上一节中的所有负乘法操作。对于将两个 32 位寄存器相乘得到 64 位结果的版本,和需要是 64 位的 X 寄存器。
2. 矩阵乘法示例
以两个 3x3 矩阵相乘为例,其伪代码如下:
FOR row = 1 to 3
FOR col = 1 to 3
acum = 0
FOR i = 1 to 3
超级会员免费看
订阅专栏 解锁全文
69

被折叠的 条评论
为什么被折叠?



