我在支持avx2(Intel E5-2643 V3)的计算机上编译了我的c ++程序。它可以编译并正常运行。我确认使用了avx2指令,因为在分解二进制文件后,我看到了诸如vpbroadcastd
之类的avx2指令。
然后,我在仅具有avx指令集的另一台计算机上运行此二进制文件(Intel E5-2643 V2)。运行也很好。二进制文件是否在向后兼容的avx指令上运行?这是什么指示?您看到任何潜在的问题吗?
答案 0 :(得分:1)
如果AVX2指令实际执行,它将引发#UD
,因此OS将SIGILL(非法指令)传递给您的进程或Windows等效程序。
在某些情况下,类似lzcnt
的指令会解码为rep bsr
,而在没有BMI1的CPU上会以bsr
的身份运行。 (给出不同的答案)。但是VEX编码的AVX2指令只是在高端CPU上出错。
如果程序从不运行包含AVX2指令的函数,则可能会与其他输入一起使用,或者可能会进行运行时CPU检测。