assembly - 如何使用 SSE/AVX 指令有效地将 2 x 2 64 位整数矩阵相乘?
问题描述
有没有办法使用 SSE 或 AVX 将 2 x 2 无符号 64 位整数矩阵相乘,
这比不使用 SSE/AVX 指令更有效吗?
解决方案
如果你只想要结果的底部 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 位整数。
推荐阅读
- ios - 注册 iOS 应用程序以打开照片库 (PhotoKit) 和所有其他应用程序中的图像
- sql - 从 SQL Select 语句中删除非数字值以及结束小数点
- sql - 将第一行与所有其他行合并 | 大查询
- asp.net - 带有 MSAL 和 openID Connect 的 Azure Active Directory SSO
- javascript - 如何让我的 Discord.JS 机器人在 DM 中回复我
- python - 通过 PySpark 连接到 Redshift,我们如何让驱动程序工作?
- python - 使用 Xpath 提取特定数据的 Python 脚本
- azure - 重新安装的 azure point to site VPN 无法安装且没有错误消息
- android - 如何在fastlane文件中写评论
- c - 为什么这仍在计算字符串中的空格?