2011-08-21 80 views
5

对于要高效缓存的程序,所使用的数据应该线性存储吗?高效的缓存和BLOB的 - 分析缓存命中/未命中

因此,我不使用动态分配,而是使用线性分配器将数据放入Blob中。这足以提高性能吗?我应该怎么做才能提高缓存效率?

我知道这个问题的arent具体,但我不知道该怎么解释呢?

哪些程序可以帮我配置文件缓存命中/未命中?

+2

对于性能改进,足够/有用/所需的东西应该由性能分析决定,而不是纯粹的猜测。如果有一个普遍适用的配方,它将已经在运行时库中实现。 – Vlad

+0

刚刚添加了另一个问题......你知道任何探测器检测缓存命中/未命中,所以我可以看到,如果我做的任何更改都提高性能? –

回答

5

如果您寻找一个Windows的探查,你可以尝试AMD's CodeAnalystVerySleepy,两者的这些都是免费的,然而AMD是这两者中功能更强大的(并且在intel硬件上工作,但是iirc不能使用基于硬件的配置文件),它包括监视分支预测未命中和缓存利用率。剖析是伟大的,因为它告诉你该怎么优化,但你总是不知道如何,对于这一点,你应该看看Agner Fog's optimization manualsIntel's optimization manual(其中包含了很多地方和缓冲能力优化)

3

如果你在Linux上,你可以使用Valgrind(特别是cachegrind工具)。

如果你在Windows上,那么VS2010(2008)专业版有一个内置的分析器,但我不知道任何关于它的缓存分析工具的细节。还有英特尔 VTune分析仪(放大器)。他们都是商业产品,但我认为你可以得到30天的评估版本。

上,这样可能是帮助一些其他问题:

+0

看起来不错,但我使用Windows ...是否有任何Windows替代Valgrind? –

+0

@Tiago科斯塔,这是一个无赖... – celavek

0
合并

在Linux上,您可以使用perf mem来以非常细粒度的方式(包括未命中地址)对内存访问进行采样,例如described here