从总体上来说,Windows 10是一个好系统,虽然我们天天戏称它为“Bug 10”,但不可否认的是,从立项以来,开发团队就一直在努力为它加入新的功能,其中有不少是相当实用的。
比如说,他们在1709这个大版本中,为任务管理器加入了GPU性能监控单元,用户可以通过任务管理器直观地看到目前的GPU占用率,比以往要开GPU-Z等程序方便了不少。
但很多用户在实际使用的时候也发现了,这个针对GPU的性能监控好像不太准,我显卡在全力计算的时候,任务管理器里面的GPU占用率怎么这么低?
比如我开个挖矿程序,显卡的占用其实是满的,但左边GPU窗格中显示的占用率只有3%
为了找出答案,我们找到了当时引入这项新功能时,开发者的讲解Blog,由于是与图形相关的内容,这篇Blog被归入DirectX Developer Blog中。
首先开发者给我们讲述了任务管理器是怎么得知GPU的占用情况的。在Windows 10上面,GPU通过Windows Display Driver Model(WDDM,Windows显示驱动模型)抽象,它的核心——图形内核——负责抽象、管理和在所有进程分配GPU资源。
它含有一个GPU事务器(VidSch)和一个视频内存管理器(VidMem),前者负责将GPU的各种引擎分配给想要使用它们的进程,并对访问进行仲裁和优先级排序,后者则是负责管理GPU可调用的内存——包括专用的显存和共享的系统内存。
任务管理器就是通过VidSch和VidMem回报的数据来计算GPU的使用情况的,这样一来,不管程序使用了什么API(DX、OpenGL、OpenCL,甚至CUDA、Mantle这种专有API都可以监控),它都能准确地收集GPU的占用情况,另外由于两者是实际负责分配GPU资源的,位于驱动层面,它们回报数据的精准度也要比很多第三方工具要高,使得任务管理器有很高的精度。
既然有很高的精度,那它为什么还是报不准我的GPU占用率呢?这就牵扯到另一个问题,GPU引擎。