Ruixiang Li

ArchLab

PKU,2025Fall,ICS,ArchLab

⚠️ 致各位同学:

本笔记的目的是借鉴交流,而非仅仅提供答案,请勿抄袭,后果自负。

你可以参考我的想法、了解有哪些注意的地方,但是在自己实现的时候不要参考,避免抄袭。

ArchLab主要参考了《CS:APP》第三版第4章的内容,包含三个部分:

环境配置&构建项目

由于该Lab使用 Rust 语言编写,所以我们还需要在 Linux 环境下安装 Rust 的运行环境:rustup。(请在安装前确保通过clabcli connect连接到网关)

可以通过运行以下指令安装rustup

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

然后运行以下指令,将$HOME/.cargo/env文件加载到当前shell环境,用来将 Rust 和 Cargo 工具链路径添加到系统PATH中。

source $HOME/.cargo/env

最后运行:

rustup install 1.90
rustup default 1.90

完成安装(完成本文时最新稳定版本为 1.90)。

之后进入archlab-project文件夹:

cd archlab-project

并重新构建项目:

cargo build

完成构建项目后,会有一个archlab-project/target的文件夹,用来存放二进制文件和中间文件。在文件夹archlab-project/target/debug/中,有可执行文件:

release版本同样可以使用,运行cargo build --release可以在target/release/文件夹下发现上述同名文件,其性能经过了编译器优化。

具体使用方法见archlab-project/README.md

(或者阅读中文版README

最后可以分别运行一下三个指令对三个阶段评分:

./target/debug/grader part-a
./target/debug/grader part-b
./target/debug/grader part-c

以及最后你可以运行以下指令来为整个项目评分:

./target/debug/grader autolab

Part A(5 * 3 = 15 pts)

archlab-project/misc目录下工作,编写三个 Y86-64 程序。

Part B(4 + 3 * 7 = 25 pts)

archlab-project/sim/src/architectures/extra目录下工作,完成两个阶段任务(助教gg太肝了,求求你下次不要更新这么多任务了)

B.1(4 pts)

在 SEQ 架构下添加 IOPQ 指令,参考 OPQ 和 IRMOVQ 即可。

B.2(3 * 7 pts)

pipe-s2 为基础架构,依次实现pipe-s3apipe-s3bpipe-s3cpipe-s3dpipe-s4apipe-s4bpipe-s4c多个层级的流水线架构,实现数据转发、暂停Stall、气泡Bubble 的逻辑实现(load-use冒险、数据冒险、跳转预测错误等),并优化其架构。

有一说一,做起来真的很痛苦。网络上没有答案,AI 也得不到正确的答案,每天啃书、调试、做笔记……最后一个人做完整个Lab。但是有一说一,现在确实对流水线的原理理解更加深入了。

Part C(60 pts)

任务

工作目录就是前两个任务的文件夹:archlab-project/miscarchlab-project/sim/src/architectures/extra

你需要操作并提交的文件:

ncopy函数将len个元素整数数组src复制到不重叠的dst,返回计数 src中包含的正整数的数量。ncopy 的 C 描述在 misc/ncopy.c 中。

你的任务就是想尽一切办法,让ncopy函数运行的更快。但是有以下约束:

除此之外,如果你认为其他指令会更有帮助,你可以自由地实现它们。你可以对 ncopy 函数进行任何保持语义的转换,例如重新排序指令、用单个指令替换指令组、删除某些指令以及添加其他指令。

评分

Part C 的评分将基于实现的 CPE 和 AC 来评估性能。

由于一些周期用于设置 ncopy 的调用和设置 ncopy 内的循环,你会发现对于不同的块长度,你会得到不同的 cpe 值(通常随着 N 的增加,cpe 会下降)。因此,我们将通过计算从 1 到 64 个元素的范围内的 cpe 的平均值来评估你的函数的性能。

你可以运行以下指令来获得CPE:

cd archlab-project
cargo run--bin grader-- part-c

以及如下指令来来检查架构的关键路径长度和设备执行顺序。此命令还会生成一个可视化架构依赖图的 HTML 文件。

以下是一个简单的评分器(评分原则):

<!DOCTYPE html>

Score Calculator

<p id="result"></p>

</body> </html>