cache命中率对程序运行时间的影响真的很大吗?

这几天看到了一篇博文,叫CPU L2 缓存初探,其中作者想表达L2 cache和L3 cache存在巨大速度差,并且用go编了一段二分查找的程序,“果然”差了六倍有余。
一开始,被忽悠住了,但后来自己用C编了同样一段程序,发现不对劲,得出的结果发现并没有作者那么大的差距,甚至根据运行时间,都察觉不到cache的存在。这才发现,作者的源码有问题,原因是两个对比程序的复杂度差别巨大。
所以,今天写了这篇文章,意在说明各级cache容量大小,以及命中与否,在现在的一般的PC上,基本上是感觉不出来的,除非在空间上有着数量级之差。
下面是实验代码以及实验结果。
思路是在MAXN的数组范围内,随机访问一千万次。得到不同MAXN下的测试时间。
PS:测试机为i5 7300HQ处理器,三级cache分别为32KB,256KB,6MB

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define MAXN 10000000
int num[MAXN];
int random()
{
	return (int)(rand()/(RAND_MAX*1.0)*(MAXN-1));
 }
int find()
{
	return num[random()];
}
int main()
{
	int begin=clock();
	for(int i=0;i<=10000000;i++)
	{
		find();
	}
	printf("%d",clock()-begin);
	return 0;
}

L2 cache作为片内缓存比L3 cache快很多,所以用MAXN=60000和70000来进行对比。
60000x4B(int)<256KB
70000x4B(int)>256KB
MAXN=6E4的时间:216ms
MAXN=7E4的时间:220ms
MAXN=1E6的时间:370-500ms

可见除非有着数量级上的差距,否则多一点空间或少一点空间(即少一些命中或多一些命中)对运行时间是没有太大影响的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值