计算机组成与体系结构课程实验:基于SPIM-CACHE的Cache实验基础教程

本教程由 ChatGPT 5.2 大模型生成!提示词以及附件如下:

  • 附件:
    实验二.ppt
    MIPS32指令卡片.pdf
  • 提示词:
    我正在完成一份计算机组成课程的实验,以下是实验要求:
    一.实验目的:
    (1)熟悉SPIM-CACHE模拟器环境
    (2)深入认识CACHE的工作原理及其作用。
    二.实验内容:
    (1)阅读实验指导书资料
    (2)下载SPIM-CACHE软件,理解英文论文的基本内容之后,给出几种典型的cache配置,运行英文论文提供的代码,记录运行时CACHE命中率等重要数据;
    (3)运行Fig.4代码,配置2个左右不同的CACHE环境,了解mapping functions 即映射规则
    (4)运行Fig.7代码,配置2个左右不同的CACHE环境,了解temporal and spatial locality 即时空局部性,进一步理解cache的工作原理;
    (5)运行Fig.8代码,配置4个左右不同的CACHE环境,运行学习replacement algorithms 即替代算法,理解其工作原理
    我不知道该如何操作这个实验,请告诉我实验流程,其中软件与代码文件已由老师提供

这个实验不是让你"自己写复杂程序" ,而是在老师给定的软件和代码基础上,通过不同 Cache 配置反复运行、记录数据、分析现象 。下面我按 "你实际该怎么一步一步做" 来给你一份 可直接照做的实验流程说明 ,对应你实验要求中的 5 点内容。


目录

    • 一、实验整体你在"干什么"(先有全局概念)
    • 二、实验前准备(重要)
      • [1️⃣ 打开 SPIM-CACHE](#1️⃣ 打开 SPIM-CACHE)
      • [2️⃣ 设置 PC 起始地址(非常关键)](#2️⃣ 设置 PC 起始地址(非常关键))
      • [3️⃣ 加载老师给的程序代码](#3️⃣ 加载老师给的程序代码)
    • 三、实验内容(按实验要求一步一步来)
    • [(一)Fig.4:理解 Cache 映射规则(mapping functions)](#(一)Fig.4:理解 Cache 映射规则(mapping functions))
      • [🎯 实验目的](#🎯 实验目的)
      • [✅ 实验操作流程](#✅ 实验操作流程)
        • [Step 1:选择 Fig.4 的代码(sum = ∑A)](#Step 1:选择 Fig.4 的代码(sum = ∑A))
        • [Step 2:固定 Cache 总大小](#Step 2:固定 Cache 总大小)
        • [Step 3:改变"槽大小(Block Size)"](#Step 3:改变“槽大小(Block Size)”)
        • [Step 4:运行程序](#Step 4:运行程序)
        • [Step 5:记录数据(重点)](#Step 5:记录数据(重点))
        • [Step 6:写分析(报告用)](#Step 6:写分析(报告用))
    • [(二)Fig.7:理解时间/空间局部性(temporal & spatial locality)](#(二)Fig.7:理解时间/空间局部性(temporal & spatial locality))
      • [🎯 实验目的](#🎯 实验目的)
      • [✅ 实验操作流程](#✅ 实验操作流程)
        • [Step 1:使用 Fig.7 代码](#Step 1:使用 Fig.7 代码)
        • [Step 2:修改外循环次数 N](#Step 2:修改外循环次数 N)
        • [Step 3:Cache 固定不变](#Step 3:Cache 固定不变)
        • [Step 4:分别运行并记录命中率](#Step 4:分别运行并记录命中率)
        • [Step 5:分析要点(报告必写)](#Step 5:分析要点(报告必写))
    • [(三)Fig.8:理解替换算法(replacement algorithms)](#(三)Fig.8:理解替换算法(replacement algorithms))
      • [🎯 实验目的](#🎯 实验目的)
      • [✅ 实验操作流程](#✅ 实验操作流程)
        • [Step 1:使用 Fig.8 代码](#Step 1:使用 Fig.8 代码)
        • [Step 2:修改访问间距(stride)](#Step 2:修改访问间距(stride))
        • [Step 3:配置不同 Cache 环境(4 种左右)](#Step 3:配置不同 Cache 环境(4 种左右))
        • [Step 4:运行并记录命中率](#Step 4:运行并记录命中率)
        • [Step 5:分析要点](#Step 5:分析要点)
    • 四、实验报告该怎么写(老师最关心)
    • 五、你现在可以直接做的事(行动清单)
    • 免责声明

一、实验整体你在"干什么"(先有全局概念)

一句话总结:

用 SPIM-CACHE 模拟器,运行老师给定的 MIPS 程序(Fig.4 / Fig.7 / Fig.8),在不同 Cache 配置下,比较 Cache 命中率的变化,从而理解映射规则、局部性和替换算法。

你不需要:

  • 自己写 Cache
  • 自己实现算法
  • 自己算复杂公式

你需要:

  • 改 Cache 参数
  • 运行程序
  • 抄数据、做表、写分析

二、实验前准备(重要)

1️⃣ 打开 SPIM-CACHE

  • 启动老师给你的 spim-cache

  • 不要用 F5 直接运行

    • F10(单步)
    • F11(多步)

👉 这是实验明确要求的


2️⃣ 设置 PC 起始地址(非常关键)

每次运行程序前

复制代码
PC = 0x400000

否则程序可能直接跑飞或没数据。

👉 这是实验 PPT 明确写的前置条件!


3️⃣ 加载老师给的程序代码

  • Fig.4、Fig.7、Fig.8 的代码都已经由老师提供

  • 你只需要:

    • 打开对应 .s 文件
    • 确认 .text 段存在
    • _start 是入口

三、实验内容(按实验要求一步一步来)


(一)Fig.4:理解 Cache 映射规则(mapping functions)

🎯 实验目的

理解:

  • 直接映射 / 组相联
  • 块大小改变 → 命中率变化

✅ 实验操作流程

Step 1:选择 Fig.4 的代码(sum = ∑A)

这是一个顺序访问数组的程序,专门用来观察映射效果。


Step 2:固定 Cache 总大小

统一设置:

复制代码
Cache Size = 256B

Step 3:改变"槽大小(Block Size)"

分别做三次实验:

实验编号 Cache Size Block Size
1 256B 16B
2 256B 8B
3 256B 4B

映射方式可选:

  • 直接映射
  • 或 2 路 / 4 路组相联(老师允许你自行定义)

Step 4:运行程序
  • 设置 PC = 0x400000
  • F10 / F11 运行至结束
  • 打开 Cache Statistics

Step 5:记录数据(重点)

记录表格即可,例如:

Block Size 映射方式 I-Cache 命中率 D-Cache 命中率
16B 直接映射 xx% xx%
8B 直接映射 xx% xx%
4B 直接映射 xx% xx%

Step 6:写分析(报告用)

重点写:

  • 块变大 → 空间局部性 ↑
  • 块变小 → 冲突 miss ↑
  • 为什么命中率会变化

(二)Fig.7:理解时间/空间局部性(temporal & spatial locality)

🎯 实验目的

通过循环次数变化,观察:

  • 时间局部性(重复访问)
  • 空间局部性(相邻地址)

✅ 实验操作流程

Step 1:使用 Fig.7 代码

老师给的代码结构是:

asm 复制代码
ext_loop:   # 外循环
loop:       # 内循环

Step 2:修改外循环次数 N

依次修改为:

复制代码
N = 1, 5, 10, 100

👉 PPT 已明确要求这样做


Step 3:Cache 固定不变
复制代码
Cache Size = 256B

映射方式你可选:

  • 直接映射
  • 2 路组相联

Step 4:分别运行并记录命中率

示例表格:

N 值 映射方式 D-Cache 命中率
1 直接映射 xx%
5 直接映射 xx%
10 直接映射 xx%
100 直接映射 xx%

Step 5:分析要点(报告必写)
  • N 增大 → 重复访问同一数据
  • 时间局部性增强 → 命中率明显上升
  • Cache 起到"加速热点数据"的作用

(三)Fig.8:理解替换算法(replacement algorithms)

🎯 实验目的

通过访问步长(stride)变化,观察:

  • Cache 冲突
  • 替换策略效果(如 LRU)

✅ 实验操作流程

Step 1:使用 Fig.8 代码

Step 2:修改访问间距(stride)

依次设置为:

复制代码
1, 2, 4, 8, 16, 32, 64

同时:

复制代码
外循环次数 = 100

👉 这是实验硬性要求


Step 3:配置不同 Cache 环境(4 种左右)

例如:

实验 组相联度 替换算法
A 直接映射 ---
B 2 路组相联 LRU
C 4 路组相联 LRU
D 4 路组相联 FIFO

Step 4:运行并记录命中率

示例:

Stride Cache 配置 命中率
1 2 路 LRU xx%
8 2 路 LRU xx%
32 2 路 LRU xx%

Step 5:分析要点
  • stride 越大 → 空间局部性越差
  • 组相联度 ↑ → 冲突 miss ↓
  • LRU 通常优于 FIFO

四、实验报告该怎么写(老师最关心)

老师 PPT 已明确:

报告以数据表格 + 分析为主,不需要运行截图

推荐结构

  1. 实验目的
  2. 实验环境(SPIM-CACHE + Cache 参数)
  3. Fig.4 实验数据与分析
  4. Fig.7 实验数据与分析
  5. Fig.8 实验数据与分析
  6. 总结(Cache 的作用 + 三点理解)

五、你现在可以直接做的事(行动清单)

✔ 打开 spim-cache

✔ 设置 PC = 0x400000

✔ 跑 Fig.4 → 改 block size → 记命中率

✔ 跑 Fig.7 → 改 N → 记命中率

✔ 跑 Fig.8 → 改 stride + cache 配置 → 记命中率

✔ 做表格 + 写分析


免责声明

本文由 ChatGPT 5.2 大模型生成,在此仅做搬运处理!