csapp-lab4 cachelab

本文通过Cache-Lab实验介绍缓存对C程序性能的影响。实验包括模拟缓存实现及矩阵转置优化,旨在降低miss数量。Part A涉及组相连缓存的数据结构设计及LRU策略实现;Part B探讨不同尺寸矩阵转置的优化策略,以适应给定缓存大小。
摘要由CSDN通过智能技术生成
Cache-Lab: Understanding Cache Memories

该lab是为了帮助理解缓存对于c程序的性能影响,包括两部分:第一部分是写一个模拟缓存的c程序,第二部分是对于一个转置矩阵的函数进行优化来达到尽可能小的miss数量。

官网下载tar文件并解压tar xvf cachelab-handout.tar得到需要编辑的两个文件csim.ctrans.c以及其他文件。

Part A

首先需要定义缓存的数据结构,这里是组相连缓存,所以定义缓存行Cache_line,组成缓存组Cache_set,再组成缓存Cache,具体定义见下面的代码。

    #define ADDRESS_SIZE 64

    typedef struct {
        char valid_bit;
        unsigned long tag;
        int LRU_count;
    } Cache_line;

    typedef struct {
        Cache_line* lines;
    } Cache_set;

    typedef struct {
        int S;
        int E;
        Cache_set* sets;
    } Cache;

在考虑解析命令行选项,使用getopt库函数,具体用法可以参考这里。下面的主函数见文知意,后面的init_cache(s, E, b, &cache)cacheSimulator(s, E, b, file, isVerbose, &cache)分别代表初始化缓存数据结构(使用malloc分配内存)和缓存模拟。

int main(int argc, char *argv[]) {
    int s, E, b;
    char file[100];                                             /* 存储打开的文件名 */
    int isVerbose = 0;
    Cache cache;
    hit_count = miss_count = eviction_count = 0;

    int ch;
    while ((ch = getopt(argc, argv, "vs:E:b:t:")) != -1) {
        switch (ch) {
            case 'v':
                isVerbose = 1;
                break;
            case 's':
                s = atoi(optarg);
                break;
            case 'E':
                E = atoi(optarg);
                break;
            case 'b':
                b = atoi(optarg);
                break;
            case 't':
                strcpy
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值