如何以编程方式测量(不查询操作系统)L1和L2缓存(数据缓存)的关联大小和顺序?
关于系统的假设:
没有关于操作系统的假设(它可以是Linux,Windows或其他),我们不能使用POSIX查询。
语言为C,可能会禁用编译器优化。
答案 0 :(得分:6)
我认为您需要做的就是以不断增加的块重复访问内存(以确定缓存大小),我认为您可以改变步幅来确定关联性。
因此,您将开始尝试访问非常短的内存段并保持大小加倍,直到访问速度变慢。每次访问速度变慢时,您都确定了另一级缓存的大小。
答案 1 :(得分:2)
以下是ATLAS的代码。它适用于L1缓存大小
ATLAS /调/ SYSINFO / L1CacheSize.c
(https://github.com/vtjnash/atlas-3.10.0/blob/master/tune/sysinfo/L1CacheSize.c)
int GetL1Size(int MaxSize, double tol)
{
int L1Size, tmp, correct=1;
fprintf(stderr, "\n Calculating L1 cache size:\n");
但它只是l1缓存,只有它的大小,而不是路数。
答案 2 :(得分:1)
您可能会发现STREAM benchmark有用或有趣,或两者兼而有之。
答案 3 :(得分:1)
问题已经过时了,但答案是here。