我需要,以提高系统的吞吐量。

优化的通常周期已经完成,我们已经实现了1.5倍的更好的吞吐量。

我现在开始怀疑我可以利用cachegrind输出系统的吞吐量提高。

有人能指出我如何开始这个?

我明白了什么是我们需要确保,使之保持在L1高速缓存和下一组数据应该适合在L2最频繁使用的数据应保持足够小。

这是我正在朝着正确的方向?

有帮助吗?

解决方案

它`真的,本身cachegrind输出并没有给太多的信息如何去优化代码。人们需要知道如何解释它,你所说的有关数据嵌入到L1和L2确实是正确的方向。

要充分理解内存访问模式如何影响性能,我建议你阅读一篇优秀的论文“是什么每个程序员应该知道的关于存储器“由乌利齐·德雷珀,GNU LIBC的维护者的。

其他提示

如果您无法解析cachegrind输出,看看KCacheGrind(它应该是你选择的发行版可用)。我用它,发现它非常有用。

根据的Cachegrind文档通过cachegrind给你的细节是高速缓存未命中为您的代码的给定部分的数量。你需要了解缓存您所靶向架构是如何工作的,让你知道如何解决的代码。在实践中,这意味着使数据更小或使缓存的数据仍然在高速缓存中改变某些数据的访问模式。但是你要明白你的程序的数据和数据访问,然后才能在信息采取行动。因为它说的手册中,

  

在短,Cachegrind可以告诉你一些在你的代码的瓶颈是,但它不能告诉你如何解决这些问题。你必须工作是为你自己。但至少你的信息!

1.5倍是一个很好的加速。这意味着你发现的东西了,你可以摆脱时间的33%。我敢打赌,你可以做更多,你坐下来像数据内存缓存低层次的问题,甚至之前。 这是怎样一个例子。基本上,你可以有不是大前,像25%的额外性能问题(和机会,加速)说。那么,与1.5倍加速,有25%目前是37.5%,所以它是“更有价值”比它。通常,这样的问题是在请求的工作,一旦你知道它的成本多少,你可以决定一些中间堆函数调用的形式不完全必要的。由于kcachegrind并没有真正查明这些,你可能没有意识到这是一个问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top