【问题标题】:Any idea to improve cache performance for large scale program?有什么想法可以提高大型程序的缓存性能吗?
【发布时间】:2010-11-17 15:17:08
【问题描述】:

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

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

我只是想获得一些关于如何减少缓存未命中和提高内存性能的一般想法。

感谢任何评论。

谢谢!

【问题讨论】:

  • 我不认为这是一个坏问题,但它是一个宽泛的问题,所以你得到的答案同样模糊。

标签: performance caching memory compiler-construction


【解决方案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】:

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

    找出问题所在并修复它们,如this example

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

    该软件通常是在快速机器上开发的,输入数据集较小,因此开发人员从不觉得需要分析和消除性能错误。 好消息是它们都在里面,只是等着你找到并删除它们,获得巨大的加速,你可以为此付出代价!

    【讨论】:

      【解决方案3】:

      这是一个巨大的话题,问题中没有详细信息。所以,我建议购买更多的 RAM。

      【讨论】:

      • 我会说:购买更多的内存并简化复杂的模型。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 2012-09-13
      • 1970-01-01
      • 2013-07-10
      • 2012-02-11
      • 2012-08-13
      • 1970-01-01
      相关资源
      最近更新 更多