分享

认识Cashe存储器

 风雪夜归人_95 2014-09-18
Cashe位于CPU和内存之间,是一种极快的内存缓冲区,特点是容量小、价格小、速度快。Cashe包含一个地址的列表以及它们的内容。随着处理器不断引用新的内存地址,cashe的地址列表也一直处于变化中,所有对内存的读取和写入操作都要经过Cashe。
首先数据请求到达Cashe,如果数据存在Cashe中,则立即被提取,否则Cashe会向内存传递请求,将数据换到Cashe中。(是不是觉得很熟悉的过程)
Sun当前使用2种类型的Cashe:
1)全写法:每次写入Cashe时同时写入内存中,保证二者的一致性。
2)写回法:先写入Cashe,当Cashe中已写过的地方还要写时,则将该地方原来的内容写入内存。(注意,Cashe的写入并不是按顺序执行,按特定算法写入,故写回到内存不一定发生在Cashe存满的时候

Cashe的组成:
line:行是对Cashe进行访问的单位,每行由2各部分组成:一个数据部分以及一个标签(用于指定它所表示的地址)
block: 行内的数据部分称作块,它保存来回移动于内存和Cashe之间的字节数据。一个典型的块为32字节。
Cashe: 一个Cashe(一般64K或1M)由许多行组成,为了提高速度,Cashe的位置离CPU很近,而且内存系统和总线经过高度优化,尽可能地提高大小等于Cashe块的数据块的移动速度。

可以通过以下程序来检验Cashe的效果:

 #include <stdio.h>
#include <string.h>
#define Max 65536
#define DUMPCOPY for(i=0; i<Max;i++) \
         destination[i] = source[i]
#define SMARTCOPY memcpy( destination, source, Max)

main()
{
    char source[Max], destination[Max];
    int i, j;
    for(j=0;j<100; j++)
        //SMARTCOPY;
        DUMPCOPY;
}

在Linux环境下用gcc分别编译上面的程序,编译生成out文件 DUMPCOPY。注释掉 DUMPCOPY,释放上面的SMARTCOPY宏,再次编译程序生成out文件SMARTCOPY。然后分别使用time命令来测试这两个程序的运行时间,结果如下:
 
 可见二者的时间差异不是一般的大。其原因是source和destination的大小都正好是Cashe容量的整数倍,导致每次对内存的引用都无法击中Cashe,使CPU的利用率大大降低,因为它不得不等待常规的内存操作完成。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多