如何使用C测量一级、二级和三级缓存延迟?
我对它有一个大致的了解。这就是我的想法: 首先,找出我将使用的一级缓存的大小。然后创建一个数组(字节数足够大,可以放入一级缓存),编写一个程序来访问数组的每个元素。然后在每两个循环中创建时间戳 对于二级缓存中的延迟,我可以使阵列更大以到达二级缓存如何使用C测量一级、二级和三级缓存延迟?,c,arrays,caching,C,Arrays,Caching,我对它有一个大致的了解。这就是我的想法: 首先,找出我将使用的一级缓存的大小。然后创建一个数组(字节数足够大,可以放入一级缓存),编写一个程序来访问数组的每个元素。然后在每两个循环中创建时间戳 对于二级缓存中的延迟,我可以使阵列更大以到达二级缓存 但实际上我不知道如何开始。我不清楚每个缓存的数组应该有多大,以及如何用上面的思想编写这个C程序 有人能帮我做这个C程序吗?任何帮助都将不胜感激 非常感谢 已经有一个名为的工具可以做到这一点 这是一个开源工具,因此您甚至可以查看源代码并了解他是如何做到的
但实际上我不知道如何开始。我不清楚每个缓存的数组应该有多大,以及如何用上面的思想编写这个C程序 有人能帮我做这个C程序吗?任何帮助都将不胜感激
非常感谢 已经有一个名为的工具可以做到这一点
这是一个开源工具,因此您甚至可以查看源代码并了解他是如何做到的。您可以在linux中使用以下命令查看缓存大小: 格雷普/sys/devices/system/cpu/cpu1/cache/index*/* 在我的例子(Intel core i7)中,它显示L1 D cahe为32KB,因此您的数组大小也应该相同; 例如 假设x=32*1024/sizeof(int) 然后创建一个正好占用32KB的x整数数组 在这种情况下,它是int[32*1024/4] 同样,你也可以申请L2和L3
你可以参考这篇文章,这篇文章会给你一些启示。“我不清楚每个缓存的阵列应该有多大”:处理器制造商通常都有关于每个处理器型号的缓存大小等详细信息。这可以在他们的网站上下载。也许更容易获得CPU型号,然后访问某种数据库以获得缓存延迟,正如@FrankPI所说的那样。@acarlon我不知道您可以将缓存访问限制在一个进程中LMBench中的缓存大小测试在哪里?它是如何工作的?是lat_mem吗?