Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C测量一级、二级和三级缓存延迟?_C_Arrays_Caching - Fatal编程技术网

如何使用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吗?