小编arn*_*arn的帖子

故意提高 L1 缓存未命中率的程序

我目前正在尝试编写一个 L1 缺失率尽可能高的程序。

为了测量 L1 缺失率,我在 Intel Core i7 处理器上使用 MEM_LOAD_RETIRED.L1_MISS 和 MEM_LOAD_RETIRED.L1_HIT 性能计数器事件(我对填充缓冲区命中不感兴趣)。我修改了 Linux 内核,以便在每次上下文切换时提供准确的测量结果,以便我可以准确地确定每个程序的命中和未命中次数。

硬件预取器被禁用

这是我目前拥有的代码:

#define LINE_SIZE 64
#define CACHE_SIZE 4096 * 8
#define MEM_SIZE CACHE_SIZE * 64


void main(int argc, char* argv[])
{

    volatile register char* addr asm ("r12") = mmap(0, MEM_SIZE, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);

    volatile register unsigned long idx asm ("r13") = 0;
    volatile register unsigned long store_val asm ("r14") = 0;

    volatile register unsigned long x64 asm ("r15") = 88172645463325252ull;

    while(1) …
Run Code Online (Sandbox Code Playgroud)

c linux intel cpu-cache

5
推荐指数
1
解决办法
246
查看次数

标签 统计

c ×1

cpu-cache ×1

intel ×1

linux ×1