该程序是大学时《计算机组成与系统结构》的编程实验,我早已毕业多年,但是依然收到很多人的邮件咨询,所以简单描述一下。
该程序模拟了Cache的工作原理并通过读取trace文件得到相应的命中率,能够实现直接映射、全相联、组相联三种映射方式,其中全相联和组相联能够实现随机、LRU两种替换策略。目前三种映射方式均采用回写法,但已经定义了其它写策略的接口,可以很容易扩充。程序具有比较强的鲁棒性,能够接受一定范围的错误输入,并能够比较清晰的提示用户输入。
我尽量缩减了不必要的代码,控制在1000行以内。因为纯粹是为了模拟Cache的工作原理,所以没有过多考虑性能,比如读取30万行的内存地址数据,如果采取全相联的话,需要耗费的时间还是很长的。大家可以帮忙优化下。
程序使用标准C++编写,没有使用三方依赖库,支持Windows/Linux/MacOS。已经提供了Makefile文件,保证不同编译环境的编译一致性。程序中使用了一些C++11标准中的类,比如bitset,所以必须在支持C++11的编译器上进行编译,但现在主流的编译器比如GCC和VS均已支持。本程序编码方式是UTF-8。
如果你只是想查看最后的数据结果,不关心每条数据的具体命中情况请保留base.h中的#define NDEBUG // For NDEBUG pattern
,否则,程序需要很长的运行时间。
关于该程序的更多背景和说明请参考Materials
文件夹,测试数据请参考TestData
文件夹。
如果你对于程序中的内容有所疑问,比如无法在你的机器上正常编译或运行,可以直接在Github上提交issue或者直接发邮件给我[email protected],并附上你的编译环境和报错日志。
如果你觉得该程序不满足你的要求,你可以看下另一个程序:http://pages.cs.wisc.edu/~markhill/DineroIV/
- The MIT License (MIT) http://mit-license.org/
- 完成基本结构,能够实现直接映射,回写方法的Cache模拟。
- 优化了程序结构,将所有的全局数据变量、结构的定义声明等全部放到了base.cpp/base.h中;将所有的函数的定义和声明放到了functions.cpp/functions.h中。
- 大幅度优化了程序,改善了程序结构,修复了大量隐含bug,并将一直可能隐含bug,但还没有时间解决的部分全部做了标记;改善了提示信息,便于调试。
- 能够正确实现全相联,随机替换策略、回写法。
- 大幅度优化了程序,改善了程序结构。特别是其中关于条件编译的部分。
- 更改了部分变量的命名,使其更加容易阅读。删除了部分无用文件。
- 能够正确实现组相联,随机替换策略、回写法
- 优化了程序,加快了运行速度
- 实现了LRU的基本框架,但是发现了严重bug,可能会产生回退。
- 消除了Version 0.19中的严重bug,消除了部分冗余代码。
- 编码全部设置为UTF-8
- 删除了不必要信息,比如作者信息,退出信息
- 重新format代码
- 删除不必要的using namespace std;
- merge部分文件
- optimization