0

我在 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来说似乎没有用。有什么我想念的吗?pmullwpmulhw

4

0 回答 0