【问题标题】:How to measure a L1, L2 and L3 cache latency using C?如何使用 C 测量 L1、L2 和 L3 缓存延迟?
【发布时间】:2014-02-16 01:08:07
【问题描述】:

我对此有一个大致的了解。这就是我的想法:

首先,找出我将使用的 L1 缓存的大小。然后创建一个数组(字节数大到足以容纳在 L1 缓存中),编写一个程序来访问数组的每个元素。然后在每两个循环中创建时间戳。

对于二级缓存中的延迟,我可以使阵列更大以到达二级缓存。

但实际上我不知道如何开始。我对每个缓存的数组应该有多大以及如何用上面的想法编写这个C程序没有一个清晰的概念。

有人可以帮我处理这个 C 程序吗?任何帮助将不胜感激!

非常感谢!

【问题讨论】:

  • “我不清楚每个缓存的阵列应该有多大”:处理器制造商通常会提供有关每个处理器型号的缓存大小等细节的信息。这可以在他们的网站上下载。
  • 也许更容易获得 CPU 型号,然后访问某种数据库以获得缓存延迟,正如@FrankPI 所说。
  • @acarlon 我不知道你可以限制对一个进程的缓存访问

标签: c arrays caching


【解决方案1】:

已经有一个名为LMbench 的工具可以做到这一点。

它是一个开源工具,所以你甚至可以查看源代码,看看他是如何做到的。

【讨论】:

【解决方案2】:

您可以在 linux 中使用以下命令查看缓存大小:

grep 。 /sys/devices/system/cpu/cpu1/cache/index*/*

在我的情况下(英特尔酷睿 i7),它显示 L1 D cahe 为 32KB,因此您的数组大小也应该相同; 例如 说 x=32*1024/sizeof(int) 然后创建一个 x 整数数组,恰好占据 32KB 在这种情况下,它是 int[32*1024/4]

同样的事情你也可以申请 L2 和 L3

Measuring Cache Latencies

你可以参考这篇文章,它会给你一些见解。

【讨论】:

    猜你喜欢
    • 2014-07-04
    • 2017-03-10
    • 2020-05-19
    • 1970-01-01
    • 2013-11-22
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多