Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

jiangxincode/CacheSim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

43 Commits

Repository files navigation

Cache模拟器(CacheSim)

Build and Release

Deutsch | English | Español | français | 日本語 | 한국어 | Português | Русский | 中文

该程序是大学时《计算机组成与系统结构》的编程实验,我早已毕业多年,但是依然收到很多人的邮件咨询,所以简单描述一下。

该程序模拟了Cache的工作原理并通过读取trace文件得到相应的命中率,能够实现直接映射、全相联、组相联三种映射方式,其中全相联和组相联能够实现随机、LRU两种替换策略。目前三种映射方式均采用回写法,但已经定义了其它写策略的接口,可以很容易扩充。程序具有比较强的鲁棒性,能够接受一定范围的错误输入,并能够比较清晰的提示用户输入。

我尽量缩减了不必要的代码,控制在1000行以内。因为纯粹是为了模拟Cache的工作原理,所以没有过多考虑性能,比如读取30万行的内存地址数据,如果采取全相联的话,需要耗费的时间还是很长的。大家可以帮忙优化下。

程序使用标准C++编写,没有使用三方依赖库,支持Windows/Linux/MacOS。程序中使用了一些C++11标准中的类,比如bitset<T>,所以必须在支持C++11的编译器上进行编译,但现在主流的编译器比如GCC和VS均已支持。本程序编码方式是UTF-8。

如果你只是想查看最后的数据结果,不关心每条数据的具体命中情况请保留base.h中的#define NDEBUG // For NDEBUG pattern,否则,程序需要很长的运行时间。

关于该程序的更多背景和说明请参考Materials文件夹,测试数据请参考TestData文件夹。

如果你对于程序中的内容有所疑问,比如无法在你的机器上正常编译或运行,可以直接在Github上提交issue,并附上你的编译环境和报错日志。

如果你觉得该程序不满足你的要求,你可以看下另一个程序:http://pages.cs.wisc.edu/~markhill/DineroIV/

如何构建

  • cmake -B build
  • cmake --build build

如何获取Trace文件

License

版本改动

  • Version 0.01-0.11:完成基本结构,能够实现直接映射,回写方法的Cache模拟。
  • Version 0.12:优化了程序结构,将所有的全局数据变量、结构的定义声明等全部放到了base.cpp/base.h中;将所有的函数的定义和声明放到了functions.cpp/functions.h中。
  • Version 0.13:大幅度优化了程序,改善了程序结构,修复了大量隐含bug,并将一直可能隐含bug,但还没有时间解决的部分全部做了标记;改善了提示信息,便于调试。
  • Version 0.14:(注記)能够正确实现全相联,随机替换策略、回写法。
  • Version 0.15:大幅度优化了程序,改善了程序结构。特别是其中关于条件编译的部分。
  • Version 0.16:更改了部分变量的命名,使其更加容易阅读。删除了部分无用文件。
  • Version 0.17:(注記)能够正确实现组相联,随机替换策略、回写法
  • Version 0.18:优化了程序,加快了运行速度
  • Version 0.19:实现了LRU的基本框架,但是发现了严重bug,可能会产生回退。
  • Version 0.20:消除了Version 0.19中的严重bug,消除了部分冗余代码。
  • Version 0.21:编码全部设置为UTF-8
  • Version 0.22:删除了不必要信息,比如作者信息,退出信息;重新format代码;删除不必要的using namespace std;
  • Version 0.23:merge部分文件
  • Version 0.30:optimization

About

A simulator of Cache

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

AltStyle によって変換されたページ (->オリジナル) /