首页 > 解决方案 > 如何使用 SSE/AVX 指令有效地将 2 x 2 64 位整数矩阵相乘?

问题描述

有没有办法使用 SSE 或 AVX 将 2 x 2 无符号 64 位整数矩阵相乘,

这比不使用 SSE/AVX 指令更有效吗?

标签: assemblyx86-64matrix-multiplication

解决方案


如果你只想要结果的底部 64 位,事情就容易多了。假设ymm0包含矩阵 A 的四个值,而ymm1包含矩阵 B 的四个值,您可以计算乘积如下:

vpermq        ymm2,ymm0,0x8D
vpermq        ymm3,ymm1,0x4E
vpermq        ymm0,ymm0,0xD8
vpclmullqlqdq xmm4,xmm0,xmm1
vpclmulhqlqdq xmm5,xmm0,xmm1
vpclmullqhqdq xmm6,xmm0,xmm1
vpclmulhqhqdq xmm7,xmm0,xmm1
vpclmullqlqdq xmm8,xmm2,xmm3
vpclmulhqlqdq xmm9,xmm2,xmm3
vpclmullqhqdq xmm10,xmm2,xmm3
vpclmulhqhqdq xmm11,xmm2,xmm3
vpunpcklqdq   xmm0,xmm4,xmm6
vpunpcklqdq   xmm1,xmm5,xmm7
vpunpcklqdq   xmm2,xmm8,xmm10
vpunpcklqdq   xmm3,xmm9,xmm11
vinserti128   ymm0,ymm0,xmm1,1
vinserti128   ymm2,ymm2,xmm3,1
vpaddq        ymm0,ymm0,ymm2

因此,ymm0包含矩阵积的四个底部 64 位整数。


推荐阅读