对于 GPU 来说,“接收器输出、源输出、接收器卸载、源卸载”是什么意思?

对于 GPU 来说,“接收器输出、源输出、接收器卸载、源卸载”是什么意思?

我正在阅读这一页了解如何设置混合 GPU 计划。但标题中列出的术语是什么意思呢?

答案1

啊,PRIME,也称为“为什么这永远行不通”。下面是冗长的解释……

因此,我假设您已经拥有(和我一样)一台至少有两块显卡的计算机。在某些系统上,它们共享您的计算机图形输出并通过某种切换机制连接到它们,这种机制通常称为 MUX(指多路复用器),因此您基本上可以在 BIOS(或 UEFI)中设置一个参数,确定哪块显卡应该在哪个输出上或连接到哪个输出。

然而,大多数系统都采用了更便宜、更复杂的替代方案共享图形缓冲区。这意味着,例如,您的标准低功耗集成卡始终连接到您的显示器,并且在该输出上绘制的所有像素都必须不知何故通过这张卡。

如果您运行的都是轻量级应用程序,那么您可能只会使用内置卡。但有时您想使用功能强大的外置卡来计算所有这些 3D 内容,因此您必须告诉 xrandr

  • 外部卡正在做一些工作(所有具有环境变量DRI_PRIME=1的程序都获得)。
  • 内部卡必须将外部卡的数据放入外部卡上未计算的内容中,并在屏幕上绘制所有内容。

这就是所谓的 ”GPU卸载” ,而外部卡在此上下文中是“卸载源“,而内部卡是“卸载接收器“(因此数据流从源流向接收器),您可以使用以下命令启用此功能(如果默认情况下未启用)

xrandr --setprovideroffloadsink source_provider sink_provider

其中source_providersink_provider可能是您的图形驱动程序的名称,例如nouveauIntel

然而,在某些系统上,一些视频输出连接到外部的卡。这意味着,负责处理不同程序屏幕空间的内部卡必须以某种方式将其输出发送到外部卡,然后外部卡只需在其输出上绘制像素即可。在这种情况下,数据从来源一张卡输出另一个,为了启用它,您必须使用。

xrandr --setprovideroutputsource output_provider source_provider

其中output_provider是连接有先前无法访问的输出的外部卡的名称,source_provider是集成卡,可以进行数据处理,但无法绘制到连接在外部卡上的输出。

最后,如果您同时启用这两种方法(这种情况可能发生),图形密集型应用程序的内容将在“好”卡上计算,发送到“差”卡,与屏幕空间的其余部分一起处理,有时又发送回“好”卡,然后将其绘制在屏幕上。所有这些的缺点是,所有“屏幕空间处理”(也称为渲染)都在“差”卡上完成,这可能会很慢。

为了解决这个问题,您必须将执行所有渲染的卡(称为主 GPU)从集成卡更改为外置卡,而这(据我所知)如果不重新启动 X 服务器就无法完成,并且需要您摆弄 Xorg 配置文件。

如果您愿意,我可以为您提供大量有关我如何进行设置的信息(Arch Linux,带有英特尔和 nouveau 驱动程序的联想 W530,i3wm),否则,我建议您阅读man xrandr

相关内容