我需要提高系统的吞吐量。
通常的优化周期已经完成,我们已经获得了1.5倍的吞吐量。
我现在开始怀疑是否可以利用cachegrind输出来提高系统的吞吐量。
有人能给我指点一下怎么开始吗?
我所理解的是,我们需要确保最常用的数据应该保持足够小,以便它保留在L1缓存中,并且下一组数据应该适合L2。
这是我选择的正确方向吗?
发布于 2009-11-13 03:20:05
的确,cachegrind输出本身并没有提供太多关于如何优化代码的信息。人们需要知道如何解释它,以及您所说的适合L1和L2的数据确实是正确的方向。
要完全理解内存访问模式如何影响性能,我推荐阅读GNU libc维护者Ulrich Drepper撰写的一篇优秀的论文"What Every Programmer Should Know About Memory"。
发布于 2009-11-13 01:59:15
如果您在解析cachegrind输出时遇到问题,请查看KCacheGrind (它应该在您选择的发行版中可用)。我使用它,并发现它非常有用。
发布于 2009-11-13 01:57:29
根据the Cachegrind documentation的说法,cachegrind提供给你的细节是给定代码部分的缓存未命中数量。你需要知道缓存是如何在你的目标架构上工作的,这样你才能知道如何修复代码。在实践中,这意味着使数据更小或更改某些数据的访问模式,以便缓存的数据仍在缓存中。但是,在对信息采取行动之前,您需要了解程序的数据和数据访问。就像手册上说的,
简而言之,Cachegrind可以告诉你代码中的一些瓶颈在哪里,但它不能告诉你如何修复它们。你必须自己解决这个问题。但至少你有信息!
https://stackoverflow.com/questions/1723997
复制相似问题