gpt4 book ai didi

vectorization - AVX 指令 vxorpd 和 vpxor 之间的区别

转载 作者:行者123 更新时间:2023-12-03 11:10:07 24 4
gpt4 key购买 nike

根据Intel Intrinsics Guide ,

  • vxorpd ymm, ymm, ymm : 计​​算 a 和 b 中压缩 double (64 位)浮点元素的按位异或,并将结果存储在 dst 中。
  • vpxor ymm, ymm, ymm :计算a和b中256位(代表整数数据)的按位异或,并将结果存入dst。

  • 两者有什么区别?在我看来,这两条指令都会对 ymm 寄存器的所有 256 位执行按位异或。如果我使用 vxorpd 会不会有任何性能损失?对于整数数据(反之亦然)?

    最佳答案

    将一些评论合并为一个答案:
    除了性能之外,它们具有相同的行为(我认为即使有内存参数:所有 AVX 指令都没有对齐要求)。
    在 Nehalem 到 Broadwell 上,(V)PXOR 可以在 3 个 ALU 执行端口 p0/p1/p5 中的任何一个上运行。 (V)XORPS/D 只能在 p5 上运行。
    一些 CPU 在整数和 FP“域”之间有一个“旁路延迟”。 Agner Fog's microarch docs 说在 SnB/IvB 上,旁路延迟有时为零。例如使用“错误”类型的随机播放或 bool 运算时。在 Haswell 上,他的示例表明 orps 用于整数指令的结果时没有额外的延迟,但 por 用于 addps 的结果时有额外的 1 个时钟延迟。
    在 Skylake 上,FP bool 值可以在任何端口上运行,但旁路延迟取决于它们碰巧运行在哪个端口上。 (有关表格,请参阅英特尔的优化手册)。端口 5 在 FP 数学运算之间没有旁路延迟,但端口 0 或端口 1 有。由于 FMA 单元在端口 0 和 1 上,uop 发布阶段通常会在 FP 繁重的代码中为端口 5 分配 bool 值,因为它可以看到大量 uop 正在排队等待 p0/p1,但 p5 不太忙。 ( How are x86 uops scheduled, exactly? )。
    我建议不要担心这个。调整 Haswell 和 Skylake 会很好。或者总是在整数数据上使用 VPXOR,在 FP 数据上使用 VXORPS,Skylake 会做得很好(但 Haswell 可能不会)。

    在 AMD Bulldozer/Piledriver/Steamroller 上没有 bool 运算的“FP”版本。 (请参阅 Agner Fog 的 microarch 手册的第 182 页。)在执行单元之间转发数据存在延迟(ivec->fp 或 fp->ivec 为 1 个周期,int->ivec 为 10 个周期(eax -> xmm0), ivec->int 为 8 个周期(推土机为 8,10。movd/pinsrw/pextrw 为 4,压路机为 5)因此无论如何,您无法通过使用适当的 bool 值 insn 来避免 AMD 上的旁路延迟。 XORPS 确实比 PXORXORPD 少一个字节来编码(非 VEX 版本。VEX 版本都需要 4 个字节。)
    在任何情况下,旁路延迟只是额外的延迟,而不是降低吞吐量。如果这些操作不是内部循环中最长的 dep 链的一部分,或者如果您可以并行交错两次迭代(因此您有多个依赖链同时进行乱序执行),则 PXOR 可能是要走的路。
    在 Skylake 之前的 Intel CPU 上,压缩整数指令总是可以在比浮点指令更多的端口上运行,因此更喜欢整数操作。

    关于vectorization - AVX 指令 vxorpd 和 vpxor 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26942952/

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