测量L1和L2缓存的大小和路由顺序

15
我如何以编程方式测量(而非查询操作系统)L1和L2缓存(数据缓存)的大小和关联顺序?
对系统的假设:
- 它具有L1和L2高速缓存(也可能有L3,可能共享高速缓存), - 它可能具有类似于P4 +的硬件预取单元, - 它具有稳定的时钟源(tickcounter或良好的HPET以进行gettimeofday)。
不对操作系统做任何假设(它可以是Linux、Windows或其他操作系统),并且我们不能使用POSIX查询。
使用C语言编写,并且编译器优化可能已被禁用。

1
有一个库可以在构建时测量缓存大小,它叫做ATLAS http://math-atlas.sourceforge.net/ 我想你也可以在那里找到一些信息。 - Stefano Borini
处理器识别使用查找?(或者这算作作弊吗?) - user166390
4个回答

6
我认为你需要做的就是反复访问内存,以逐渐增加的块大小(以确定缓存大小),我认为你可以变化步幅来确定关联性。
因此,您将开始尝试访问非常短的内存段,并不断加倍大小,直到访问变慢。每次访问变慢,您就确定了另一个级别缓存的大小。

2
但是我该如何关闭硬件预取,这会掩盖一些大小呢? - osgx

2

1

Mark,请查看http://stackoverflow.com/questions/2517694/can-the-stream-and-gups-single-cpu-benchmark-use-non-local-memory-in-numa-machi。 - osgx

1
问题有点过时,但答案在这里

只有良好的图示,但没有解决方案。另外,我不明白如何从他的图中得出路径计数。 - osgx
2
虽然这样理论上可以回答问题,但最好还是在这里包含关键部分并提供链接参考。 - Bill the Lizard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接