2014-05-10 43 views
6

这个问题上来:游戏性能优化采访

您正在寻找在你的游戏的瓶颈,但没有你改变正在游戏中的任何速度更快,无论是什么在GPU管线或CPU。没有什么是尖锐的,缓慢似乎分布在各地。下一步你要怎么做?

我被吹捧了。这是一个诡计问题吗?在确定性能问题时,我总是认为这是您需要将所有事情都缩小的地方。我不认为它是mem分配,就像CPU perf中显示的那样。

+0

我不能完全肯定这是针对SO的话题。但我们会看到它是如何去... – Mysticial

+0

我可能会复制在不同的硬件上。不知道他们在找什么。 –

+1

很明显,你已经找到了解决方案 - “我会在SO上发布问题并等待结果”......我想这样的答案会使你的面试失败。 –

回答

0

也许这是关于思考更高效的算法。 “微型优化”有其局限性;例如,你可以完美地优化气泡排序,但是为了获得真正的大幅提速,你可以创造另一种排序算法。另外,在游戏中,您可能会引入不同种类的可调质量/速度(或精度/速度)折衷。通常所有游戏都有一些设置可以改变图形的细节水平。

0

您正在寻找在你的游戏的瓶颈,但没有你 变化正在使游戏得更快,无论是什么在GPU 管道或CPU。没有什么是尖锐的,而且缓慢似乎在各地都有分布。

这听起来像是Uniformly Slow Code的定义。让我们假设它实际上是什么意思(而不是一些I/O瓶颈或在循环中创建不必要的对象,或者为数据结构或算法等选择一些不好的选择)。

为了让代码更快一致,你通常不得不违背良好的做法,这就是为什么我通常停止优化我的代码时,它是一致的慢。 (我认为“停止优化”在采访中不是一个好的答案......)

让事情更快的一种方法是确定一个适当的小操作序列,将它们集中在一个地方,然后手动提高这些事;一些“手动内联”这些操作,然后对出现的代码进行高级简化。它需要良好的直觉,这可能值得做,并且对涉及的代码有很好的理解。 This answer calls it bunching and horizontal optimization.

如果您的真的的代码是一致的,那么可能需要考虑的另一件事是Andrei Alexandrescu's optimization tips

3

我想要了解更多信息。 “缓慢”是表现不佳的一个糟糕指标,并且是症状分类而不是症状本身。例如,你可以形容“慢”的存在:

  • 低帧率
  • 响应输入可怜
  • 高响应性和流畅的帧速率,但速度缓慢的游戏机制(即:玩家和实体顺利,但移动非常缓慢)
  • 在网络游戏的情况下,明显的网络延迟

所有这些问题有不同的潜在原因和解决方法:

  • 低但一致的帧率可能是由于您的游戏循环效率低下造成的。简单地运行你最喜欢的分析器可能表明大量的时间花在一段特定的代码上。例如,在我写的一个游戏中,我发现低FPS是一个不良循环的结果,这个循环在没有缓存的情况下多次计算实体之间的距离。在另一场比赛中,我发现我用来对地形进行查找的数据结构是O(N)而不是O(1)(python stdlib ... ick)。你无法诊断你看不到的问题,而剖析是第一道防线。
  • 响应不好可能是由于一些事情。如果FPS较高但控件响应缓慢,则用于访问控件的API可能会很糟糕。某些控制器可能有可能会导致响应失败的蹩脚驱动程序。它甚至可能是你的游戏循环:你可能根本不会频繁地检查控制器的输入(也许你没有检查每个勾号)。在前面提到的其中一个游戏中,我遇到了一个问题,某些操作会产生延迟效果:您会使用某个项目,并且游戏稍后会响应半秒钟。事实证明,这个问题是由于客户端完成往返服务器来执行操作,确认它发生了,并等待服务器回传该项目已被使用。只要客户立即采取行动就可以解决问题。
  • 缓慢的游戏机制可能表明游戏常数设置得不够高。如果一切顺利而美丽,但一切运动速度非常缓慢,很可能缺省速度或加速度不足。
  • 网络延迟可能是由以下几种原因引起的:您连接的路由器可能会失败,您正在开发的VPS可能位于正在进行DDoSed的主机上,您可能会使用过度的协议(但一致)喋喋不休,或者你只是通过电线发送太多数据。在我写在大学的一款模拟软件中,计算是在实验室的一些强大的计算机上进行的,而可视化是在我宿舍的MBP上运行的。事实证明,我从实验室计算机发送到宿舍的大量数据足以使建筑物内的廉价网络交换机过载并丢弃数据包,导致可怕的滞后,但完全合理的日志输出。

所以我想这里的答案是让面试官更充分地描述症状。 @阿里的答案很好,但可能是因为手头有一个更细微的问题,需要一些哄骗来诊断。

0

轶事:

我可以告诉你的是什么问题,实际上不知道问题的答案,P

马虎的DirectX电话。太多的物体。特别是对于一些老的DX9游戏来说糟糕,因为DX9需要为每个对象做一个新的directdraw调用。或者类似的东西,故事就会发生。基本上导致了CPU等待空闲的CPU去处理所有的消息。

虽然没有解决每个问题的解决方案,但我认为它是值得一提的信息; p在其他评论中没有看到。

这几乎就像有太多的像素着色器,除了至少gpu在100%的情况下有很好的效果:D适用于煎煎蛋。 (此外,使用闭塞保存性能,然后加入像素着色器的质量,以该模型是一个坏主意)

我希望你能看到这个幽默,P