代码之家  ›  专栏  ›  技术社区  ›  werk jlcv

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

  •  0
  • werk jlcv  · 技术社区  · 7 年前

    我在一台支持AVX2(英特尔E5-2643 v3)的机器上编译了我的C++程序。它编译和运行都很好。我确认使用了avx2指令,因为在分解二进制文件之后,我看到了avx2指令,如 vpbroadcastd 是的。

    然后我在另一台只设置了avx指令的机器(intel e5-2643v2)上运行这个二进制文件。它运行也很好。二进制文件是否在向后兼容的AVX指令上运行?这是什么指令?你认为有什么潜在的问题吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Peter Cordes    7 年前

    如果avx2指令实际执行,它将引发 #UD ,因此操作系统会将sigill(非法指令)传递给进程或与之等效的windows。

    有些情况下,指令 lzcnt 解码为 rep bsr ,它运行为 bsr 在没有BMI1的CPU上。(给出了不同的答案)。但是,vex编码的avx2指令只是lder cpu上的错误。


    如果程序从未运行过包含avx2指令的函数,那么它可能会与其他输入一起运行,或者它执行运行时cpu检测。

    推荐文章