pa3-1¶
实验总结¶
-
本阶段主要设计了cache机制,设计了cache结构,并实现了cache读写功能。
-
经过本次实验,对cpu经过cache和内存读取数据的方式、流程有了更深刻的理解,期待在pa3中完成一个较为完整的层次存储结构系统。
-
感觉这一部分调试起来很有难度,程序都是没有运行起来直接段错误了,并且往往已经执行了大量指令后才出现错误,这给调试带来了很大的困难
-
实验中发现矩阵乘法的测试案例过不去,会一直卡住,该表N的大小调试了很久,本来以为是出现了死循环,最后才发现是因为cache随机替换中每次生成随机数时都通过时间设置了随机种子,这个过程较慢又被重复了很多次,导致程序变得非常慢,改成只在cache初始化时设置就顺利通过测试了。
-
最后还要注意小端模式下的数据分配,跨快读写、设计地址结构体都需要考虑这一点(刚开始都写错了)
-
比如图示cache的结构为
tad|num|address
但要注意的是右侧为低地址,左侧为高地址,这在设计结构体时要格外小心。 -
union CacheAddress{//易错!大小端 struct{ uint32_t address : 6; uint32_t num : 7; uint32_t tag : 19; }; uint32_t val; };
-
这个问题是在完成pa3-3中线性地址向物理地址转化过程时才意识发现的,不过比较离谱的是在cache全部写错的情况下竟然通过了全部测试案例,