So erhalten Sie mit Powershell7 Informationen zur GPU-Nutzung und zum GPU-Speicher eines Prozesses

So erhalten Sie mit Powershell7 Informationen zur GPU-Nutzung und zum GPU-Speicher eines Prozesses

Ich habe versucht Get-Process, Get-CimInstance Win32_Processdie GPU-Auslastung und den GPU-Speicher abzurufen, aber beide können diese Informationen nicht liefern.

Im Windows Task-Manager kann der GPU-Speicher angezeigt werden.

Gibt es also eine Möglichkeit, diese in Powershell zu erhalten?

Antwort1

Windows verwendetLeistungsindikatorenum solche Dinge zu verfolgen. Sie können die Werte in Powershell über abrufen Get-Counter. Abhängig von Ihrer GPU und Ihren Treibern stehen Ihnen möglicherweise spezifischere Zähler zur Verfügung, aber diese Beispiele sollten immer verfügbar sein:

# 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%

Ich habe diese Zählernamen gefunden Get-Counter -ListSet 'GPU*', indem ich ausgeführt und die CounterWerte von dort übernommen habe. Es sieht so aus, als ob die GPU-Engine-Nutzung in vier Typen unterteilt ist:

engtype_3D
engtype_VideoDecode
engtype_Copy
engtype_VideoProcessing

Ich summiere engtype_3Ddas Beispiel nur, da es das einzige ist, das auf meinem System verwendet wird. Diese Werte stimmen alle mit dem überein, was im Windows-Task-Manager angezeigt wird, also sollte es genau genug sein.

verwandte Informationen