cache 和程序访问的局部性(一)

1. 实验要求

        通过实际程序的执行结果,了解程序访问的局部性对带有 cache 的计算机系统性能的影响。

        正文中文字体统一为宋体,英文及数字字体为Times New Roman,字号小四,行间距最小值20磅,段落首行缩进2字符

2. 实验结果与分析

 

figure 1程序代码示例

在如figure 1所示程序中,修改或添加必要的语句(如计时函数等),以计算和打印主体程序段的执行时间。分别以M=100000,N=10M=1000,N=1000M=10,N=10000 ,执行程序 A 和程序 B,以比较两个程序执行时间的长短。下为实验代码及运行结果示例。

 

figure 2实验主要代码示例

 

figure 3程序运行结果示例

3. 实验结果

3次实验结果下表所示。

 

table 1实验结果

4. 结果分析

在实验1中,由于Assign-array-rows按先行后列的顺序访问数组,每次都访问离上次访问位置最近的元素,故从缓存中调用数据次数较多,从主存中调用数组次数较少。而Assign-array-cols按先列后行的顺序访问数组,每次访问有固定跨度且跨度较大(100000 ),故基本都需要从主存中读取数据。因此实验1结果呈现出Assign-array-rows耗时少于Assign-array-col。

在实验2中,数组行列大小一致,但Assign-array-rows仍然每次访问离上次访问位置最近的元素,故读取缓存中数据次数较多,读取主存中数据次数较少;而Assign-array-cols同样每次具有固定跨度地访问数组,因此Assign-array-rows运行时间少于Assign-array-cols。

在实验3中,数组每行数据较多,当cache大小较小时,可能发生多次替换,命中可能性减小。所以结果呈现出Assign-array-rows运行时间多于Assign-array-cols。

5. 实验小结

我们编写程序时可以充分利用局部性原理以加快运行速率,但需要注意缓存中每行的块大小不能过大,否则可能类似实验3的结果,先列后行反而比先行后列的顺序访问更快。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值