就在上周,我使用Bing AI时,发现单位老机子的风扇响个不停,开始没在意,后来在Bing的对话框长度越来越长后,电脑震动的越来越厉害,所以习惯性打开的WIN10的任务管理器一看,好家伙,Edge浏览器的GPU占用好高,达到了30%-40%,处于一种分析问题的本能,我开始了接下来的各种实验,希望能找到根源。
本人的单位电脑是i3-4130,内存16G DDR3,集成显卡。
我开始是以为我的电脑配置问题导致的, 所以试了下家里的电脑i3-9100t,还是有10-20%的GPU占用,显然这是不正常的,我换了台独显(GTX-750)再试,还是一样的超过10%的占用。
然后我开始怀疑是Bing AI的网页问题,而且我发现一个问题,只要当前网页不是Bing AI或Copilot时,或者最小化Bing AI时,GPU占用都几乎为0。我对比了其他网页,比如GPT、视频网站等,包括不停翻动网页,最大的占用也不会超过20,(GPT生成代码时占用很低,只有0.5-1%),显然时Bing AI网页的问题,因为不单单是在生成回答时占用高,连上下翻动Bing的对话网页也很高。
我估计看到这里,有些网友都要怀疑微软是不是偷偷在生成AI回答时,做什么计算,好减轻它云计算的压力了。我当时也是抱有这个想法,当时怀疑是不是微软在Edge浏览器中藏了什么后门,所以我搜索了下GPT,怎么才能分析出GPU占用高的程序的代码位置,它给出我下面的答案。
这么多工具,我选择了GPUView用用看, 这是一个微软的实习生编写的工具,使用Bing AI找到它的下载方法:
GPUView 是一个用于分析和诊断Windows系统中图形处理单元(GPU)性能的工具。您可以通过以下方式获取GPUView:
-
Windows Performance Toolkit (WPT):
- GPUView和其他相关文件包含在Windows Performance Toolkit(WPT)中,这是Windows评估和部署工具包(ADK)的可安装选项。
- WPT MSI(Microsoft软件安装程序)会安装多个文件和目录,其中包括一些GPUView特定的文件。
- 您可以从这里下载WPT。
-
安装步骤:
- 下载并安装WPT。
- 默认安装目录位于
\\Microsoft Windows Performance Toolkit
目录下,例如x86平台的WPT可能安装在类似\\Program Files (x86)\\Windows Kits\\10\\Windows Performance Toolkit\\gpuview
的目录中。 - 您也可以选择自定义安装选项,以自定义二进制文件和相关支持文件的位置。
至于更多使用介绍,请查看如下链接(Matt 的网页角 - GPUView (stanford.edu)) ,使用此软件时,就是它需要先打开系统记录事件功能,先录制一段GPU事件,然后会合并保存为Merged.etl文件,用GPUView.exe打开它就可以看了。其中还有一个坑,录制时,需先运行log.cmd,命令提示符脚本,先开一个cmd,把这个脚本拖进去运行,不然后一闪而过,啥输出也看不到,运行后会报错"此时不应有4000",网上的解决方法是,用记事本打开这个log.cmd,搜索"if %TRACE_LOGGING_MEMORY% Gtr 4000 goto Set_Large_Buffers"这句代码(没有引号),然后在代码上面添加上"goto Set_Large_Buffers",至于原因是因为这个微软实习生编写时,没有考虑到多语言的问题,所以除了英文的其他国家都会报错,具体看这个链接(Solving GPUView 4000 was unexpected at this time error. – Yosoygames)
添加代码后,运行修改后的log.cmd,就不会报错了,然后我们操作下Bing AI,把gpu占用高事件的记录下来,然后再次点击log.cmd关闭记录,接着程序就会自动合并一个Merged.etl,然后和上面说的一样用GPUView打开就可以了。
详细情况可以看上图,我们需要的就是左侧列表中的线程运行GPU占用高的代码偏移地址,可以给我们调试代码使用。
现在我们可以使用任意的调试工具,如X64dbg、Wingdbg、IDA等加载msedge.exe查看分析上面得到的偏移地址。这里我选择windbg,使用它的附加功能,附加到msedge中去,我们可以看到有很多msedge线程,选择我们在GPUView得到的PID就可以了(请看上图最左侧,因为本文是后写的,所以windbg中的PID和GPUView中不一样,实际请忽略这个问题)。
幸运的是,微软提供了msedge的符号表,我们可以查看里面的程序方便一点,输入u msedge.exe+0x125FD0,可以看到如下的反汇编代码:
显然msedge.exe+0x125FD0的偏移地址和主程序的0号线程是一个东西,那我们切换到0号线程看看,输入命令~0s,如下图:
在stack堆栈里发现了一个有趣的函数,msedge!base::MessagePumpForUI::WaitForWork,问问GPT看看,得到如下说明:
分析到这,情况逐渐明朗,显然这是一个Chromium的代码库里的函数,有处理渲染等作用,显然应该找Chrome浏览器渲染方面的资料,于是我搜索了Chrome浏览器GPU占用高的问题,倒是有几个帖子如下:
Chrome 的 GPU 进程的背后 | ladjzero's blog
这篇文章简单解释了下Chrome浏览器GPU工作的原理。
Chrome中的GPU加速合成_skia 的 opengl 后端(ganesh)-CSDN博客
这篇文章详细说明了Chrome的GPU渲染的原理、构架等方面的内容,相当不错。
上面的文章中,提到一个东西,如下:
显然所有的关键就是CSS样式表里调用了transform,为了验证,我又问了下BING,如下:
那我们来验证下BING AI网页里是否调用了GPU加速。选择好网页,按F12打开edge浏览器的开发者模式,如下图:
点击源代码选项卡,按ctrl+shirt+F快捷键搜索下"transform:"得到超多的transform结果,显然微软在Bing AI里大量调用了GPU加速渲染,所以是GPU占用相当高,顺便说一句,css的transform渲染在IE、火狐、chrome、edge等主流浏览器都能开启gpu加速,终于知道了原因,现在来说下解决方法。
我搜索了下chrome浏览器GPU占用高的网友帖子,有不少,既然chrome不行,我们试试火狐浏览器,结果如下图:
文章来源:https://www.toymoban.com/news/detail-761021.html
我的分析完成,收工了,各位下周见! 文章来源地址https://www.toymoban.com/news/detail-761021.html
到了这里,关于关于使用Bing AI或Copilot时GPU占用高的问题分析与解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!