我们正在开发中等大小的C ++代码库(10Mloc),通过我们的优化工作,它逐渐变得越来越慢。
该代码库是一组库,我们将它们组合起来以使其起作用。当开发出这些库如何通信的通用框架时,便会着重于性能,后来,当添加更多部分时,通用框架并没有太大变化。在需要时以及随着我们的硬件发展而进行了优化。这使得昂贵的早期决定只有在很久以后才显现出来。现在我们处于进一步优化的代价更高的位置,因为它们需要重写代码库的大部分内容。我们发现自己逼近了不希望有的局部最小值,因为我们知道原则上代码应该能够更快地运行。
是否有任何成功的方法论可以帮助您确定将代码库的发展转向全球最佳执行解决方案的过程,而这些过程又不容易被轻松的优化机会所混淆?
编辑
要回答我们当前如何配置的问题:
实际上,只有两种不同的情况可以使用此代码,这两种情况都令人尴尬地是并行的。使用大量输入的平均值和更详细的运行时间(指令成本,分支错误预测和缓存问题)对挂钟时间进行平均,即可进行性能分析。由于我们仅在极其同类的计算机(由数千个相同的计算机组成的集群)上运行,因此效果很好。由于通常我们大部分时间都在使所有机器繁忙,因此运行速度更快,这意味着我们可以查看其他新内容。问题当然是,当出现新的输入变化时,由于我们删除了其他用例中最明显的微效率问题,因此它们可能会受到后来者的惩罚,从而可能缩小“最佳运行”方案的数量。
sloc
。我称它为“中等大小”,因为我不知道在这里什么被认为是“大”的。