首页 > 其他 > 详细

编写高速缓存友好的代码

时间:2015-05-18 19:00:22      阅读:116      评论:0      收藏:0      [点我收藏+]

引言

    根据时间局部性和空间局部性原理,我们就能明白高速缓存存储器的工作原理,局部性比较好的程序往往具有更好的性能,即运行得更快。因此,遵从局部性原理,好的程序员应该确保编写出高速缓存友好的代码。

高速缓存友好代码分析

#include<stdio.h>
void main()
{
  int a[4]={1,2,3,4};
  int i;
  int sum=0;
  for(i=0;i<4;i++)
    sum+=a[i];
}

    该程序具有良好的时间局部性,因为i,sum均被重复使用多次;该程序也具有良好的空间局部性,因为依次读取数组a的4个元素,由于int类型占据4个字节,因此只要高速缓存块大小大于16个字节(intel i7的块大小为64Bytes,因此足够),它们就可以一起被读入高速缓存块中,而仅仅是a[0]发生了高速缓存不命中,因为它第一个被读取需要加载,而后面3个量均为高速缓存命中。

高速缓存不友好代码分析  

#include<stdio.h>
void main()
{
  int a[2][2]={{1,2},{3,4}};
  int i,j,sum=0;
  for(int j=0;j<2;j++) {
    for(int i=0;i<2;i++) {
      sum+=a[i][j];
    }
  }
}

    由于C语言是按行优先顺序来存储的,所以这个循环的步长不是以1为单位的,并且每次读取都要换行,所以所有的读取都发生了缓存不命中情况,程序运行效率会比高速缓存友好的程序慢一倍!

后记

    在平时的编程中,应该尽量避免编写局部性很差的程序,尝试编写高速缓存友好高质量的代码。

编写高速缓存友好的代码

原文:http://my.oschina.net/zzw922cn/blog/416387

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!