首页 文章

是否可以考虑所有缓存未命中?

提问于
浏览
0

我试图理解perf记录的缓存未命中 . 我有一个最小的程序:

int main(void)
{
    return 0;
}

如果我编译这个:

gcc -std=c99 -W -Wall -Werror -O3 -S -o test.S test.c

我得到一个预期的小程序:

.file   "test.c"
        .section        .text.startup,"ax",@progbits
        .p2align 4,,15
        .globl  main
        .type   main, @function
main:
.LFB0:
        .cfi_startproc
        xorl    %eax, %eax
        ret
        .cfi_endproc
.LFE0:
        .size   main, .-main
        .ident  "GCC: (Debian 4.7.2-5) 4.7.2"
        .section        .note.GNU-stack,"",@progbits

只有两条指令 xorlret ,程序应该小于一个缓存行的大小,所以我希望如果我运行 perf -e "cache-misses:u" ./test 我应该只看到一个缓存未命中 . 但是,我反而看到2到400之间 . 类似地, perf -e "cache-misses" ./test 导致~700到~2500 .

这只是一个perf估计计数的情况,还是有一些关于缓存未命中的方式,使得它们的推理是近似的?例如,如果我在内存中生成然后读取整数数组,我可以推断预取(顺序访问应该允许完美的预取)还是还有其他的东西在起作用?

1 回答

相关问题