Отключение дискретной видеокарты для экономии электроэнергии

Этот пост предназначен для друзей, которые редко выключают настольный компьютер, но часто работают удаленно с домашнего настольного компьютера.

Мой основной рабочий компьютер и игровая машина - это одно и то же устройство, экран 4K 144 Гц, обычно я включаю дискретную видеокарту, что делает изображение более плавным при обычных операциях, но и потребление энергии также значительно больше.

На приведенных ниже снимках экрана мощность измеряется одновременно с маленьким компьютером J4125, который потребляет около 18 Вт в обычном режиме, поэтому выводы могут быть неточными.

Когда игра не запущена, пиковая мощность при быстром перемещении мыши на рабочем столе может достигать 192 Вт

После отключения дискретной видеокарты частота обновления снижается до 60 Гц, пиковая мощность снижается до 120 Вт.

Когда я работаю удаленно из дома через тоннель, я использую входной уровень хоста Tencent, полоса пропускания небольшая, частота обновления на удаленной стороне составляет всего 30 Гц, в этом случае использование дискретной видеокарты не имеет смысла, можно рассмотреть возможность переключения на интегрированную видеокарту.

В большинстве случаев я не использую удаленный рабочий стол напрямую, а использую удаленную разработку vscode, преимущество в том, что она незаметна, занимает мало полосы пропускания и почти не отличается от локальной разработки.

При обычном редактировании кода потребление энергии составляет около 72 Вт, по сравнению с 120 Вт до отключения дискретной видеокарты, есть определенный эффект экономии энергии.

При использовании remote ssh для удаленной разработки можно использовать скрипт для отключения дискретной видеокарты.

Сохраните скрипт как switch_dedicate_graphic_cards.ps1, используйте его как switch_dedicate_graphic_cards.ps1 off

# Использование: switch_dedicate_graphic_cards.ps1 on|off

# Получение параметров
$switch = $args[0]

# Выход, если параметр не передан
if ($switch -eq $null) {
    Write-Host "Использование: switch_dedicate_graphic_cards.ps1 on|off" -ForegroundColor Yellow
    exit
}

# Получение устройств дисплея
$displayDevices =  Get-CimInstance -Namespace root\cimv2 -ClassName Win32_VideoController

# Если нет устройства дисплея или только одно устройство дисплея, выход
if ($displayDevices.Count -le 1) {
    Write-Host "Устройство дисплея не найдено."
    exit
}

# Получение дискретных видеокарт
$dedicatedGraphicCards = $displayDevices | Where-Object { $_.Description -like "*NVIDIA*" }

# Если нет дискретной видеокарты, выход
if ($dedicatedGraphicCards.Count -eq 0) {
    Write-Host "Дискретная видеокарта не найдена."
    exit
}

# Включение или выключение дискретных видеокарт
if ($switch -eq "on") {
    $dedicatedGraphicCards | ForEach-Object { pnputil /enable-device $_.PNPDeviceID }
    Write-Host "Дискретные видеокарты включены."
} elseif ($switch -eq "off") {
    $dedicatedGraphicCards | ForEach-Object { pnputil /disable-device $_.PNPDeviceID }
    Write-Host "Дискретные видеокарты выключены."
} else {
    Write-Host "Неверный параметр."
    Write-Host "Использование: switch_dedicate_graphic_cards.ps1 on|off" -ForegroundColor Yellow
}