本文目录导读:

- 方法一:使用 NVIDIA-SMI(NVIDIA 显卡)
- 方法二:使用 AMD ROCm / rocminfo(AMD 显卡)
- 方法三:使用 Windows 原生工具(WMI 或 DXDiag)—— 不推荐
- 方法四:使用第三方工具的命令行接口
- 方法五:跨平台 Python 脚本(调用 nvidia-smi)
- 总结与推荐
获取显卡显存位宽通常无法通过简单的脚本直接调用普通API(如PowerShell的WMI或Python的psutil)获得,因为这些工具不暴露位宽这类底层硬件参数。
最可靠的方法是利用显卡驱动程序或硬件监控工具提供的专用命令行工具,以下是针对不同操作系统和显卡品牌的常用方法。
使用 NVIDIA-SMI(NVIDIA 显卡)
NVIDIA 官方提供了一个强大的命令行工具 nvidia-smi,可以查询几乎所有 GPU 信息。
步骤:
- 打开命令行 (CMD 或 PowerShell / 终端)。
- 运行命令:
nvidia-smi --query-gpu=name,memory.bus_width --format=csv
- 输出示例:
name, memory.bus_width NVIDIA GeForce RTX 3080, 320 Bit
参数说明:
--query-gpu=...: 指定要查询的属性。memory.bus_width就是显存位宽(单位:Bit)。--format=csv: 以易解析的CSV格式输出。
批量处理(仅获取位宽值):
nvidia-smi --query-gpu=memory.bus_width --format=csv,noheader
输出:320 Bit
使用 AMD ROCm / rocminfo(AMD 显卡)
对于 AMD 显卡,尤其是在 Linux 下,可以使用 ROCm 工具包。
步骤:
- 安装 ROCm (如果已安装)
- 运行命令:
rocminfo | grep "Memory Bus Width"
或者使用更详细的工具
rocm-smi:rocm-smi --showmeminfo vram
但
rocm-smi主要显示内存总大小和使用量,位宽信息可能需要解析rocminfo输出。
使用 Windows 原生工具(WMI 或 DXDiag)—— 不推荐
局限性: 标准的 WMI 类(如 Win32_VideoController)不包含 MemoryBusWidth 属性。dxdiag 生成的XML文件通常也不包含位宽。
尝试(通常失败):
# PowerShell 尝试查询,通常返回空或错误 Get-WmiObject Win32_VideoController | Select-Object Name, AdapterRAM
AdapterRAM 是显存大小,不是位宽。
使用第三方工具的命令行接口
如果必须纯脚本获取,可以依赖一些具备命令行功能的第三方硬件检测工具的静默输出,并解析其结果。
GPU-Z(Windows)
- GPU-Z 有一个命令行/脚本模式,你可以用
/dump参数导出所有传感器数据到文本文件,然后从中提取位宽。 - 示例脚本(批处理):
@echo off gpu-z.exe /dump=gpu_info.txt findstr "Memory Bus Width" gpu_info.txt del gpu_info.txt
HWiNFO(Windows)
- HWiNFO 可以生成 CSV 或 XML 报告,你可以使用其命令行版本
hwinfo64.exe并指定导出格式,然后解析文件。 - 示例命令:
hwinfo64.exe -reportfileTxt my_report.txt -sensors
然后搜索
Memory Bus Width或Bus Width。
跨平台 Python 脚本(调用 nvidia-smi)
如果你主要面向 NVIDIA 显卡,这是最干净、稳定的脚本方案。
代码示例 (Python):
import subprocess
import re
def get_nvidia_memory_bus_width():
try:
result = subprocess.run(
['nvidia-smi', '--query-gpu=memory.bus_width', '--format=csv,noheader'],
capture_output=True,
text=True,
check=True
)
# 输出类似 "320 Bit"
output = result.stdout.strip()
# 提取数字部分
match = re.search(r'(\d+)\s*Bit', output)
if match:
return int(match.group(1))
else:
return None
except (subprocess.CalledProcessError, FileNotFoundError):
return None
# 使用
bit_width = get_nvidia_memory_bus_width()
if bit_width:
print(f"显存位宽: {bit_width} Bit")
else:
print("无法获取信息,可能不是NVIDIA显卡或nvidia-smi未安装。")
总结与推荐
| 场景 | 推荐方法 | 可靠性 |
|---|---|---|
| Windows + NVIDIA | nvidia-smi (方法一) |
★★★★★ |
| Linux + NVIDIA | nvidia-smi (方法一) |
★★★★★ |
| Linux + AMD | rocminfo (方法二) |
★★★★☆ (需安装ROCm) |
| Windows + 任何显卡 | GPU-Z 命令行转储 (方法四) |
★★★☆☆ (依赖外部工具) |
| 跨平台脚本 | Python + nvidia-smi (方法五) |
★★★★☆ (仅限NVIDIA) |
核心结论: 没有通用且原生支持所有硬件的脚本命令,最实用且稳定的方法是调用显卡厂商自带的命令行工具(nvidia-smi / rocminfo),如果你需要检测Intel核显或其他品牌,通常需要引入第三方硬件检测库或工具。