我正在开发一个大型软件。它是由大量复杂模型之间的内存/数据驱动的。
有时缓存未命中太高且性能不佳。但这个场景对我来说太复杂了。
我只想了解如何减少缓存缺失并提高内存性能的一般概念。
申请任何评论。
谢谢!
答案 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)
这是一个巨大的主题,问题中没有细节。所以,我建议购买更多内存。