0x00 楔子
最近客户在使用我们的的三维可视化平台的时候,总是会出现浏览器崩溃,webgl context lost的情况。这种请一般出现在电脑配置很低的电脑上,比如没有独显,只有很小现存的集成显卡的电脑。
但是客户的电脑大部分都是配置还不错,有独立的显卡。
image.png
经过摸索和分析,最终发现了问题所在:就是电脑根本没有用上独立显卡,也就是说虽然硬件上有独立显卡,但是实际上三维程序还是用的集成显卡,导致跑不动三维程序。
如何判断三维程序是否用上了独立显卡呢,其实我们可以打开电脑的任务管理器,打开"性能"标签,一般可以看到两个GPU(Intel开头的是集成显卡,NVIDIA开头的是独立显卡)
image.png
从图中,可以看出 GPU0(集显) 使用率搞到88%,而GPU1(独显) 使用率却未0,表示三维应用程序未使用独显。
0x01 原因探究
经过测试,发现电脑不使用独立显卡的原因大概分为几类:
驱动未正确安装
独立显卡的驱动未安装,或者显卡的驱动未正确安装,导致电脑的独立显卡不能使用。可以通过电脑的设备管理器查看是否又独立显卡的适配器,如果没有,多半是未有安装显卡驱动。
显示器未接独立显卡
如果是台式机接主板自带的VGA/DVI/HDMI都是核显负责输出和运算,不接独显的接口不能发挥任何作用。反之,接了独显,那么CPU核显也会自动屏蔽不发挥作用。典型的例子就是你接了独显,比如N卡,只会有一个NVIDIA控制面板,而不会再出现一个英特尔核芯显卡控制界面。
如果是笔记本的话,一般带DP接口的一定是独显接口,其他接口如HDMI,VGA都是核显输出,但是笔记本硬性规则都是核显负责画面输出,独显负责需要运行的3D应用程序,这是英特尔强制规定的,所以笔记本除了有N卡独显的NVIDIA控制面板以外,还会有英特尔核芯显卡控制面板。值得注意的是,在6代以后的笔记本,有些bios提供了屏蔽核显的选项,有些是可以允许自由切换,或者一些超高端的笔记本,显卡为1070,1080甚至1080 SLI的,直接出厂就屏蔽了核显,没有这个核显的需要。测试都表明,核显在1070以上的笔记本机型,某些优化不到位的游戏会拖累独显性能,导致帧数下降,整体也比单独运行独显帧数要稍低。
程序指定使用集显
笔记本电脑,电脑可以同时使用集显和独显。
打开电脑NVIDIA 控制面板,可以指定程序使用独显还是集显,如下图所示:
image.png
image.png
如果指定了浏览器,比如chrome使用集成显卡,那么webgl也不会用到独立显卡。
0x02 如何解决
其实看了前面的“原因探究”,可以很方便的给出相应的解决方案。
如果未安装显卡驱动,就安装显卡驱动即可。安装的时候,需要注意选择正确的版本。
如果是台式机,检查显示器接头是否接在独立显卡的接口上,如果接在集成显卡的接口上,改变接口即可。
如果是程序指定了集显,改成使用独显即可。
过程不在详述。
0x03 结语
如果发现电脑配置不错,但是简单的三维应用很卡,多半是上述原因。