NVIDIA On-Demand 选项如何在 NVIDIA X 服务器设置中工作?

Md *_*ani 40 nvidia graphics hybrid-graphics nvidia-prime

我已经在 Ubuntu 19.10 上安装了 Nvidia 专有驱动程序。
在 Prime Profiles 部分,有三个选项:
* NVIDIA(性能模式)
* NVIDIA On-Demand
* Intel(节能模式)

第一个和最后一个选项很明显,但我不知道第二个选项是如何工作的。它如何检测哪些应用程序需要 NVIDIA 驱动程序,哪些不需要?

Md *_*ani 25

好吧,我终于想通了。此刻,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

  • 值得注意的是:与任何环境变量一样,您可以在运行特定应用程序时临时设置它们。例如,如果你想将 `glxgears` 卸载到你的 NVIDIA 硬件,执行 `__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxgears -info`(`-info` 应该让你检查它实际上是在你的 NVIDIA 硬件上渲染) (5认同)

Win*_*nix 12

来自:第一部分安装和配置说明

第 35 章 PRIME 渲染卸载

PRIME 渲染卸载是让 X 屏幕由一个 GPU 渲染的能力,但选择该 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}Version

在撰写本文时,这些提交仅在 X.Org X 服务器的 master 分支中,尚未在任何官方 X.Org X 服务器版本中。


Ste*_*ger 10

作为Md Narimani 回答的扩展:我可以确认这实际上对我在 kubuntu 19.10 和 nvidia 驱动程序版本 440 上工作

一些背景信息可以在第 34 章找到。 PRIME Render Offload

您也可以在 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

Run Code Online (Sandbox Code Playgroud)