gpt4 book ai didi

c - 如何使用程序检查总缓存大小

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:21 26 4
gpt4 key购买 nike

所以我在创建一个程序来测量 C 中的缓存大小时遇到​​了一些问题。我了解执行此操作的基本概念,但我仍然无法准确地弄清楚我做错了什么。

基本上,我创建了一个可变长度的数组(以 2 的幂为单位)并访问数组中的每个元素并将其放入虚拟变量中。我遍历阵列并执行大约 1000 次,以消除如果我只执行一次以获得准确的时间测量值,否则会出现的“噪音”。然后,我寻找导致访问时间大幅跳跃的大小。不幸的是,这就是我遇到问题的地方,我没有看到使用我的代码跳转,显然我做错了什么。

另一件事是我使用/proc/cpuinfo 检查缓存,它说大小是 6114 但那不是 2 的幂。我被告知要通过 2 的幂来计算缓存谁能解释一下这是为什么?

这是我的代码...如果需要我会发布其余部分

 {
struct timeval start;
struct timeval end;
int n =1 ; // change this to test different sizes
int array_size = 1048576*n; // size of 1MB
int x = 0;
int i =0, j=0;
int *a;
int sum = 0;
a =malloc((array_size)*sizeof(int));



for(j=0; j < array_size; j ++)
{

a[j] = 1; // intialize all elements to 1


}



gettimeofday(&start,NULL);

for(i=0; i<500; i++)
{
for(j=0; j < array_size; j ++)
{

x += a[j];
}
}



gettimeofday(&end,NULL);

sum = x+8192;

int timeTaken = (end.tv_sec * 1000000 + end.tv_usec) - (start.tv_sec *1000000 + start.tv_usec);
printf("Time Taken: %d \n", timeTaken);
printf("Average: %f \n", (double)timeTaken/((double)array_size));

最佳答案

即使您可以确保未优化数组访问,gettimeofday 也没有足够的时间分辨率来测量缓存访问,尤其是 L1(任何最新的商品处理器都有 2 或3 级缓存)。

可能用纳秒级时钟和大量统计数据来减少每次测量的误差。

另一方面,您可以使用一些第三方库,例如具有 this kind of feature 的 PAPI(性能 API)获取信息而不是测量。

关于c - 如何使用程序检查总缓存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13782628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com