编辑
2024-09-26
TechNotes
00

目录

脚本内容
脚本分析
1. Shebang 行
2. BEGIN 块
3. while 循环
4. 条件判断
5. 版本输出
6. 退出码
如何运行脚本
执行效果

脚本内容

awk
#!/usr/bin/awk -f # BEGIN 块会在读取输入之前执行,类似于 C 中的 main 函数 BEGIN { # 通过循环读取 /proc/cpuinfo 文件中的每一行,直到匹配到包含 "flags" 的行 while (!/flags/) if (getline < "/proc/cpuinfo" != 1) exit 1 # 检查 CPU 是否支持基本的 x86-64 指令集 if (/lm/&&/cmov/&&/cx8/&&/fpu/&&/fxsr/&&/mmx/&&/syscall/&&/sse2/) level = 1 # 如果支持基本指令集,还进一步检查是否支持更多扩展指令集 if (level == 1 && /cx16/&&/lahf/&&/popcnt/&&/sse4_1/&&/sse4_2/&&/ssse3/) level = 2 # 检查是否支持 AVX 和 AVX2 指令集,这些是高性能运算的关键 if (level == 2 && /avx/&&/avx2/&&/bmi1/&&/bmi2/&&/f16c/&&/fma/&&/abm/&&/movbe/&&/xsave/) level = 3 # 检查是否支持最新的 AVX512 指令集扩展,极大提升了高端运算性能 if (level == 3 && /avx512f/&&/avx512bw/&&/avx512cd/&&/avx512dq/&&/avx512vl/) level = 4 # 如果支持任何版本的 x86-64 指令集,输出对应的版本并退出 if (level > 0) { print "CPU supports x86-64-v" level; exit level + 1 } # 如果没有匹配到支持的指令集,脚本以退出码 1 结束 exit 1 }

脚本分析

1. Shebang 行

脚本的开头是 #!/usr/bin/awk -f,指定该脚本应由 awk 解释器执行,并使用 -f 来表示从文件中读取命令。

2. BEGIN 块

BEGIN 块中的代码会在读取输入之前执行,类似于其他编程语言中的初始化逻辑。这个脚本中,BEGIN 会首先开始从 /proc/cpuinfo 文件读取信息。

3. while 循环

while (!/flags/) if (getline < "/proc/cpuinfo" != 1) exit 1 这段代码使用 getline/proc/cpuinfo 文件中逐行读取,直到找到 flags 字段,这个字段包含了 CPU 支持的所有指令集信息。如果没有找到 flags 或读取失败,脚本会退出并返回 1。

4. 条件判断

一系列的 if 语句检查 flags 中是否存在特定指令集标志。每找到一组支持的指令集,level 变量就会递增,表示 CPU 支持的 x86-64 版本越来越高。

5. 版本输出

一旦确定 level 的值,脚本会输出 CPU 支持的 x86-64 版本,并通过 exit level + 1 退出。比如,如果 CPU 支持 avx512,它会输出 CPU supports x86-64-v4

6. 退出码

如果找不到任何支持的指令集,脚本以退出码 1 终止,表示当前 CPU 不支持 x86-64 的高级指令集。


如何运行脚本

  1. 确保脚本文件具有可执行权限:

    bash
    chmod +x cpu.sh
  2. 运行脚本:

    bash
    ./cpu.sh
  3. 或者使用 awk 直接执行:

    bash
    awk -f cpu.sh

执行效果

image.png

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:GYC

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!