3

我正在开发一个流媒体应用程序,该应用程序在启动时将大量数据推送到显卡。在推送数据时,CPU 做的很少,它闲置在接近于 0% 的使用率。

我想监控哪些机器在推送初始数据时遇到了困难,哪些机器可以应付,以便我可以为我们的客户硬件获得推荐的最低规格。

我发现带有 PCIe 1.1 x16 插槽的 PC 很难将初始数据推送到显卡上。

我的开发 PC 有一个 PCIe 2.0 x16 插槽,它可以毫无问题地处理最初推送到显卡的大量数据。

我需要数字来证明(或反驳)我的观点。

我想要的是能够确定:

显卡在哪个插槽类型?那个槽的速度是多少?Gfx 卡名称 Gfx 卡驱动版本

但最重要的是,PCIe 插槽上的数据流——例如,如果我可以证明 PCIe 总线的数据已达到极限,我可以指出这是瓶颈。

我知道系统内存速度也是一个因素,例如数据正在从 RAM 传输,通过 PCIe 总线传输到显卡,那么有没有办法确定系统内存速度呢?

最后,我使用非托管 C++ 编写代码,因此无法访问 .NET 库。

4

2 回答 2

2

对于 Nvidia GPU,您可以尝试使用NvAPI_GPU_GetDynamicPstatesInfoEx

Nvidia 通过其 GeForce 驱动程序公开了一个编程接口(“NVAPI”),除其他外,该接口允许收集性能测量。对于技术倾向,这里是 nvapi.h 头文件中的相关部分:

函数名称:NvAPI_GPU_GetDynamicPstatesInfoEx

描述:此 API 检索指定物理 GPU 的 NV_GPU_DYNAMIC_PSTATES_INFO_EX 结构。每个域的信息都在数组中编入索引。例如:

  • pDynamicPstatesInfo->utilization[NVAPI_GPU_UTILIZATION_DOMAIN_GPU] 保存 GPU 域的信息。目前有四个域可以检索 GPU 利用率和动态 P 状态阈值:图形引擎 (GPU)、帧缓冲区 (FB)、视频引擎 (VID) 和总线接口 (BUS)。

除了这个标题注释之外,API 的特定功能没有记录。下面的信息是我们对其工作原理的最佳解释,尽管它依赖于很多猜想。

  • 图形引擎(“GPU”)指标预计将成为大多数游戏的瓶颈。如果您没有在 100% 或接近 100% 时看到这一点,则其他东西(例如您的 CPU 或内存子系统)正在限制性能。
  • 帧缓冲区(“FB”)指标很有趣,如果它按预期工作的话。从名称上看,您会期望它测量图形内存利用率(使用的内存百分比)。但这不是事实。相反,它似乎是内存控制器的百分比利用率。如果这是正确的,它将测量控制器正在使用的实际带宽,否则无法以任何其他方式作为测量值。
  • 我们对视频引擎(“VID”)不感兴趣;它通常不用于游戏,并且通常为 0%。只有在通过 ShadowPlay 对视频进行编码或将视频流式传输到 Shield 时,您才会看到表盘移动。
  • 总线接口 (“BUS”) 指标再次以百分比表示 PCIe 控制器的利用率。您可以在 EVGA PrecisionX 和 MSI Afterburner 中跟踪的相应测量称为“GPU BUS Usage”。

我们要求 Nvidia 阐明 NVAPI 的内部工作原理。其回应证实 FB 指标衡量图形内存带宽使用情况,但Nvidia 认为 BUS 指标“被认为不可靠,因此未在内部使用”。

我们询问 AMD 是否有任何 API 或函数可以进行类似的测量。经过内部核实,公司代表确认他们没有。尽管我们愿意,但我们无法在 AMD 硬件上进行类似的测试。

于 2016-10-06T22:26:30.870 回答
1

您是否在推送大量数据时遇到错误,或者您“只是”担心速度慢?

我怀疑是否有任何简单的方法可以监控 PCI-e 带宽使用情况,如果可能的话。但是应该可以通过 WMI 和/或 SetupAPI 查询视频适配器连接到的总线类型 - 我没有个人经验或有用的链接,抱歉。

于 2010-09-21T10:01:48.023 回答