Project Icon

cpuid

高效的Go语言CPU信息检测库

cpuid是一个纯Go语言实现的CPU信息检测库,支持x86/x64和ARM架构。它在程序启动时识别CPU特性,并在运行期间保持高效访问。通过cpuid库,开发者可以轻松获取CPU品牌、核心数、缓存大小和指令集等详细信息,无需依赖外部C代码,简化了跨平台开发。

cpuid

cpuid 包提供了有关当前程序运行的 CPU 的信息。

CPU 特性在启动时被检测,并在应用程序的整个生命周期中保持快速访问。目前支持 x86 / x64 (AMD64/i386) 和 ARM (ARM64),且不使用外部 C (cgo) 代码,这使得该库非常易于使用。

你可以通过访问 cpuid 库的共享 CPU 变量来获取 CPU 信息。

包主页: https://github.com/klauspost/cpuid

PkgGoDev Go

安装

使用模块时执行 go get -u github.com/klauspost/cpuid/v2。 其他情况下去掉 v2

安装二进制文件:

go install github.com/klauspost/cpuid/v2/cmd/cpuid@latest

或从发布页面下载二进制文件: https://github.com/klauspost/cpuid/releases

Homebrew

对于 macOS/Linux 用户,可以通过 brew 安装

$ brew install cpuid

示例

package main

import (
	"fmt"
	"strings"

	. "github.com/klauspost/cpuid/v2"
)

func main() {
	// 打印基本的 CPU 信息:
	fmt.Println("名称:", CPU.BrandName)
	fmt.Println("物理核心数:", CPU.PhysicalCores)
	fmt.Println("每核心线程数:", CPU.ThreadsPerCore)
	fmt.Println("逻辑核心数:", CPU.LogicalCores)
	fmt.Println("系列", CPU.Family, "型号:", CPU.Model, "厂商 ID:", CPU.VendorID)
	fmt.Println("特性:", strings.Join(CPU.FeatureSet(), ","))
	fmt.Println("缓存行大小:", CPU.CacheLine)
	fmt.Println("L1 数据缓存:", CPU.Cache.L1D, "字节")
	fmt.Println("L1 指令缓存:", CPU.Cache.L1I, "字节")
	fmt.Println("L2 缓存:", CPU.Cache.L2, "字节")
	fmt.Println("L3 缓存:", CPU.Cache.L3, "字节")
	fmt.Println("频率", CPU.Hz, "赫兹")

	// 测试是否有这些特定特性:
	if CPU.Supports(SSE, SSE2) {
		fmt.Println("我们有流式 SIMD 2 扩展")
	}
}

示例输出:

>go run main.go
名称: AMD Ryzen 9 3950X 16-Core Processor
物理核心数: 16
每核心线程数: 2
逻辑核心数: 32
系列 23 型号: 113 厂商 ID: AMD
特性: ADX,AESNI,AVX,AVX2,BMI1,BMI2,CLMUL,CMOV,CX16,F16C,FMA3,HTT,HYPERVISOR,LZCNT,MMX,MMXEXT,NX,POPCNT,RDRAND,RDSEED,RDTSCP,SHA,SSE,SSE2,SSE3,SSE4,SSE42,SSE4A,SSSE3
缓存行大小: 64
L1 数据缓存: 32768 字节
L1 指令缓存: 32768 字节
L2 缓存: 524288 字节
L3 缓存: 16777216 字节
频率 0 赫兹
我们有流式 SIMD 2 扩展

使用

cpuid.CPU 提供了对 CPU 特性的访问。使用 cpuid.CPU.Supports() 来检查 CPU 特性。 提供了一个更快的 cpuid.CPU.Has(),通常会被 gc 编译器内联。

要测试大量特性,可以使用 f := CombineFeatures(CMOV, CMPXCHG8, X87, FXSR, MMX, SYSCALL, SSE, SSE2) 等来组合它们。 这可以与 cpuid.CPU.HasAll(f) 一起使用,以快速测试是否支持所有特性。

注意,对于某些 CPU/OS 组合,某些特性可能无法检测到。 amd64 的支持相当好,应该在所有平台上可靠工作。

请注意,虚拟机管理程序可能不会将所有 CPU 特性传递给客户操作系统, 所以即使你的主机支持某个特性,在客户机上也可能看不到。

arm64 特性检测

并非所有操作系统都直接提供 ARM 特性, 对于其他系统,也没有安全的方法来实现这一点。

目前 arm64/linuxarm64/freebsd 应该相当可靠。 arm64/darwin 添加了 M1 处理器预期的特性,但仍有许多特性未被检测到。

如果你能控制你的部署环境,可以使用 DetectARM(), 它将检测 CPU 特性,但如果操作系统不拦截调用,可能会崩溃。 可以添加 -cpu.arm 标志来检测不安全的 ARM 特性。详见下文。

注意,目前在 ARM 上只检测特性, 目前没有其他额外信息可用。

标志

可以添加影响 CPU 检测的标志。

为此提供了 Flags() 命令。

这必须在 flag.Parse() 之前调用,并且在解析标志后必须调用 Detect()

这意味着在 init() 函数中使用的任何检测都不会包含这些标志。

示例:

package main

import (
	"flag"
	"fmt"
	"strings"

	"github.com/klauspost/cpuid/v2"
)

func main() {
	cpuid.Flags()
	flag.Parse()
	cpuid.Detect()

	// 测试是否有这些特定特性:
	if cpuid.CPU.Supports(cpuid.SSE, cpuid.SSE2) {
		fmt.Println("我们有流式 SIMD 2 扩展")
	}
}

命令行

从以下地址下载二进制文件: https://github.com/klauspost/cpuid/releases

从源代码安装:

go install github.com/klauspost/cpuid/v2/cmd/cpuid@latest

示例

λ cpuid
名称:AMD Ryzen 9 3950X 16核处理器
厂商字符串:AuthenticAMD
厂商ID:AMD
物理核心数:16
每核心线程数:2
逻辑核心数:32
CPU系列23 型号:113
功能:ADX,AESNI,AVX,AVX2,BMI1,BMI2,CLMUL,CLZERO,CMOV,CMPXCHG8,CPBOOST,CX16,F16C,FMA3,FXSR,FXSROPT,HTT,HYPERVISOR,LAHF,LZCNT,MCAOVERFLOW,MMX,MMXEXT,MOVBE,NX,OSXSAVE,POPCNT,RDRAND,RDSEED,RDTSCP,SCE,SHA,SSE,SSE2,SSE3,SSE4,SSE42,SSE4A,SSSE3,SUCCOR,X87,XSAVE
微架构等级:3
缓存行大小:64字节
一级指令缓存:32768字节
一级数据缓存:32768字节
二级缓存:524288字节
三级缓存:16777216字节

JSON输出:

λ cpuid --json
{
  "品牌名称": "AMD Ryzen 9 3950X 16核处理器",
  "厂商ID": 2,
  "厂商字符串": "AuthenticAMD",
  "物理核心数": 16,
  "每核心线程数": 2,
  "逻辑核心数": 32,
  "系列": 23,
  "型号": 113,
  "缓存行": 64,
  "频率": 0,
  "加速频率": 0,
  "缓存": {
    "一级指令": 32768,
    "一级数据": 32768,
    "二级": 524288,
    "三级": 16777216
  },
  "SGX": {
    "可用": false,
    "启动控制": false,
    "支持SGX1": false,
    "支持SGX2": false,
    "非64位最大飞地大小": 0,
    "64位最大飞地大小": 0,
    "EPC区段": null
  },
  "功能": [
    "ADX",
    "AESNI",
    "AVX",
    "AVX2",
    "BMI1",
    "BMI2",
    "CLMUL",
    "CLZERO",
    "CMOV",
    "CMPXCHG8",
    "CPBOOST",
    "CX16",
    "F16C",
    "FMA3",
    "FXSR",
    "FXSROPT",
    "HTT",
    "HYPERVISOR",
    "LAHF",
    "LZCNT",
    "MCAOVERFLOW",
    "MMX",
    "MMXEXT",
    "MOVBE",
    "NX",
    "OSXSAVE",
    "POPCNT",
    "RDRAND",
    "RDSEED",
    "RDTSCP",
    "SCE",
    "SHA",
    "SSE",
    "SSE2",
    "SSE3",
    "SSE4",
    "SSE42",
    "SSE4A",
    "SSSE3",
    "SUCCOR",
    "X87",
    "XSAVE"
  ],
  "X64等级": 3
}

检查CPU微架构等级

λ cpuid --check-level=3
2022/03/18 17:04:40 AMD Ryzen 9 3950X 16核处理器
2022/03/18 17:04:40 支持微架构等级3。最高等级为3。
退出代码 0

λ cpuid --check-level=4
2022/03/18 17:06:18 AMD Ryzen 9 3950X 16核处理器
2022/03/18 17:06:18 不支持微架构等级4。最高等级为3。
退出代码 1

可用标志

x86 & amd64

特性标志描述
ADXIntel ADX(多精度加进位指令扩展)
AESNI高级加密标准新指令
AMD3DNOWAMD 3DNOW
AMD3DNOWEXTAMD 3DNow扩展
AMXBF16对BFLOAT16数字进行平铺计算操作
AMXINT8对8位整数进行平铺计算操作
AMXFP16对FP16数字进行平铺计算操作
AMXTILE平铺架构
APX_FIntel APX
AVXAVX函数
AVX10如果设置,表示支持Intel AVX10融合向量指令集架构
AVX10_128如果设置,表示存在AVX10 128位向量支持
AVX10_256如果设置,表示存在AVX10 256位向量支持
AVX10_512如果设置,表示存在AVX10 512位向量支持
AVX2AVX2函数
AVX512BF16AVX-512 BFLOAT16指令
AVX512BITALGAVX-512位算法
AVX512BWAVX-512字节和字指令
AVX512CDAVX-512冲突检测指令
AVX512DQAVX-512双字和四字指令
AVX512ERAVX-512指数和倒数指令
AVX512FAVX-512基础
AVX512FP16AVX-512 FP16指令
AVX512IFMAAVX-512整数融合乘加指令
AVX512PFAVX-512预取指令
AVX512VBMIAVX-512向量位操作指令
AVX512VBMI2AVX-512向量位操作指令,版本2
AVX512VLAVX-512向量长度扩展
AVX512VNNIAVX-512向量神经网络指令
AVX512VP2INTERSECTAVX-512 D/Q交集
AVX512VPOPCNTDQAVX-512向量双字和四字人口统计
AVXIFMAAVX-IFMA指令
AVXNECONVERTAVX-NE-CONVERT指令
AVXSLOW表示CPU执行2个128位操作而不是1个
AVXVNNIAVX(VEX编码)VNNI神经网络指令
AVXVNNIINT8AVX-VNNI-INT8指令
AVXVNNIINT16AVX-VNNI-INT16指令
BHI_CTRL分支历史注入和内模式分支目标注入 / CVE-2022-0001, CVE-2022-0002 / INTEL-SA-00598
BMI1位操作指令集1
BMI2位操作指令集2
CETIBTIntel CET间接分支跟踪
CETSSIntel CET影子栈
CLDEMOTE缓存行降级
CLMUL无进位乘法
CLZERO支持CLZERO指令
CMOVi686 CMOV
CMPCCXADDCMPCCXADD指令
CMPSB_SCADBS_SHORT快速短CMPSB和SCASB
CMPXCHG8CMPXCHG8指令
CPBOOST核心性能提升
CPPCAMD:协作处理器性能控制
CX16CMPXCHG16B指令
EFER_LMSLE_UNSAMD:=Core::X86::Msr::EFER[LMSLE]不受支持,且必须为零
ENQCMD入队命令
ERMS增强型REP MOVSB/STOSB
F16C半精度浮点转换
FLUSH_L1D刷新L1D缓存
FMA3Intel FMA 3。不意味着AVX。
FMA4Bulldozer FMA4函数
FP128AMD:设置时,内部FP/SIMD执行数据路径为128位宽
FP256AMD:设置时,内部FP/SIMD执行数据路径为256位宽
FSRM快速短Rep Mov
FXSRFXSAVE, FXRESTOR指令,CR4位9
FXSROPTFXSAVE/FXRSTOR优化
GFNI伽罗瓦域新指令。根据使用情况可能需要其他特性(AVX, AVX512VL, AVX512F)。
HLE硬件锁消除
HRESET如果设置,CPU支持历史重置和IA32_HRESET_ENABLE MSR
HTT超线程(已启用)
HWA支持硬件断言。表示支持MSRC001_10
HYBRID_CPU此部件具有多种类型的CPU。
HYPERVISOR此位已被Intel和AMD保留给虚拟机监控程序使用
IA32_ARCH_CAPIA32_ARCH_CAPABILITIES MSR(Intel)
IA32_CORE_CAPIA32_CORE_CAPABILITIES MSR
IBPB间接分支受限推测(IBRS)和间接分支预测屏障(IBPB)
IBRSAMD:间接分支受限推测
IBRS_PREFERREDAMD:IBRS优先于软件解决方案
IBRS_PROVIDES_SMPAMD: IBRS提供同模式保护
IBS基于指令的采样(AMD)
IBSBRNTRGT基于指令的采样功能(AMD)
IBSFETCHSAM基于指令的采样功能(AMD)
IBSFFV基于指令的采样功能(AMD)
IBSOPCNT基于指令的采样功能(AMD)
IBSOPCNTEXT基于指令的采样功能(AMD)
IBSOPSAM基于指令的采样功能(AMD)
IBSRDWROPCNT基于指令的采样功能(AMD)
IBSRIPINVALIDCHK基于指令的采样功能(AMD)
IBS_FETCH_CTLXAMD: 支持IBS获取控制扩展MSR
IBS_OPDATA4AMD: 支持IBS操作数据4 MSR
IBS_OPFUSEAMD: 指示支持IbsOpFuse
IBS_PREVENTHOST支持禁止主机使用IBS
IBS_ZEN4获取和操作IBS支持Zen4添加的IBS扩展
IDPRED_CTRLIPRED_DIS
INT_WBINVDWBINVD/WBNOINVD可中断
INVLPGB支持NVLPGB和TLBSYNC指令
KEYLOCKER密钥锁定器
KEYLOCKERW宽密钥锁定器
LAHF长模式下的LAHF/SAHF
LAM如果设置,CPU支持线性地址掩码
LBRVIRTLBR虚拟化
LZCNTLZCNT指令
MCAOVERFLOW支持MCA溢出恢复
MCDT_NO处理器不表现MXCSR配置相关时序行为,无需缓解
MCOMMIT支持MCOMMIT指令
MD_CLEARVERW清除CPU缓冲区
MMX标准MMX
MMXEXTSSE整数函数或AMD MMX扩展
MOVBEMOVBE指令(大端序)
MOVDIR64B作为直接存储移动64字节
MOVDIRI作为直接存储移动双字
MOVSB_ZL快速零长度MOVSB
MPXIntel MPX(内存保护扩展)
MOVUMOVU SSE指令效率更高,应优先于SSE MOVL/MOVH。MOVUPS比MOVLPS/MOVHPS效率更高。MOVUPD比MOVLPD/MOVHPD效率更高
MSRIRC可用指令退役计数器MSR
MSRLIST读/写模型特定寄存器列表
MSR_PAGEFLUSH可用页面刷新MSR
NRIPS指示支持在VMEXIT时保存NRIP
NXNX(不可执行)位
OSXSAVE操作系统启用XSAVE
PCONFIG用于Intel多密钥全内存加密的PCONFIG
POPCNTPOPCNT指令
PPINAMD: 支持受保护处理器清单号。表示可以启用受保护处理器清单号(PPIN)功能
PREFETCHIPREFETCHIT0/1指令
PSFD预测性存储转发禁用
RDPRU支持RDPRU指令
RDRAND可用RDRAND指令
RDSEED可用RDSEED指令
RDTSCPRDTSCP指令
RRSBA_CTRL受限RSB替代
RTM受限事务内存
RTM_ALWAYS_ABORT表示加载的微码正在强制RTM中止
SERIALIZE序列化指令执行
SEV支持AMD安全加密虚拟化
SEV_64BITAMD SEV客户端执行仅允许来自64位主机
SEV_ALTERNATIVE支持AMD SEV替代注入
SEV_DEBUGSWAP支持SEV-ES客户端的完整调试状态交换
SEV_ES支持AMD SEV加密状态
SEV_RESTRICTED支持AMD SEV受限注入
SEV_SNP支持AMD SEV安全嵌套分页
SGX软件防护扩展
SGXLC软件防护扩展启动控制
SHAIntel SHA扩展
SME支持AMD安全内存加密
SME_COHERENT强制AMD硬件缓存在加密域间保持一致性
SPEC_CTRL_SSBD推测性存储绕过禁用
SRBDS_CTRL可用SRBDS缓解MSR
SSESSE功能
SSE2P4 SSE功能
SSE3Prescott SSE3功能
SSE4Penryn SSE4.1功能
SSE42Nehalem SSE4.2功能
SSE4AAMD Barcelona微架构SSE4a指令
SSSE3Conroe SSSE3功能
STIBP单线程间接分支预测器
STIBP_ALWAYSONAMD: 单线程间接分支预测模式具有增强性能,可以始终保持开启
STOSB_SHORT快速短STOSB
SUCCOR软件不可纠正错误容纳和恢复能力
SVMAMD安全虚拟机
SVMDA指示支持SVM解码辅助
SVMFBASIDSVM,表示TLB刷新事件(包括CR3写入和CR4.PGE切换)仅刷新当前ASID的TLB条目。还表示支持扩展VMCB TLB_Control
SVMLAMD SVM锁。指示支持SVM锁
SVMNPAMD SVM嵌套分页
SVMPFSVM暂停拦截过滤器。表示支持暂停拦截过滤器
SVMPFTSVM暂停过滤器阈值。表示支持暂停过滤器周期计数阈值
SYSCALL系统调用扩展(SCE):SYSCALL和SYSRET指令。
SYSEESYSENTER和SYSEXIT指令
TBMAMD尾随位操作
TDX_GUESTIntel信任域扩展客户端
TLB_FLUSH_NESTEDAMD:刷新包括所有用于客户端转换的嵌套转换
TMEIntel全内存加密。支持以下MSR:IA32_TME_CAPABILITY、IA32_TME_ACTIVATE、IA32_TME_EXCLUDE_MASK和IA32_TME_EXCLUDE_BASE。
TOPEXT拓扑扩展:支持拓扑扩展。表示支持CPUID Fn8000_001D_EAX_x[N:0]-CPUID Fn8000_001E_EDX。
TSCRATEMSR基于MSR的TSC速率控制。表示支持MSR TSC比率MSRC000_0104
TSXLDTRKIntel TSX暂停加载地址跟踪
VAES矢量AES。AVX(512)版本需要额外检查。
VMCBCLEANVMCB清理位。表示支持VMCB清理位。
VMPL支持AMD VM权限级别
VMSA_REGPROT支持AMD VMSA寄存器保护
VMX虚拟机扩展
VPCLMULQDQ无进位乘法四字。3寄存器版本需要AVX支持。
VTE支持AMD虚拟透明加密
WAITPKGTPAUSE、UMONITOR、UMWAIT
WBNOINVD回写且不使缓存无效
WRMSRNS非序列化写入模型特定寄存器
X87浮点运算单元
XGETBV1支持ECX = 1的XGETBV
XOPBulldozer XOP函数
XSAVEXSAVE、XRESTOR、XSETBV、XGETBV
XSAVEC支持XSAVEC和XRSTOR的压缩形式。
XSAVEOPT可用XSAVEOPT
XSAVES支持XSAVES/XRSTORS和IA32_XSS

ARM 特性:

特性标志描述
AESARMAES 指令
ARMCPUID某些 CPU ID 寄存器可在用户级别读取
ASIMD高级 SIMD
ASIMDDPSIMD 点积
ASIMDHP高级 SIMD 半精度浮点
ASIMDRDM舍入双精度乘累加/减法(SQRDMLAH/SQRDMLSH)
ATOMICS大系统扩展(LSE)
CRC32CRC32/CRC32C 指令
DCPOP数据缓存清理至持久点(DC CVAP)
EVTSTRM通用计时器
FCMA浮点复数加法和乘法
FP单精度和双精度浮点
FPHP半精度浮点
GPA通用指针认证
JSCVTJavaScript 风格双精度转整数转换(FJCVTZS)
LRCPC弱化的释放一致性(LDAPR 等)
PMULL多项式乘法指令(PMULL/PMULL2)
SHA1SHA-1 指令(SHA1C 等)
SHA2SHA-2 指令(SHA256H 等)
SHA3SHA-3 指令(EOR3、RAXI、XAR、BCAX)
SHA512SHA512 指令
SM3SM3 指令
SM4SM4 指令
SVE可扩展向量扩展

许可证

本代码以 MIT 许可证发布。有关更多信息,请参阅 LICENSE 文件。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号