作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图找到 _mm256_xor_si256 之间的实际区别和 _mm256_xor_ps来自 AVX(2) 的内在函数。
它们分别映射到intel指令:
Intel 将其定义为:
dst[255:0] := (a[255:0] XOR b[255:0])
dst[MAX:256] := 0
对比
FOR j := 0 to 7
i := j*32
dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
ENDFOR
dst[MAX:256] := 0
但坦率地说,我看不出它们的效果有什么不同?它们都异或 256 位。但是后者可以用在AVX和AVX2上,第一个只能用在AVX2上。为什么您会使用兼容性较低的第一个?
最佳答案
效果没有区别,都是做256位的按位异或。但这并不意味着没有差异,只是差异不太明显。
vxorps
在 Haswell 上只能转到端口 5(因此吞吐量为 1),但是 vpxor
可以转到端口 0、1 和 5 ,并且具有 3/周期的吞吐量。此外,当在整数域中执行的指令使用在浮点域中生成的结果时,存在旁路延迟,反之亦然。所以使用“错误”的指令可能会有稍高的延迟,这就是为什么 vxorps
在某些情况下可能更好(但它不像“总是在使用 float 时”那么简单)。
我不确定 AMD Excavator 在这方面会做什么,但 Bulldozer、Piledriver 和 Steamroller 有这些绕过延迟,所以我希望它们在 Excavator 中也是如此。
关于intrinsics - _mm256_xor_si256() 和 _mm256_xor_ps() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27804476/
我是一名优秀的程序员,十分优秀!