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。