我正在使用 NVIDIA Optimus GPU State Viewer 并同时运行 android 模拟器,并且大多数时候它显示 GPU 状态:闲置的,但有时它会闪烁在持续几毫秒,
我的问题是,这是正常行为吗?如果是,那么如此快速地切换 GPU 是否会有害?
还有一点需要注意的是,我使用的是笔记本电脑,因此只有在插入笔记本电脑时才会出现这种行为,否则它(GPU 状态查看器)仅显示 GPU 状态:离开
答案1
这是 NVIDIA Optimus 实际工作方式的副作用。
作为参考,常规独立 GPU 设置渲染单帧的一般事件顺序如下:
- CPU 收集渲染帧所需的数据并将其发送给 GPU。
- GPU 渲染帧。
- 然后,GPU 通过视频输出发送该帧。
然而,当使用带有 NVIDIA Optimus 的独立 GPU 时,事情变得更加复杂:
- CPU 收集渲染帧所需的数据并将其发送给独立 GPU。
- 独立 GPU 渲染帧。
- 然后将渲染的帧发送到集成 GPU(我不知道这是由 CPU 介导的还是作为从一个 GPU 到另一个 GPU 的 DMA 传输完成的,但这与本次讨论无关)
- 然后,集成 GPU 通过视频输出发送帧。
这样做是为了避免对视频输出进行硬件多路复用(这是第一代混合 GPU 设置的主要限制来源),也是 NVIDIA Optimus(和 AMD 混合显卡)设置的性能比仅使用相同的 GPU 略差的主要原因。
然而,实际上情况要复杂一些,因为使用哪个 GPU 来渲染帧是由每个应用程序。这意味着当你打开多个应用程序时,帧的不同部分可能会由不同的 GPU 渲染,然后由集成 GPU 合成为最终帧。
因此,只有当实际有应用程序正在运行且需要使用独立 GPU 时,并且该应用程序正在更新其在屏幕上的状态时,才会使用独立 GPU。您的 Android 模拟器几乎肯定会进行 Direct X 或 DXVA 调用,这会导致 Optimus 使用独立 GPU(这是在应用程序启动时确定的,而不是在应用程序运行时动态确定的),但由于它是一个模拟器,因此它可能只会在模拟显示器的内容确实发生变化时调用主机系统来更新其显示的内容,因此它不会不断使用主机上的 GPU。