这个问题上来:游戏性能优化采访
您正在寻找在你的游戏的瓶颈,但没有你改变正在游戏中的任何速度更快,无论是什么在GPU管线或CPU。没有什么是尖锐的,缓慢似乎分布在各地。下一步你要怎么做?
我被吹捧了。这是一个诡计问题吗?在确定性能问题时,我总是认为这是您需要将所有事情都缩小的地方。我不认为它是mem分配,就像CPU perf中显示的那样。
这个问题上来:游戏性能优化采访
您正在寻找在你的游戏的瓶颈,但没有你改变正在游戏中的任何速度更快,无论是什么在GPU管线或CPU。没有什么是尖锐的,缓慢似乎分布在各地。下一步你要怎么做?
我被吹捧了。这是一个诡计问题吗?在确定性能问题时,我总是认为这是您需要将所有事情都缩小的地方。我不认为它是mem分配,就像CPU perf中显示的那样。
也许这是关于思考更高效的算法。 “微型优化”有其局限性;例如,你可以完美地优化气泡排序,但是为了获得真正的大幅提速,你可以创造另一种排序算法。另外,在游戏中,您可能会引入不同种类的可调质量/速度(或精度/速度)折衷。通常所有游戏都有一些设置可以改变图形的细节水平。
您正在寻找在你的游戏的瓶颈,但没有你 变化正在使游戏得更快,无论是什么在GPU 管道或CPU。没有什么是尖锐的,而且缓慢似乎在各地都有分布。
这听起来像是Uniformly Slow Code的定义。让我们假设它实际上是什么意思(而不是一些I/O瓶颈或在循环中创建不必要的对象,或者为数据结构或算法等选择一些不好的选择)。
为了让代码更快一致,你通常不得不违背良好的做法,这就是为什么我通常停止优化我的代码时,它是一致的慢。 (我认为“停止优化”在采访中不是一个好的答案......)
让事情更快的一种方法是确定一个适当的小操作序列,将它们集中在一个地方,然后手动提高这些事;一些“手动内联”这些操作,然后对出现的代码进行高级简化。它需要良好的直觉,这可能值得做,并且对涉及的代码有很好的理解。 This answer calls it bunching and horizontal optimization.
如果您的真的的代码是一致的,那么可能需要考虑的另一件事是Andrei Alexandrescu's optimization tips。
我想要了解更多信息。 “缓慢”是表现不佳的一个糟糕指标,并且是症状分类而不是症状本身。例如,你可以形容“慢”的存在:
所有这些问题有不同的潜在原因和解决方法:
O(N)
而不是O(1)
(python stdlib ... ick)。你无法诊断你看不到的问题,而剖析是第一道防线。所以我想这里的答案是让面试官更充分地描述症状。 @阿里的答案很好,但可能是因为手头有一个更细微的问题,需要一些哄骗来诊断。
轶事:
我可以告诉你的是什么问题,实际上不知道问题的答案,P
马虎的DirectX电话。太多的物体。特别是对于一些老的DX9游戏来说糟糕,因为DX9需要为每个对象做一个新的directdraw调用。或者类似的东西,故事就会发生。基本上导致了CPU等待空闲的CPU去处理所有的消息。
虽然没有解决每个问题的解决方案,但我认为它是值得一提的信息; p在其他评论中没有看到。
这几乎就像有太多的像素着色器,除了至少gpu在100%的情况下有很好的效果:D适用于煎煎蛋。 (此外,使用闭塞保存性能,然后加入像素着色器的质量,以该模型是一个坏主意)
我希望你能看到这个幽默,P
我不能完全肯定这是针对SO的话题。但我们会看到它是如何去... – Mysticial
我可能会复制在不同的硬件上。不知道他们在找什么。 –
很明显,你已经找到了解决方案 - “我会在SO上发布问题并等待结果”......我想这样的答案会使你的面试失败。 –