Skip to content

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全部写错的情况下竟然通过了全部测试案例,