【问题标题】:Getting FPS and frame-time info from a GPU从 GPU 获取 FPS 和帧时间信息
【发布时间】:2020-04-06 18:27:26
【问题描述】:

我是一名数学家,而不是程序员,我对编程的基础知识有一定的了解,并且是 linux 和 windows 的高级用户。 我知道一些 C 和一些 python,但没什么。

我想制作一个叠加层,以便在我开始游戏时它可以获取有关 amd 和 nvidia GPU 的信息,例如帧时间和 FPS,因为我很确定当前用于比较两个 GPU 的系统基准测试存在缺陷,因为小实例以及瞬间提高 FPS 的场景(但与用户体验完全无关)会导致更高的平均 FPS 数并有意或无意误导市场(例如,我不记得游戏名称可能是 COD地图上高度镶嵌的实体,玩家甚至看不到,这导致 AMD GPU 在该区域漫游时似乎表现不佳,导致平均 FPS 计数降低)

我对如何在理论上计算 GPU 性能有一个想法,但我不知道如何从 GPU 中获取数据,您能否向我介绍 api 手册或参考资料以帮助我实现这样的叠加?

我想尽可能少地学习(我的意思是我想学习为了完成工作而必须学习的东西,我不打算成为一名编码员)。

我提前谢谢你。

【问题讨论】:

  • stackoverflow.com/questions/60661215/… 类似的问题。你可能想分叉一些类似OCAT 的东西,并在其中做你的事情。
  • 这很有用,我没有想到覆盖应该首先确定游戏使用的 API 我想收集我需要的数据但它不是同一个问题我想知道如何获得 FPS , 和帧时间信息(我想仅帧时间信息就足够了,但由于我们正在处理高时间分辨率,也许 FPS 也很方便)。
  • 嗯,不,问题略有不同,但根本问题是相同的:您想拦截任意应用程序的演示调用并进行覆盖。我链接的工具同时支持 DirectX 和 Vulkan,因此希望它们在很大程度上为您处理差异。当您拦截礼物时,这意味着您有帧时间。如果你有帧时间,你可以将它们聚合成 FPS(如果你的意思是每秒,而不仅仅是倒置的帧时间),或者你希望的任何其他方式。
  • 减去你想要的覆盖,你可能还想要PresentMon,它可以将当前时间输出到CSV(以及其他有趣的信息)。 PS:我可能误解了您所说的“叠加”的含义(通过叠加,我理解的是覆盖原始内容的东西,例如 Steam 叠加),所以这个工具可能是您想要的。要我回答这个问题吗?
  • @papajo:“瞬间提升 FPS(但与用户体验完全无关)的小实例和场景会导致更高的平均 FPS 数”平均工作。那么,你有统计问题吗?这与用户体验的相关程度取决于个人。就我个人而言,我更喜欢帧率中的一致性;我宁愿拥有稳定的 30fps 而不是 60fps,但主要是每秒或每秒 20fps。

标签: directx nvidia amd frame-rate vulkan


【解决方案1】:

自己编写代码并非易事。以下是一些预先存在的开源选项:

要获取计时信息并绘制自定义叠加层,您可以使用(和修改)OCAT 之类的工具。它支持 Direct3D 11、Direct3D 12 和 Vulkan 应用程序。

要以 CSV 格式获取时间(和其他有趣的信息),您可以使用像 PresentMon 这样的命令行工具。应该在 D3D 中工作,我也一直在将它与 Vulkan 应用程序一起使用,它似乎可以接受它们。

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 2018-06-20
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2011-01-29
    • 1970-01-01
    相关资源
    最近更新 更多