17得票1回答
如何解释Cachegrind输出中的缓存未命中?

出于好奇,我编写了几个不同版本的矩阵乘法,并使用cachegrind对其进行了测试。在下面的结果中,我想知道哪些部分是L1、L2、L3缓存未命中和引用,并且这一切真正意味着什么?此外,以下是我矩阵乘法的代码,以防有人需要。#define SLOWEST ==6933== Cachegrind,...

17得票1回答
如何在C++中编写指令缓存友好型程序?

最近Herb Sutter在“现代C++:你需要知道的”上做了一个很棒的演讲。这个演讲的主题是效率以及数据局部性和内存访问的重要性。 他还解释了线性访问内存(数组/向量)将会受到CPU的喜爱。他引用了另一个经典参考来源“Bob Nystrom的游戏性能”中的一个例子来说明这个问题。 阅读这...

14得票2回答
Wincachegrind出现错误

当我尝试使用wincachegrind并获取cachegrind文件时,它返回: 找不到调用目标。 cachegrind.out行号:68 有人知道如何解决这个问题吗? 更新,以下是错误的截图: 点击此链接

14得票2回答
使用cachegrind和callgrind测量不同的读写次数

我正在使用Cachegrind、Callgrind和Gem5进行一些实验。我注意到在缓存模拟器中,许多存储访问被计算为读取,而在Callgrind中被计算为写入,而在Gem5中则同时被计算为读取和写入。 我们来看一个非常简单的例子:int main() { int i, l; ...

11得票3回答
我如何确定程序的缓慢是否与CPU缓存有关(在Linux上)?

我目前正在努力理解我一个C程序中的一些非常奇怪的行为。显然,在程序的末尾添加或删除一个看似不重要的行会极大地影响程序其他部分的性能。我的程序大致像这样:int large_buffer[10000]; void compute(FILE * input) { for(int i=0;...

9得票2回答
缓存友好的矩阵乘法方法

我打算使用高缓存友好性的方法来计算两个矩阵的乘积(以减少cache miss的次数)。 我发现可以通过缓存友好的转置函数实现此目的。 但是,我无法找到这个算法。请问如何实现?

8得票1回答
Valgrind与Linux perf的相关性

假设我选择perf事件instructions, LLC-load-misses, LLC-store-misses。进一步假设我通过改变程序输入来测试一个名为prog的程序。对于相同的输入和相同的计数器,valgrind是否应该为我提供“相同”的功能结果?也就是说,如果perf中的一个值增加...

7得票1回答
为什么cachegrind不完全确定性?

受SQLite启发,我正在考虑使用valgrind的"cachegrind"工具来进行可重复的性能基准测试。它输出的数字比我找到的任何其他计时方法都要稳定得多,但它们仍然不是确定性的。以下是一个简单的C程序示例: int main() { volatile int x; while ...