C(Windows) – GPU使用率(负载百分比)

据互联网上的许多消息来源,使用D3DKMTQueryStatistics可能获得GPU使用(负载)。

如何查询DirectX中的GPU使用情况?

我已经成功地从这里使用代码获取内存信息,稍作修改: http ://processhacker.sourceforge.net/forums/viewtopic.php?t=325#p1338

但是我没有findD3DKMT_QUERYSTATISTICS结构的成员,它应该携带关于GPU使用情况的信息。

看看EtpUpdateNodeInformation中的EtpUpdateNodeInformation函数。 它查询每个GPU节点的进程统计信息。 每个图形卡可以有多个处理节点:

 queryStatistics.Type = D3DKMT_QUERYSTATISTICS_PROCESS_NODE ... totalRunningTime += queryStatistics.QueryResult.ProcessNodeInformation.RunningTime.QuadPart ... PhUpdateDelta(&Block->GpuRunningTimeDelta, totalRunningTime); ... block->GpuNodeUsage = (FLOAT)(block->GpuRunningTimeDelta.Delta / (elapsedTime * EtGpuNodeBitMapBitsSet)); 

它收集过程运行时间和实际时间间隔。