gpt4 book ai didi

intrinsics - _mm256_xor_si256() 和 _mm256_xor_ps() 的区别

转载 作者:行者123 更新时间:2023-12-02 06:33:07 27 4
gpt4 key购买 nike

我试图找到 _mm256_xor_si256 之间的实际区别和 _mm256_xor_ps来自 AVX(2) 的内在函数。

它们分别映射到intel指令:

  • vpxor ymm, ymm, ymm
  • vxorps ymm, ymm, ymm

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com