Get-Process
GPU の使用状況と GPU メモリを取得しようとしましたGet-CimInstance Win32_Process
が、どちらもそれらの情報を提供できません。
Windows タスク マネージャーでは、GPU メモリを表示できます。
では、PowerShellでそれらを取得する方法はあるのでしょうか
答え1
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%
Get-Counter -ListSet 'GPU*'
これらのカウンター名は、を実行してそこから値を取得することで見つけましたCounter
。GPU エンジンの使用量は 4 つのタイプに分類されるようです。
engtype_3D
engtype_VideoDecode
engtype_Copy
engtype_VideoProcessing
この例は私のシステムで使用されている唯一の例なので、単に合計しているだけですengtype_3D
。これらの値はすべて Windows タスク マネージャーに表示される値と一致するため、十分に正確であるはずです。