Cache抖动的实验

Cache抖动的实验

关于cpu中的cache抖动现象,简单研究了一下,个人认为cache抖动分为三个阶段:无抖动现象阶段,剧烈抖动阶段和稳定抖动阶段。

实验环境:Ubuntu17.04+valgrind模拟器

实验硬件:Cache 64组*4路组相联*64B每路 

实验文件:main.cpp ,代码如下:

#include <stdio.h>
#define column 16
#define row 1000	//row的值需要不断进行改变,从而观察miss数
int matrix[row][column];
int main()
{
	for(int i=0; i<column; i++)
	{
        	for(int j=0; j<row; j++)
		{
			matrix[j][i] = 1;
        	}
   	}
	return 0;
}

主要原理:

1.数组的每一行恰好对应cache的每一路,以此简化操作;

2.通过更改row的数量,观察写操作过程中的miss数量,从而分析各个阶段的特点;

3.(1)无抖动阶段:当row<=64*4时,所有数据都能放到cache中,不会发生抖动现象;

(2)剧烈抖动阶段:当row>64*4 并且row <=64*4+64时,由于cache的循环使用,发生剧烈抖动现象;

第一次Cache抖动应当发生在,64组×4路的Cache被装满之后(column =16,row=256),row增加1(row=257)到row增加64(row=320)之间。

例如:当row增加1时(row=257),访问第257行时,由于数组的第0行到第3行已经保存在cache第0组,将会替换掉第0组的第0路,之后再替换掉第0组第1行、第0组第2行、第0组第3行,进行循环。

可见,在访问第0行、第1行、第2行、第3行和第256行时,会一直出现miss,总共会出现5*16=80次miss。当row=256时,只有256行,只有在访问第一次的时候miss,剩下的数据访问都可以hit。

所以,由row=256到row=257时,miss的增加数为5*16-4=76次。

进而,推导出这一阶段cache增加的miss数量公式为N=n*(k+1)*i-k*i。

其中N为miss的增加数,n为每一行的元素的数量,k+1为该阶段的特征值,其大小为组内行数k+1,k为组内行数,i为访问的数组增加的行数(以i=0作为比较基准,row=256)。

(3)稳定抖动阶段:当row>64*4+64时,抖动现象仍然出现,不过趋势比较平稳;

第二次Cache抖动应当发生在,64组的Cache都出现第二阶段所示的抖动现象(row=320)之后,即row>320时,会出现第二次抖动现象。

例如:当row相对第二阶段的临界值增加1时(row=321),访问第321行时,由于数组的第257行、第1行到第3行已经保存在cache第0组,将会替换掉第0组的第1路,之后再替换掉第0组第2行、第0组第3行,进行循环。

可见,在访问第0组的第0行、第1行、第2行、第3行、第256行和第321行时,会一直出现miss,总共会出现6*16=96次miss。当row=320时,访问第0组的第0行、第1行、第2行、第3行和第256行,会一直出现miss,总共会出现5*16=80次miss。

所以,由row=320到row=321时,miss的增加数为6*16-5*16=16次。

进而,推导出这一阶段cache增加的miss数量公式为N=n*i。

其中N为miss的增加数,n为每一行的元素的数量,i为访问的数组增加的行数(以i=0作为比较基准,row=320)。

实验过程和结果:

(1)无抖动阶段:将row依次更改为100,101,102,103,发现miss数随着row的增加而增加步长为1。

(2)剧烈抖动阶段将row依次更改为256,257,260,320。结果如表所示:

行数

256

257

260

320

miss数

2160

2236

2464

7024

miss相对增加数

0

76

304

4864

折合公式

16*5*0-4*0

16*5*1-4*1

16*5*4-4*4

16*5*64-4*64


故第二阶段,Cache的增加数符合N=n*(k+1)*i-k*i的规律。第一阶段和第二阶段的临界值为256。

(3) 稳定抖动阶段:将row依次更改为320,321,330,420,1320。结果如表所示:

行数

320

321

330

420

1320

miss数

7024

7040

7184

8624

23024

miss相对增加数

0

16

160

1600

16000

折合公式

16*0

16*1

16*10

16*100

16*1000

故第三阶段,Cache的增加数符合N=n*i的规律。第二阶段和第三阶段的临界值为30。

抖动临界值:

通过以上实验,对于本cpu,发现Cache抖动的临界值分别时256和320。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值