我正在开发一种流媒体应用程序,可以在启动时将大量数据推送到显卡。 CPU在推送数据时做的很少,在接近零使用率的情况下闲置。
我想监控哪些机器在推送初始数据方面很挣扎,以及哪些机器可以应对,以便我能够为客户的硬件达到最低建议规格。
我发现具有PCIe 1.1 x16插槽的PC很难通过显卡推送初始数据。
我的开发PC有一个PCIe 2.0 x16插槽,它可以处理最初推送到显卡的大量数据。
我需要数字来证明(或反驳)我的观点。
我想要的是能够确定:
显卡上有哪种插槽类型? 那个插槽的速度是多少? Gfx卡名称 Gfx卡驱动版本
但最重要的是,数据流经PCIe插槽 - 例如如果我能证明PCIe总线的数据是最大的,我可以指出它是瓶颈。
我知道系统内存速度也是这里的一个因素,例如:数据从RAM传输,通过PCIe总线传输到显卡,那么还有办法确定系统内存速度吗?
最后,我使用非托管C ++编写,因此访问.NET库不是一种选择。
答案 0 :(得分:1)
你是否在推送大量数据时遇到错误,或者你“只是”担心速度慢?
我怀疑是否有任何简单的方法来监控PCI-e带宽使用情况,如果可能的话。但是应该可以通过WMI和/或SetupAPI查询视频适配器所连接的总线类型 - 我没有个人经验或有用的链接,对不起。
答案 1 :(得分:1)
对于Nvidia GPU,您可以尝试使用NvAPI_GPU_GetDynamicPstatesInfoEx
:
Nvidia通过其GeForce驱动程序公开了一个编程接口 (" NVAPI")除其他外,允许收集性能 测量。对于技术倾向,这里是相关的 nvapi.h头文件中的部分:
功能名称:NvAPI_GPU_GetDynamicPstatesInfoEx
描述:此API检索NV_GPU_DYNAMIC_PSTATES_INFO_EX 指定物理GPU的结构。每个域的信息都是 索引在数组中。例如:
- pDynamicPstatesInfo->利用率[NVAPI_GPU_UTILIZATION_DOMAIN_GPU]保存GPU域的信息。目前有四个域名 GPU利用率和动态P状态阈值可以是 检索:图形引擎(GPU),帧缓冲(FB),视频引擎 (VID)和总线接口(BUS)。
除了此标题评论之外,API的特定功能还不是 记录。以下信息是我们对它的最好解释 工作,虽然它依赖于很多猜想。
- 图形引擎(" GPU")指标预计会成为大多数游戏的瓶颈。如果你没有看到或接近100%的东西 else(就像你的CPU或内存子系统一样)限制了性能。
- 帧缓冲区(" FB")度量标准很有意思,如果它按预期工作。从名称来看,您希望它能够测量图形内存 利用率(使用的内存百分比)。这不是这个, 虽然。相反,它似乎是内存控制器的利用率 百分比。如果这是正确的,它将测量实际带宽 由控制器使用,否则不能用作 任何其他方式测量。
- 我们对视频引擎不感兴趣(" VID");它通常不用于游戏,并且通常会注册0%的单位。你' d 如果您通过ShadowPlay或视频编码视频,则只能看到拨号移动 流入盾牌。
- 总线接口(" BUS")指标再次以百分比形式表示PCIe控制器的利用率。相应的测量, 您可以在EVGA PrecisionX和MSI Afterburner中跟踪它 " GPU BUS使用"。
我们让Nvidia了解NVAPI的内部运作方式。它的 响应证实FB指标测量图形内存 带宽使用,但 Nvidia将BUS指标视为"考虑 不可靠,因此不在内部使用"
我们询问AMD是否有任何允许类似的API或功能 测量。经过内部验证,公司代表 确认他们没有。我们希望尽可能多 无法对AMD硬件进行类似测试。