Cómo obtener información sobre el uso de la GPU y la memoria de la GPU de un proceso mediante powershell7

Cómo obtener información sobre el uso de la GPU y la memoria de la GPU de un proceso mediante powershell7

Intenté Get-Processobtener Get-CimInstance Win32_Processel uso de la GPU y la memoria de la GPU, pero ninguno de ellos puede ofrecer esa información.

En el Administrador de tareas de Windows, puede mostrar la memoria de la GPU.

Entonces, ¿hay alguna manera de conseguirlos en PowerShell?

Respuesta1

Usos de WindowsContadores de rendimientopara rastrear este tipo de cosas. Puede obtener los valores en powershell a través de Get-Counter. Dependiendo de su GPU y controladores, es posible que tenga contadores más específicos disponibles, pero estos ejemplos siempre deberían estar disponibles:

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

Encontré estos nombres de contador ejecutando Get-Counter -ListSet 'GPU*'y tomando los Countervalores de allí. Parece que el uso del motor GPU se divide en 4 tipos:

engtype_3D
engtype_VideoDecode
engtype_Copy
engtype_VideoProcessing

Solo estoy resumiendo engtype_3Den el ejemplo, ya que es el único que se usa en mi sistema. Todos estos valores coinciden con lo que se muestra en el Administrador de tareas de Windows, por lo que deberían ser lo suficientemente precisos.

información relacionada