有没有想过提高大规模程序的缓存性能?

时间:2010-11-17 15:17:08

标签: performance caching memory compiler-construction

我正在开发一个大型软件。它是由大量复杂模型之间的内存/数据驱动的。

有时缓存未命中太高且性能不佳。但这个场景对我来说太复杂了。

我只想了解如何减少缓存缺失并提高内存性能的一般概念。

申请任何评论。

谢谢!

3 个答案:

答案 0 :(得分:1)

可能有缓存未命中,但不要认为这是问题。

找出问题所在并解决问题,如this example

根据我的经验,软件越大,问题就越大(以及加速它的机会)。

软件通常是在快速机器上开发的,具有小的输入数据集,因此开发人员从不觉得需要分析和消除性能错误。 好消息就是他们都在那里,等着你找到并删除它们,获得大量的加速,你可以获得信用!

答案 1 :(得分:1)

狩猎性能瓶颈时最有价值的工具是测量。您需要确定哪些代码存在问题,然后测量它是否存在缓存未命中,如果确实证明这是问题。

至于一般想法,您需要降低未命中率。因此,当您将数据提取到内存中时,您需要在再次离开数据之前尽可能多地工作,而不是流式传输数据。比较一下,

for i in data:
   f(i)

for i in data:
   g(i)

for i in data:
   h(i)

遍历列表三次。可以将其写为:

for i in data:
   h(g(f(i)))

将导线降低到一次 - 通常导致更少的失误。

另一个有价值的技巧是考虑数据结构。二叉树的访问模式与哈希表的访问模式有很大不同。但是首先要建立测量,这样你就可以确定你已经错过钉子了 - 这就是你的问题。

最后,即使失败率很低,您也可以考虑降低内存带宽。如果你移动大量的数据,它往往会很慢 - 因为与晶体管数量相比,内存速度的增长率要低得多。

答案 2 :(得分:0)

这是一个巨大的主题,问题中没有细节。所以,我建议购买更多内存。