《深入理解计算机系统》(CSAPP)实验六

您所在的位置:网站首页 cachelab 《深入理解计算机系统》(CSAPP)实验六

《深入理解计算机系统》(CSAPP)实验六

2023-09-30 23:32| 来源: 网络整理| 查看: 265

 

这是CSAPP的第6个实验,本实验将帮助我们了解缓存对C语言性能的影响。而且,这个实验比前几个难度都加大了,做实验前建议先去看24张图7000字详解计算机中的高速缓存,理解下Cache的基本原理。

 

文章目录 4.1 说明 4.2 注意事项 4.3 编程 4.3.1 32 * 32 矩阵 4.3.2 64 * 64矩阵 4.3.3 61 * 67矩阵 3.1 说明 3.2 编程 3.2.1 getopt 和fscanf的使用 3.2.2 定义结构体 3.2.3 初始化Cache 3.2.4 解析输入的指令 3.2.5 LRU策略 3.2.6 更新高速缓存Cache 3.2.7 完整代码 2.1 参考跟踪文件 2.2 注意事项 1. 实验目的 2. 实验准备 3. PartA Cache simulator 4. PartB Efficient Matrix Transpose 5. 总结

 

1. 实验目的

  本次实验室由两部分组成。第一部分是要模拟Cahce的行为,理解Cache的原理。第二部分将优化一个小的矩阵转置功能,目的是最大程度地减少高速缓存未命中的次数。

2. 实验准备

  实验用到的所有文件在CSAPP官网都可以找到。我的运行环境Ubuntu 16.04,Gcc 5.4.0。

2.1 参考跟踪文件

  讲义目录的traces子目录包含参考跟踪文件的集合,我们将使用这些参考跟踪文件来评估在A部分中编写的缓存模拟器的正确性。跟踪文件由名为valgrind的Linux程序生成。例如,输入

valgrind --version # 检查有没有安装valgrind sudo apt install valgrind # 没有安装的话执行这一步

 

linux> valgrind --log-fd=1 --tool=lackey -v --trace-mem=yes ls -l

 

  在命令行上运行可执行程序“ ls -l”,按其发生的顺序捕获其每个内存访问的跟踪,并在stdout上打印它们。

  Valgrind内存跟踪具有以下形式:

I 0400d7d4,8 M 0421c7f0,4 L 04f6b868,8 S 7ff0005c8,8

 

  每行表示一个或两个内存访问。每行的格式是

[space]operation address,size

 

  操作字段表示内存访问的类型:“ I”表示指令加载,“ L”表示数据加载,“ S”表示数据存储,“ M”表示数据修改(即数据加载后跟数据存储) 。每个“ I”之前都没有空格。每个“ M”,“ L”和“ S”之前总是有一个空格。地址字段指定64位十六进制内存地址。 size字段指定操作访问的字节数。

2.2 注意事项

必须在64位x86-64计算机上运行此实验。

不要让Windows WinZip程序打开.tar文件。而是将文件保存到Linux目录中,并使用Linux tar程序提取文件。

我们只对数据高速缓存性能感兴趣,因此应忽略所有指令高速缓存访问(以“ I”开头的行)。

要获得A部分的学分,必须在主函数末尾调用函数printSummary,其中包含命中,未命中和逐出的总数:

printSummary(hit_count, miss_count, eviction_count);  

对于本实验,应该假定内存访问已正确对齐,以使单个内存访问永远不会越过块边界。通过进行此假设,您可以忽略valgrind跟踪中的请求大小。

csim.c文件必须在没有警告的情况下进行编译才能获得分数。

编写的Cache模拟器必须对任意s,E和b正确工作。

3. PartA Cache simulator 3.1 说明

  在A部分中,我们要在csim.c中编写一个缓存模拟器,该模拟器以valgrind内存跟踪为输入,在该跟踪上模拟缓存的命中/未命中行为,并输出命中,未命中和逐出的总数。

  我们提供了参考缓存模拟器的二进制可执行文件,称为csim-ref,它可在valgrind跟踪文件上模拟具有任意大小和关联性的缓存行为。它使用LRU(最近使用)替换策略选择出需要的缓存行。

  参考模拟器采用以下命令行参数:

Usage: ./csim-ref [-hv] -s  -E  -b  -t  -h:可选的帮助标志,用于打印使用情况信息 •-v:显示跟踪信息的可选详细标志 •-s :设置的索引位数(S = 2s是设置的数量) •-E :关联性(每组行数) •-b :块位数(B = 2b是块大小) •-t :要重播的valgrind跟踪的名称

 

  命令行参数基于CS:APP2e教科书第597页的符号(s,E和b)。例如:

linux> ./csim-ref -s 4 -E 1 -b 4 -t traces/yi.trace hits:4 misses:5 evictions:3

 

  详细模式下的相同示例:

linux> ./csim-ref -v -s 4 -E 1 -b 4 -t traces/yi.trace L 10,1 miss M 20,1 miss hit L 22,1 hit S 18,1 hit L 110,1 miss eviction L 210,1 miss eviction M 12,1 miss eviction hit hits:4 misses:5 evictions:3

 

防止恶意转载版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/qq_16933601/article/details/111590671

3.2 编程 3.2.1 getopt 和fscanf的使用

  PPT中给出了getopt 和fscanf的使用例程,直接拿来用就行。

int main(int argc, char** argv){int opt,x,y;/* looping over arguments */while(-1 != (opt = getopt(argc, argv, “x:y:"))){/* determine which argument it’s processing */switch(opt) {case 'x':x = atoi(optarg);break;case ‘y':y = atoi(optarg);break;default:printf(“wrong argument\n");break;}}}

 

FILE * pFile; //pointer to FILE objectpFile = fopen ("tracefile.txt",“r"); //open file for readingchar identifier;unsigned address;int size;// Reading lines like " M 20,1" or "L 19,3"while(fscanf(pFile,“ %c %x,%d”, &identifier, &address, &size)>0){// Do stuff}fclose(pFile); //remember to close file when done

 

3.2.2 定义结构体

  讲义中告诉我们,不需要处理B,因此cache_line结构体中包括有效位,标记位,时间戳三个变量就够了。

typedef struct{int valid_bits;unsigned  tag;int stamp;}cache_line;

 

3.2.3 初始化Cache

  定义一个cache[S][E]大小的二维数组(using malloc). 这样cache就模拟好了。

void init(){ cache = (cache_line**)malloc(sizeof(cache_line*)*S);             //malloc cache[S][E]for(int i=0;ib) & ((0xffffffff)>>(32-s));                //set`s indexunsigned t_address = address>>(s+b);                                 //tag`s index

 

3.2.5 LRU策略

替换策略使用的是LRU的缓存替换策略。如果该SET存满了,我每次要找到TIMESTAMP最小的替换。为了方便,我把TIMESTAMP初始化为0,之后每个操作+1. 当TIMESTAMP = 0的时候就代表不VALID。

void time(){for(int i=0;i(s+b);                                 //tag`s index//判断tag为是否相等,是否命中for(int i=0;itag ==t_address){ cache[s_address][i].stamp = 0;       //now ,this is used hit++;return;}}//更新高速缓存cachefor(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3