XNA GPU性能(1)——理解GPU性能

来源:互联网 发布:java调用http post接口 编辑:程序博客网 时间:2024/05/22 00:07

译自Shawn Hargreaves Blog(http://blogs.msdn.com/b/shawnhar/)


当C#代码执行缓慢时,你可以通过分析性能数据(Profile)找出时间被消耗在哪些地方。


图形编程人员就没有这么幸运了。如果你在一家商业游戏工作室工作,并且有机会接触到XBOX开发套件的话,你会发现XBOX版的PIX可以给出几乎同CPU性能分析数据一样详细的GPU性能数据,但对于其他开发人员来说,GPU仍然是一个无法轻易测量性能的神秘黑盒。


我喜欢把探测GPU性能想象成一桩夏洛克·福尔摩斯的谜案:

  • 性能小姐死了。
  • 是谁杀害了她?
我们必须留心蛛丝马迹,形成推理,然后直面凶手使其认罪。

不过相比于福尔摩斯先生来说,我们具有一个优势,那就是我们拥有让时间倒流的能力,我们可以对程序进行细微的修改,然后反复地运行它。这是一种极其强大的能力。假设我们有证据怀疑是「黄上校(Colonel Mustard)」在图书馆用烛台杀死了性能小姐。为了验证我们的推理,我们可以将渲染烛台的代码注释掉,然后再次运行程序。性能小姐是否依旧被杀了?如果她活了下来,我们便知道烛台就是「凶器」,从而可以进一步调查使用了多少多边形构建这个烛台,或者是否使用了开销十分昂贵的着色效果来渲染它。

这种探案方式想要卓有成效必须具备两个条件:
  1. 你需要一种精确的方式来判断性能小姐是活着、已经被杀还是仅仅陷入昏迷。在这你可以知道如何显示游戏帧率,在这篇文章的末尾你可以了解如何为测量性能做一些特别的配置,包括解除帧率锁定和关闭垂直同步。通常情况下你是需要这两个特性的,但在你想要检查性能小姐是否还有心跳时,你应该暂时把它们关闭。
  2. 你还需要在头脑中对GPU硬件工作的方式有一个良好的认识。是什么让我们怀疑「凶器」是烛台?我怎么知道「凶器」不是铅棍?如果没有对硬件良好的理解来辅助我们猜测,我们只会把时间浪费在随机地检查一个又一个物件上。GPU的性能是高度非线性的,所以你经常会发现移除一整个物体模型根本无济于事,但在另一个不同的模型上做一些看似无足轻重的修改就能让游戏的帧率翻倍。对那些缺乏经验的初学者来说,这些结果看起来相当没有规律,对此,请还保持淡定……
————————————————
Chobi-Q欢迎转载,转载请注明出处。

原创粉丝点击