作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以向我解释为什么融合乘法累加指令有 3 种变体:vfmadd132pd
, vfmadd231pd
和 vfmadd213pd
,而只有一个 C 内在函数 _mm256_fmadd_pd
?
为了简单起见,(在 AT&T 语法中)有什么区别
vfmadd132pd %ymm0, %ymm1, %ymm2
vfmadd231pd %ymm0, %ymm1, %ymm2
vfmadd213pd %ymm0, %ymm1, %ymm2
ijk
,
vfmaddijkpd
的含义:
op(i) * op(j) + op(k) -> op(1)
op(4-i) * op(4-j) + op(4-k) -> op(3)
op(n)
表示指令后的第 n 个操作数。所以有一个
反向 两者之间的转换:
n <- 4 - n
最佳答案
融合乘加指令将两个(压缩)值相乘,添加第三个值,然后用结果覆盖其中一个值。这三个值中只有一个可以是内存操作数而不是寄存器。
它的工作方式是所有三个指令都覆盖 ymm0
并且只允许 ymm2
成为内存操作数。指令的选择决定了哪两个操作数相乘,哪一个相加。
假设 ymm0 是 Intel 语法中的第一个操作数(或 AT&T 语法中的最后一个):
vfmadd132pd: ymm0 = ymm0 * ymm2/mem + ymm1
vfmadd231pd: ymm0 = ymm1 * ymm2/mem + ymm0
vfmadd213pd: ymm0 = ymm1 * ymm0 + ymm2/mem
关于assembly - 为什么 FMA _mm256_fmadd_pd() 内在函数有 3 个 asm 助记符, "vfmadd132pd"、 "231"和 "213"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36391719/
我是一名优秀的程序员,十分优秀!