Desactivar la tarjeta gráfica dedicada para ahorrar energía

Este artículo está destinado a los amigos que rara vez apagan su PC de sobremesa, pero a menudo trabajan de forma remota en su PC doméstica.

Mi máquina principal para trabajo y juegos es la misma, la pantalla es 4K 144Hz, y normalmente mantengo la tarjeta gráfica dedicada encendida para que la visualización sea más fluida en operaciones cotidianas, aunque el consumo de energía también es significativamente mayor.

Las capturas de pantalla a continuación incluyen un pequeño host J4125, cuyo consumo diario es de aproximadamente 18W, por lo que las conclusiones pueden no ser completamente precisas.

Sin jugar, el pico de potencia al deslizar rápidamente el mouse en el escritorio puede alcanzar 192W

Después de desactivar la tarjeta gráfica dedicada, la frecuencia de actualización baja a 60Hz, y el pico de potencia se reduce a alrededor de 120W.

Cuando trabajo desde casa mediante túnel externo, utilizo una computadora de entrada de Tencent, con ancho de banda limitado, la frecuencia de actualización remota es solo de 30Hz, en este caso no tiene sentido usar la tarjeta gráfica dedicada, se puede considerar cambiar a la gráfica integrada.

En la mayoría de los casos, no uso el escritorio remoto directamente, sino que utilizo el desarrollo remoto de vscode, cuya ventaja es que es discreto, consume menos ancho de banda y ofrece una experiencia casi como desarrollo local.

Al editar código normalmente, consume aproximadamente 72W, comparado con los 120W antes de desactivar la tarjeta gráfica dedicada, se observa un cierto efecto de ahorro de energía.

Al usar remote ssh para desarrollo remoto, se puede usar un script para desactivar la tarjeta gráfica dedicada.

Guarde el script como switch_dedicate_graphic_cards.ps1, el uso es switch_dedicate_graphic_cards.ps1 off

# Uso: switch_dedicate_graphic_cards.ps1 on|off

# Obtener parámetros
$switch = $args[0]

# Salir si no se pasa ningún parámetro
if ($switch -eq $null) {
    Write-Host "Uso: switch_dedicate_graphic_cards.ps1 on|off" -ForegroundColor Yellow
    exit
}

# Obtener dispositivos de visualización
$displayDevices =  Get-CimInstance -Namespace root\cimv2 -ClassName Win32_VideoController

# Si no hay dispositivo de visualización o solo hay un dispositivo, salir
if ($displayDevices.Count -le 1) {
    Write-Host "No se encontró dispositivo de visualización."
    exit
}

# Obtener tarjetas gráficas dedicadas
$dedicatedGraphicCards = $displayDevices | Where-Object { $_.Description -like "*NVIDIA*" }

# Si no hay tarjeta gráfica dedicada, salir
if ($dedicatedGraphicCards.Count -eq 0) {
    Write-Host "No se encontró tarjeta gráfica dedicada."
    exit
}

# Encender o apagar las tarjetas gráficas dedicadas
if ($switch -eq "on") {
    $dedicatedGraphicCards | ForEach-Object { pnputil /enable-device $_.PNPDeviceID }
    Write-Host "Las tarjetas gráficas dedicadas están encendidas."
} elseif ($switch -eq "off") {
    $dedicatedGraphicCards | ForEach-Object { pnputil /disable-device $_.PNPDeviceID }
    Write-Host "Las tarjetas gráficas dedicadas están apagadas."
} else {
    Write-Host "Parámetro inválido."
    Write-Host "Uso: switch_dedicate_graphic_cards.ps1 on|off" -ForegroundColor Yellow
}