常见问题(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 对应的仓库进行确认。
这个问题将不会被修复。