Программная установка NvOptimusEnablement для программ OpenGL на основе Python

Есть ли способ программно установить флаг NvOptimusEnablement для приложения на основе Python, использующего OpenGL (и, в частности, для приложений, использующих Qt) из скрипта Python?

Все ссылки, которые я видел до сих пор - например. Программный выбор интегрированной графики в nVidia Optimus или https://stackoverflow.com/a/39047129/6531515 - для C/C++, где флаг должен быть установлен как глобальное определение который скомпилирован в исполняемый файл, но, очевидно, в данном случае это не сработает.

Единственные варианты:

  1. Создайте собственную оболочку интерпретатора Python с этим установленным флагом (например, https://github.com/cprogrammer1994/optimuspy), ИЛИ
  2. Заставить пользователей явно помечать Python / pyinstaller-created-binary как требующий графического процессора Nvidia для каждой используемой ими машины?

person Joshua Leung    schedule 26.09.2020    source источник


Ответы (1)


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

Поэтому нет другого пути, кроме как запустить интерпретатор Python, скомпилированный с этим флагом, или настроить, какой графический процессор Python.exe должен использовать, из панели управления Nvidia.

Однако, когда вы публикуете приложение с помощью pyinstaller, можно скомпилировать загрузчик, чтобы выставить эти флаги, поскольку это точка входа вашей программы. Вам просто нужно добавить это в main.c: (или использовать мой форк pyinstaller: https://github.com/pvallet/pyinstaller )

__declspec(dllexport) unsigned long NvOptimusEnablement = 0x00000001;
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;

В этом посте объясняется, как это сделать: как перекомпилировать загрузчик Pyinstaller

person pvallet    schedule 10.05.2021