powershell7 でプロセスの GPU 使用率と GPU メモリ情報を取得する方法

powershell7 でプロセスの GPU 使用率と GPU メモリ情報を取得する方法

Get-ProcessGPU の使用状況と 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 タスク マネージャーに表示される値と一致するため、十分に正確であるはずです。

関連情報