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
현재 시스템이 특정 x86-64 레벨을 지원한다는 것을 쉘 스크립트에서 확인하려면 게이트키퍼에 다음 행을 추가하십시오.
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.