【问题标题】:How to tell if a Linux machine supports AVX/AVX2 instructions?如何判断 Linux 机器是否支持 AVX/AVX2 指令?
【发布时间】:2016-09-25 14:12:50
【问题描述】:

我使用的是 SUSE Linux Enterprise 10/11 机器。我向运行英特尔处理器的机器群发起回归。我的一些测试失败了,因为我的工具是使用需要 AVX/AVX2 指令支持的库构建的。我收到Illegal exception 错误。

在 Linux 中,我可以使用任何命令来确定 CPU 代码/系列名称是什么?

我相信 AVX 和 AVX2 可以分别从英特尔 SandyBridge 和 Haswell 系列开始提供。

【问题讨论】:

    标签: linux unix avx suse avx2


    【解决方案1】:

    运行这个命令:

    grep avx /proc/cpuinfo
    

    或者

    grep avx2 /proc/cpuinfo
    

    这会给你:

    国旗:FPU VME德PSE TSC MSR PAE MCE CX8 APIC月MTRR PGE MCA CMOV轻拍PSE36 CLFLUSH MMX FXSR SSE SSE2 SS系统调用的nx pdpe1gb rdtscp流明constant_tsc arch_perfmon rep_good nopl eagerfpu PNI pclmulqdq VMX SSSE3 CX16 PCID sse4_1 sse4_2 x2apic POPCNT tsc_deadline_timer AES xsave avx avx2 hypervisor lahf_lm arat tsc_adjust xsaveopt

    【讨论】:

    • grep -o 'avx[^ ]*' /proc/cpuinfo 将在 Skylake 桌面 CPU 上打印 avx avx2(对每个内核重复)。 (grep -o 只打印匹配的文本,而不是整行)。另一种选择是tr ' ' '\n' < /proc/cpuinfo | grep avx
    • 它不打印任何东西。这是什么意思?
    • @CGFoX 无输出表示不支持。
    【解决方案2】:

    在 linux(或 unix 机器)上,有关您的 cpu 的信息在 /proc/cpuinfo 中。您可以手动或使用 grep 命令 (grep flags /proc/cpuinfo) 从那里提取信息。

    大多数编译器也会自动定义__AVX2__,所以你也可以检查一下。

    【讨论】:

    • FWIW 在拥有它的 cpu 上使用 g++ 10.3 和 clang++ 12 对我来说失败了。除非我添加-mavx2,遗憾的是,它是圆形的。 march=native 也显示了它。在旧 CPU 上将它与 -march=native 一起使用确实不是“未定义”状态。所以是的,很好的答案,但也需要正确触发它
    【解决方案3】:

    您也可以运行lscpu 并检查最后的指令列表。

    【讨论】:

      【解决方案4】:

      您可以通过检查/proc/cpuinfo 来测试 SIMD 指令集和其他 CPU 功能的可用性,例如

      $ grep avx2 /proc/cpuinfo
      flags       : fpu vme ... sse4_1 sse4_2 ... bmi1 avx2 ... bmi2 ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-12
        • 2019-04-25
        • 1970-01-01
        • 2016-12-05
        • 2011-12-12
        • 1970-01-01
        • 2017-02-03
        相关资源
        最近更新 更多