当我在支持avx2的计算机上编译并在仅支持avx的另一台计算机上运行二进制文件时,会发生什么情况?

时间:2018-06-29 00:45:09

标签: c++ avx avx2

我在支持avx2(Intel E5-2643 V3)的计算机上编译了我的c ++程序。它可以编译并正常运行。我确认使用了avx2指令,因为在分解二进制文件后,我看到了诸如vpbroadcastd之类的avx2指令。

然后,我在仅具有avx指令集的另一台计算机上运行此二进制文件(Intel E5-2643 V2)。运行也很好。二进制文件是否在向后兼容的avx指令上运行?这是什么指示?您看到任何潜在的问题吗?

1 个答案:

答案 0 :(得分:1)

如果AVX2指令实际执行,它将引发#UD,因此OS将SIGILL(非法指令)传递给您的进程或Windows等效程序。

在某些情况下,类似lzcnt的指令会解码为rep bsr,而在没有BMI1的CPU上会以bsr的身份运行。 (给出不同的答案)。但是VEX编码的AVX2指令只是在高端CPU上出错。


如果程序从不运行包含AVX2指令的函数,则可能会与其他输入一起使用,或者可能会进行运行时CPU检测。