跳转至

常见问题(2023)

distribute 分支权限不够,不能 merge 或者 push

之前默认分支的权限设置错误了,现在已经把 distribute 分支的 push 和 merge 权限下发给大家了。

但注意 distribute 分支仍然受到保护,不可以 force push。

如果 git 使用不熟练的话,建议单独建立新分支进行实验。

我希望实现 RAS,但是 Instruction::execute 当中对于 mispredict 的判定没有考虑方向正确,地址错误的情况,是否可以修改?

可以,如果需要实现 RAS,可以对 common/instructions.cpp 的 522 行附近的内容进行修改。在报告中指明即可。

RegReadBundle 跟教材上的 Vj, Qj 的定义不是太匹配

RegReadBundle 跟 Vj, Qj 的功能和目的实际上是完全一样的。真正实现电路的时候,为了节省寄存器位宽,应该使用 Vj, Qj 的方式对寄存器唤醒进行维护。

但我们这里只是一个软件实验,并不需要搞这么麻烦。实现的时候概念理解了就可以了。也可以尝试把 RegReadBundle 的项目跟 Vj, Qj 做对应,进行实现。

接口调用有限制吗?

没有限制,只要你觉得对,而且权限正确就可以调用。如果觉得某接口的权限不正确,请及时咨询助教。

本地 selection sort 和 ntt 测例都通过了,但是无法通过 matmul 或 merge sort 测例怎么办?

首先,测例代码已经给到大家,就在 test 文件夹中。可以自行设计 checkfile 进行测试。

如果不希望编写 checkfile,也可以使用 program 文件夹下的 processor test 来运行程序。program/processor_test.cpp 可以修改,CI 测评时不会使用。

如果还是有问题,可以咨询助教,确认并非框架理解 / 框架本身的问题导致的错误。

只实现 BTB,不实现 RAS 可以通过测试吗?

可以,RAS 为选做功能中的拓展功能,不会纳入评分和测试当中。

Store Buffer 的 query 接口实现有误

这是个测框架的时候没测出来的 bug,query 的时候没查 popPtr。请同学们自行进行更改,修复此问题。

感谢 @方骏祺 同学的反馈。

本地通过,提交全部 Segmentation Fault 如何解决?

如果你使用的是下发的测例进行实验,则请确保你在 commit 之前将 CMakeLists.txt 还原,让评测机编译测例。

如果不是这个问题,请尽快联系助教。

框架无法编译通过

确认你是否使用了 g++ 编译框架,如果为 Mac 系统,可能需要指定编译器为 g++ 而不是 clang++

M1 Mac 下,框架的指令译码无法正常工作

貌似在 ARM 架构下,std::string::assign 有点问题。

请定位到 common/masked_literal.cpp:51 将这句话改为用 std::reverse 实现。

目前我们还没能复现这个错误。

我修改了 check_predict.sh,但还是进行了分支预测的测试。

由于一些复杂的因素(ci 分 job 会导致其运行不稳定),这个 export 出来的变量失效了。

如果不希望测试分支预测功能,留下这个 failed 的 ci 就好。我们在检查实验报告时,会对你提交的 git commit hash 对应的仓库进行确认。

这个问题将不会被修复。


最后更新: 2024年2月23日
作者:cuibst