NVIDIA On-Demand: запуск конкретных приложений на дискретном графическом процессоре (dGPU)

Вопрос или проблема

Я включил новую опцию “NVIDIA On-Demand” в настройках NVIDIA X Server. Теперь всё по умолчанию использует iGPU, что должно положительно сказаться на времени работы батареи (по крайней мере, на это я надеюсь).

Я хотел бы, чтобы некоторые приложения (например, Blender) использовали dGPU по умолчанию.

Согласно документации:

Чтобы настроить графическое приложение для выгрузки на экран NVIDIA GPU, установите переменную окружения __NV_PRIME_RENDER_OFFLOAD в 1. Если графическое приложение использует Vulkan или EGL, этого должно быть достаточно. Если приложение использует GLX, тогда также установите переменную окружения __GLX_VENDOR_LIBRARY_NAME в nvidia, чтобы GLVND загружал драйвер NVIDIA GLX.

Итак, я просто создал скрипт оболочки, чтобы он работал как прокси для исполняемого файла Blender:

~/.local/bin/blender

#!/usr/bin/env bash
export __NV_PRIME_RENDER_OFFLOAD=1
export __GLX_VENDOR_LIBRARY_NAME=nvidia
blender="$HOME/opt/blender-2.82a-linux64/blender"
exec -a "$0" "$blender" "$@"

Это работает нормально, но не является особенно чистым решением.

В настройках NVIDIA есть раздел “Application Profiles”, где можно добавить профили для конкретных приложений.
(Документация по профилям приложений)
Там есть все виды опций, связанных с OpenGL, но я не смог найти ни одной настройки для выбора используемого GPU. Это невозможно с помощью профилей приложений? Есть ли более чистая альтернатива переменным окружения?

Что сработало для меня, так это добавление этих строк в файлы .desktop приложений, которые я хочу использовать на dGPU по умолчанию.

PrefersNonDefaultGPU=true
X-KDE-RunOnDiscreteGpu=true

Это также заменяет опцию запуска с использованием дискретной графики на запуск с использованием интегрированной графики. Это работает на Ubuntu 22.04, не уверен насчет обратной совместимости, но я полагаю, что это должно работать на impish, focal и bionic также.

Ответ или решение

NVIDIA On-Demand: Настройка запуска приложений на дискретном GPU

Использование технологии NVIDIA On-Demand позволяет вам автоматически переключаться между интегрированной графикой (iGPU) и дискретной видеокартой (dGPU) в зависимости от ресурсных требований запускаемых приложений. Это не только улучшает производительность, но также может существенно продлить время автономной работы устройства, так как большинство задач может обрабатываться менее энерготребным iGPU.

Как использовать дискретный GPU для отдельных приложений

Если вы хотите, чтобы определённые приложения, такие как Blender, использовали дискретный GPU по умолчанию, следуйте инструкциям ниже:

  1. Переменные окружения для переноса графики
    Основной метод переноса графики на dGPU заключается в установке специальных переменных окружения. Для приложений, использующих Vulkan или EGL, достаточно установить переменную __NV_PRIME_RENDER_OFFLOAD в значение 1. Если приложение использует GLX, также необходимо установить переменную __GLX_VENDOR_LIBRARY_NAME в nvidia.

    Вы можете создать скрипт, который будет запускать нужное приложение с этими параметрами:

    #!/usr/bin/env bash
    export __NV_PRIME_RENDER_OFFLOAD=1
    export __GLX_VENDOR_LIBRARY_NAME=nvidia
    blender="$HOME/opt/blender-2.82a-linux64/blender"
    exec -a "$0" "$blender" "$@"

    Такой подход работает, но может показаться не очень элегантным и гибким.

  2. Использование .desktop файлов в Linux
    Более изящным решением может быть изменение десктопных файлов (файлов .desktop) для приложений. Вставьте в эти файлы следующие строки:

    PrefersNonDefaultGPU=true
    X-KDE-RunOnDiscreteGpu=true

    Эти строчки обеспечат использование дискретной видеокарты для выбранных приложений по умолчанию. Данное решение было протестировано на Ubuntu 22.04 и, скорее всего, совместимо и с более ранними версиями, такими как Impish, Focal и Bionic.

  3. Ограничения секции профилей приложений в NVIDIA X Server Settings
    В NVIDIA X Server Settings существует раздел "Профили приложений", но на текущий момент он не позволяет настраивать выбор GPU по умолчанию для конкретных приложений. Если ваша цель — оптимизация графической мощности для определённых программ, использование переменных окружения или изменение .desktop файлов будет более подходящим.

Заключение

Используя технологии гибкого управления графикой от NVIDIA, вы можете варьировать нагрузку между интегрированной и дискретной графикой, что позволяет добиваться повышения производительности и продления времени автономной работы системы. Оптимальный метод настройки зависит от ваших предпочтений и операционной системы, но предложенные варианты предоставляют широкие возможности для кастомизации.

Оцените материал
Добавить комментарий

Капча загружается...