Ale*_*x E 6 c# gpu nvidia performancecounter
所以我一直在用C#中的性能计数器类进行实验,并且在探测CPU计数器以及我在Windows性能监视器中找到的几乎所有内容方面都取得了很大的成功.但是,我无法访问"NVIDIA GPU"类别......
例如,以下代码行是它通常的工作方式.
PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
Run Code Online (Sandbox Code Playgroud)
该代码工作正常,但C#无法访问性能监视器中出现的GPU类别,就像处理器类别一样.以下代码行尝试访问它.
PerformanceCounter gpuCounter = new PerformanceCounter("NVIDIA GPU", "% GPU Usage","#0 Quadro K1100M(id=1, NVAPI ID=256)");
Run Code Online (Sandbox Code Playgroud)
相反,它会抛出"类别不存在"异常...
以下是性能监视器中的内容

这个类别显然存在,所以我的问题是......我如何访问这个柜台?
Ale*_*x E 10
花了六个小时后,我准备分享我的结果.有几种测试方法用于搜索此缺失的性能计数器.
1)第一个是对关键字的非常简单的搜索.这包括PerformaceCounterCategory以及在我的系统上运行的每个性能计数器实例(大约12,000个).这种方法没有找到任何与GPU或NVIDIA相关的东西,但却为CPU工作完美无缺.
2)通过以非常特定的%使用率运行GPU来执行下一个测试,并且执行搜索以评估在窄范围值内运行的每个百分比性能计数器.这种方法也没有返回与GPU相关的任何内容,但对于CPU来说再次完美无缺.
这导致一个结论.真的没有GPU的性能计数器,即使在假别名下也是如此.
它没有任何地方声明性能监视器必须明确使用性能计数器,并且这一点的一小部分提示我们一直盯着我们.性能监视器中的实例变量标记为"NVAPI ID = 256".NVIDIA API旨在为NVIDIA硬件提供性能监控功能.虽然它可以执行与性能计数器类似的操作,但它不使用相同的数据类型来执行其任务.我们现在有证据表明性能监视器使用NVAPI来收集信息而不是使用性能计数器.这是非常误导的,因为每个其他条目对应一个计数器.因此,我们可以得出结论,访问这些变量的唯一正确方法是通过NVAPI.
我首先从NVIDIA网站下载NVAPI,然后成功完成了这项工作.
接下来,我发现用一些示例代码在这里从使用开放硬件监控的源代码,和博客在这里从这个网站的其他职位.
代码是用C++编写的,但是在移动一些库并生成一些.dll之后,一切都很好地接口到C#.
这是结果的图片.谢谢大家的帮助和支持!
| 归档时间: |
|
| 查看次数: |
4853 次 |
| 最近记录: |