如何通过powershell7获取进程的GPU使用率和GPU内存信息

bin*_*381 7 powershell gpu windows-10 powershell-7.0

我尝试过Get-Process获取Get-CimInstance Win32_ProcessGPU 使用情况和 GPU 内存,但它们都无法提供这些信息。

在Windows任务管理器中,它可以显示GPU内存。

那么,有没有办法让这些进入powershell

Cpt*_*ale 7

Windows 使用性能计数器来跟踪此类事件。您可以通过 获取 powershell 中的值Get-Counter。根据您的 GPU 和驱动程序,您可能有更具体的可用计数器,但这些示例应该始终可用:

# Example to get GPU usage counters for a specific process:
$p = Get-Process dwm
((Get-Counter "\GPU Process Memory(pid_$($p.id)*)\Local Usage").CounterSamples | where CookedValue).CookedValue | 
    foreach {Write-Output "Process $($P.Name) GPU Process Memory $([math]::Round($_/1MB,2)) MB"}
((Get-Counter "\GPU Engine(pid_$($p.id)*engtype_3D)\Utilization Percentage").CounterSamples | where CookedValue).CookedValue |
    foreach {Write-Output "Process $($P.Name) GPU Engine Usage $([math]::Round($_,2))%"}

# Outputs:
Process dwm GPU Process Memory 259.36 MB
Process dwm GPU Engine Usage 0.47%


# Example to get total GPU usage counters:
$GpuMemTotal = (((Get-Counter "\GPU Process Memory(*)\Local Usage").CounterSamples | where CookedValue).CookedValue | measure -sum).sum
    Write-Output "Total GPU Process Memory Local Usage: $([math]::Round($GpuMemTotal/1MB,2)) MB"
$GpuUseTotal = (((Get-Counter "\GPU Engine(*engtype_3D)\Utilization Percentage").CounterSamples | where CookedValue).CookedValue | measure -sum).sum
    Write-Output "Total GPU Engine Usage: $([math]::Round($GpuUseTotal,2))%"

# Outputs:
Total GPU Process Memory Local Usage: 511.36 MB
Total GPU Engine Usage: 0.77%
Run Code Online (Sandbox Code Playgroud)

我通过运行找到了这些计数器名称Get-Counter -ListSet 'GPU*',并Counter从那里获取值。看起来 GPU 引擎的使用分为 4 种类型:

engtype_3D
engtype_VideoDecode
engtype_Copy
engtype_VideoProcessing
Run Code Online (Sandbox Code Playgroud)

我只是engtype_3D在示例中进行总结,因为它是我的系统上唯一使用的示例。这些值都与 Windows 任务管理器中显示的值相匹配,因此应该足够准确。