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。