如何检查我的 CPU 是否支持 x86-64-v2?

如何检查我的 CPU 是否支持 x86-64-v2?

AMD、Intel、Red Hat 和 SUSE 定义了一组x86-64 CPU 的“架构级别”。例如,x86-64-v2意味着CPU不仅支持基本的x86-64指令集,还支持其他指令,如SSE4.2、SSSE3或POPCNT。

如何查看我的 CPU 支持哪些架构级别?

答案1

这是基于吉奥莱的回答;整个脚本也可以用 AWK 编写:

#!/usr/bin/awk -f

BEGIN {
    while (!/flags/) if (getline < "/proc/cpuinfo" != 1) exit 1
    if (/lm/&&/cmov/&&/cx8/&&/fpu/&&/fxsr/&&/mmx/&&/syscall/&&/sse2/) level = 1
    if (level == 1 && /cx16/&&/lahf/&&/popcnt/&&/sse4_1/&&/sse4_2/&&/ssse3/) level = 2
    if (level == 2 && /avx/&&/avx2/&&/bmi1/&&/bmi2/&&/f16c/&&/fma/&&/abm/&&/movbe/&&/xsave/) level = 3
    if (level == 3 && /avx512f/&&/avx512bw/&&/avx512cd/&&/avx512dq/&&/avx512vl/) level = 4
    if (level > 0) { print "CPU supports x86-64-v" level; exit level + 1 }
    exit 1
}

这还会检查基线(此处为“级别 1”),仅输出受支持的最高级别,并以与第一个不受支持的级别匹配的退出代码退出。

答案2

最初复制自https://gitlab.archlinux.org/archlinux/rfcs/-/merge_requests/2/diffs

使用 glibc 2.33 或更高版本(Arch Linux、Debian 12、Ubuntu 21.04、Fedora 34 等)或修补后的 glibc (RHEL 8),您可以通过运行以下命令来查看 CPU 支持的架构:

$ /lib/ld-linux-x86-64.so.2 --help

Subdirectories of glibc-hwcaps directories, in priority order:
  x86-64-v4
  x86-64-v3 (supported, searched)
  x86-64-v2 (supported, searched)

在 Debian 衍生版本上,路径不同,您需要运行/lib64/ld-linux-x86-64.so.2 --help.

答案3

在 Linux 上,可以检查报告的 CPU 能力/proc/cpuinfo根据中描述的要求x86-psABI 文档

以下脚本自动执行该过程(退出代码是第一个不受支持的体系结构级别的编号)。

#!/bin/sh -eu

flags=$(cat /proc/cpuinfo | grep flags | head -n 1 | cut -d: -f2)

supports_v2='awk "/cx16/&&/lahf/&&/popcnt/&&/sse4_1/&&/sse4_2/&&/ssse3/ {found=1} END {exit !found}"'
supports_v3='awk "/avx/&&/avx2/&&/bmi1/&&/bmi2/&&/f16c/&&/fma/&&/abm/&&/movbe/&&/xsave/ {found=1} END {exit !found}"'
supports_v4='awk "/avx512f/&&/avx512bw/&&/avx512cd/&&/avx512dq/&&/avx512vl/ {found=1} END {exit !found}"'

echo "$flags" | eval $supports_v2 || exit 2 && echo "CPU supports x86-64-v2"
echo "$flags" | eval $supports_v3 || exit 3 && echo "CPU supports x86-64-v3"
echo "$flags" | eval $supports_v4 || exit 4 && echo "CPU supports x86-64-v4"

答案4

x86-64-level我根据此处的建议创建了一个工具。例子:

$ x86-64-level
3

$ level=$(x86-64-level)
$ echo "x86-64-v${level}"
x86-64-v3

## Output an explanation to stderr
$ x86-64-level --verbose
Identified x86-64-v3, because x86-64-v4 requires 'avx512f', which
is not supported by this CPU [Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz]
3

如果你想在shell脚本中断言当前机器支持某个x86-64级别,请添加以下一行gatekeeper;

x86-64-level --assert=4 || exit 1

如果主机支持 x86-64-v4,则此命令不会执行,否则将输出:

The CPU [Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz] on this host ('dev2')
supports x86-64-v3, which is less than the required x86-64-v4

并以退出值 1 退出。

x86-64-level工具是一个独立的 Bash 脚本,可从以下位置获取https://github.com/HenrikBengtsson/x86-64-level

相关内容