CS152 · Lab 4
Lab 4: RISC-V Vector Extension
这个实验不使用 Chipyard,而是直接在一个扩展了时序模型的 spike 模拟器上写真实的 RVV 汇编代码——把第 17-19 课讲的向量寄存器、SEW/LMUL、链接等概念,变成你亲手调试通过的向量核函数。
发布:2023-02-14(随第 9 课)
截止:2023-04-18
难度:较难
环境说明
本实验使用 RVV 0.10 草案版本的规范(注意:不是第 19 课讲的已批准 v1.0 规范——vsetvli/vle/vfmacc.vf 等指令的具体编码在两个版本之间有差异,实验代码需要按 0.10 草案的语法编写)。模拟器是单发射顺序核心、512 位 VLEN 向量单元,其余参数与默认的 RocketConfig 一致。评分方式是 100% 指导性部分(通过 Gradescope 自动评分器判定正确性,不需要撰写书面报告)。
指导性部分(100% 分数,Gradescope 自动评分)
- cmplxmult:复数向量乘法,需要用到分段(segmented)load
- dgemv:矩阵-向量乘法,点积部分需要用到向量规约(第 17 课讲过的向量规约技术)
- dgemm:矩阵-矩阵乘法,需要用到向量-标量 FMA 和寄存器分块,分别提供内层循环和余数循环两个文件
- imax:找向量中最大值的下标,需要结合规约和
vfirst.m 掩码技巧
开放性部分(可选/不计分,二选一)
- spmv:稀疏矩阵-向量乘法
- rsort:基数排序——需要用到分散/聚集(scatter/gather)和谓词化,同时要注意避开
vrem 指令
与第 19 课的关键区别
本实验使用的是 RVV 0.10 草案规范,而不是第 19 课系统讲解的已批准 v1.0 规范。两者在部分指令编码上不同——写代码时应以 Lab 4 提供的实验手册和头文件为准,而不是直接照搬第 19 课的指令编码细节。SEW/LMUL/VLMAX 这些核心概念在两个版本之间是一致的,真正需要注意的是具体的汇编指令助记符和编码格式。
交付物与评分说明
- 指导性部分通过 Gradescope 自动评分器判定正确性,不需要撰写书面报告
- 本实验的评分模式与其他 4 个实验不同(其他实验都是"30% 指导性 + 70% 开放性"或类似比例,本实验是"100% 指导性,开放性不计分")
- 全学期至少完成 3/5 个实验,否则自动判定为 F
知识检查
问题 1:Lab 4 使用的 RVV 规范版本与第 19 课讲解的版本有什么关系?
问题 2:Lab 4 的评分模式与其他 4 个实验相比有什么不同?
参考资料与延伸阅读
🧪 Lab 4