【发布时间】:2011-05-03 06:56:27
【问题描述】:
这是 cachegrind 输出的一部分。这部分代码已经执行了 1224 次。 elmg1 是一个大小为 16 x 20 的 unsigned long 数组。我的机器 L1 缓存大小为 32KB,缓存行大小为 64B,8 路组关联。
- for (i = 0; i
- {
- telm01 = elmg1[i]; 146,880 0 0 73,440 0 0 24,480 0 0
- telm31 = (telm01
- telm21 = (telm01 > 1); 146,880 1,224 1 48,960 0 0 24,480 0 0
- telm11 = (telm01 > 2); 146,880 0 0 48,960 0 0 24,480 0 0
- }
A.我把它放在这里的原因是,在 for 循环内的第 3 行,我看到了许多 I1 未命中(还有一个 L2 未命中)。这有点令人困惑,我猜不出原因?
B.我正在尝试优化(时间)一部分代码。以上只是一个小sn-p。我认为在我的程序内存访问中花费了我很多。就像上面的例子一样,elmg1 是一个 16 x 20 大小的无符号长数组。当我尝试在代码中使用它时,总会有一些失误,而在我的程序中,这些变量经常出现。有什么建议吗?
C.我需要分配和(有时初始化)这些无符号长整数。你能建议我更喜欢哪一个,calloc 或数组声明,然后显式初始化。 顺便问一下,缓存处理它们的方式会有什么不同吗?
谢谢。
【问题讨论】:
标签: c caching optimization kcachegrind cachegrind