我在 x64 Microsoft Macro Assembler 中有以下代码(简化示例):
.DATA
First BYTE -4, -3, -2, -1, 0, 1, 2, 3
Second BYTE 1, 2, 3, 4, 5, 6, 7, 8
.CODE
MultiplyAndSum PROC
; move First and Second to vectors
; multiply corresponding elements
; sum the results
; return the sum
MultiplyAndSum ENDP
我想在该过程中实现的是,使用 SIMD 将两个数组中的相应字节相乘(无论使用哪个寄存器都无关紧要),然后对结果求和。所以在这种情况下,我想做:
-4 * 1 + (-3) * 2 + ... + 3 * 8 = 24
并返回 24。
这可以使用向量指令实现吗?
据我所见,大多数乘法指令都在 WORD 或 DWORD 上运行 - 因此,有没有办法将乘法拆分为多个片段并在例如 WORD 而不是 BYTE 上运行?
在这种情况下,这些说明对我pmaddwd
来说似乎没有用。有什么我想念的吗?pmullw
pmulhw