我在 Ubuntu 19.10 上安装了 Nvidia 专有驱动程序。
在 Prime Profiles 部分,有三个选项:
* NVIDIA(性能模式)
* NVIDIA On-Demand
* Intel(省电模式)
第一个和最后一个选项很明显,但我不知道第二个选项是如何工作的。它如何检测哪个应用程序需要 NVIDIA 驱动程序,哪个不需要?
答案1
好的,我终于明白了。目前看来,NVIDIA 可以为 OpenGL 和 Vulkan 应用程序进行卸载渲染。
为了启用此卸载渲染,您必须将 Prime 配置文件设置为“按需”,然后对于 Vulkan 卸载,您必须将此变量放入文件中/etc/environment
:
__NV_PRIME_RENDER_OFFLOAD=1
对于 OpenGL 应用程序,您必须输入以下变量:
__NV_PRIME_RENDER_OFFLOAD=1
__GLX_VENDOR_LIBRARY_NAME=nvidia
重新启动后,它将开始渲染卸载。
为了检查正在使用哪个显卡,您可以在终端中输入以下命令:
glxinfo | grep vendor
答案2
第 35 章 PRIME 渲染卸载
PRIME 渲染卸载是指让一个 GPU 渲染 X 屏幕,但选择该 X 屏幕中的某些应用程序在另一个 GPU 上渲染。此功能与动态电源管理结合使用时特别有用,可让 NVIDIA GPU 保持关闭状态,除非需要渲染某些性能敏感的应用程序。
渲染大部分 X 屏幕的 GPU 称为“接收器”,而将某些应用程序渲染“卸载”到的 GPU 称为“源”。渲染卸载源生成在渲染卸载接收器上呈现的内容。NVIDIA 驱动程序可以充当 PRIME 渲染卸载源,以卸载 GLX+OpenGL 或 Vulkan 的渲染,呈现到由 xf86-video-modesetting X 驱动程序驱动的 X 屏幕上。
X 服务器要求
NVIDIA 的 PRIME 渲染卸载支持需要 X.Org X 服务器中的以下 git 提交:
7f962c70 - xsync:在 SyncCreate 内添加资源,导出 SyncCreate
37a36a6b - GLX:添加每个客户端供应商映射
8b67ec7c - GLX:使用发送客户端查找 XID
56c0a71f - GLX:添加更改客户供应商列表的功能
b4231d69 - GLX: 设置 GlxServerExports::{major,minor} 版本
在撰写本文时,这些提交仅在 X.Org X 服务器的主分支中,尚未出现在任何官方 X.Org X 服务器版本中。
答案3
作为扩展Md Narimani 的回答:我可以确认这在带有 nvidia 驱动程序版本 440 的 kubuntu 19.10 上确实有效
一些背景信息可以在以下网址找到第 34 章 PRIME 渲染卸载
您还可以在 GUI 中设置‘按需’选项:Nvidia X Server Settings - PRIME Profiles: NVIDIA On-Demand
然后重新启动。
然后您可以直接从命令行使用环境变量启动您的应用程序 - 这样您就可以根据需要切换 GPU:
stefan@stefan-Zen:~$ glxheads :0
Name: :0
Display: 0x556081a45d40
Window: 0x7000002
Context: 0x556081a64a70
GL_VERSION: 3.0 Mesa 19.2.8
GL_VENDOR: Intel Open Source Technology Center
GL_RENDERER: Mesa DRI Intel(R) UHD Graphics 630 (Coffeelake 3x8 GT2)
stefan@stefan-Zen:~$ __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxheads :0
Name: :0
Display: 0x55f6dd9097a0
Window: 0x7000002
Context: 0x55f6dd944878
GL_VERSION: 4.6.0 NVIDIA 440.64
GL_VENDOR: NVIDIA Corporation
GL_RENDERER: GeForce RTX 2060/PCIe/SSE2
答案4
根据@md-narimani 和@dominick-pastore 的回答,实际上已经为此目的准备好了一些 shell 脚本,作为软件包的一部分nvidia-prime-applet
。
您可以将它们放在您通常使用的任何命令之前。
nvidia-optimus-offload-glx glxheads :0
nvidia-optimus-offload-vulkan vkcube
但这仅在 nvidia 内核驱动程序正确加载,并且 Xorg 正确生成 Nvidia 屏幕时才会起作用,您可以通过以下方式测试:
cat /var/log/Xorg.0.log | grep -i NVIDIA
# it should output a bunch of lines with "NVIDIA(G0)"
如果屏幕检测不正确,则创建/etc/X11/xorg.conf.d/nvidia.conf
并填充以下说明中的内容:第 34 章 PRIME 渲染卸载正如@stefan-krüger所提到的。