【问题标题】:Programically setting NvOptimusEnablement for Python-based OpenGL Programs以编程方式为基于 Python 的 OpenGL 程序设置 Optimus Enablement
【发布时间】:2021-01-12 07:07:55
【问题描述】:

有没有办法在 Python 脚本中以编程方式为使用 OpenGL(尤其是使用 Qt 的应用程序)的基于 Python 的应用程序设置 NvOptimusEnablement 标志?

到目前为止我看到的所有参考资料 - 例如Programmatically selecting integrated graphics in nVidia Optimushttps://stackoverflow.com/a/39047129/6531515 - 用于 C/C++,需要将标志设置为编译到可执行文件中的全局定义,但显然在这种情况下不起作用。

是唯一的选择:

  1. 使用此标志集创建自定义 Python 解释器包装器(例如 https://github.com/cprogrammer1994/optimuspy),或者
  2. 强制用户将 Python / pyinstaller-created-binary 明确标记为他们使用的每台机器都需要 Nvidia GPU?

【问题讨论】:

    标签: python opengl pyqt5 nvidia optimus


    【解决方案1】:

    问题是在创建进程时系统必须知道这些标志。这是有道理的,因为此时可以开始分配 GPU 资源。它们仅在从运行的可执行文件或静态链接到它的库中公开时才有效,它不适用于动态链接的库。

    因此,除了运行已使用此标志编译的 Python 解释器,或从 Nvidia 控制面板配置 Python.exe 应使用的图形处理器之外,别无他法。

    但是,当您使用 pyinstaller 发布应用程序时,可以编译引导加载程序以公开这些标志,因为它是您程序的入口点。您只需将其添加到 main.c 中:(或使用我的 pyinstaller 分支:https://github.com/pvallet/pyinstaller

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

    这篇文章解释了如何做到这一点:how to recompile the bootloader of Pyinstaller

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多