THUWC 2020 Day3 题解
Cache 一致性协议
按照学习手册最后的模拟。
\(\text{Exclusive} / \text{Shared}\) 只有编号最小的返回,但都要改变状态。
\(\text{Modified}\) 的所有的都要返回且改变状态。
Cache 替换算法
这里说一下 \(\text{PLRU}\) 算法。
对于每次,先找是否命中。
如果是否,就在二叉搜索树上找到叶子更改。
不论是否命中,最终都要根据叶子向上跳,把祖先的边不指向指定叶子。
不会出现存在 \(\text{Invalid}\) 却替换的情况。
若存在 \(\text{Invalid}\),根节点会指向 \(\text{Invalid}\) 多的一边,儿子会指向 \(\text{Invalid}\)。
这样递归下去指向 \(\text{Invalid}\)。
只读 Cache 实现
有 \(\frac{2^{14}}{W}\) 个组,对每一个组维护读策略。
对询问 \(\text{address}\),二进制下,去掉低 \(2\) 位的 \(\text{offset}\),在剩下部分低 \(\log_2{\frac{2^{14}}{W}}\) 位为 \(\text{Index}\),其余部分为 \(\text{tag}\)。
实现考虑将组封装结构体,维护读策略(替换算法)。
读写 Cache 实现
给 \(\text{Cacheline}\) 加上 \(\text{clean} / \text{dirty}\) 性质。
向 \(\text{Cache}\) 进行一次读操作,如果替换的块是 \(\text{dirty}\) 的,则写入内存。
向 \(\text{Cache}\) 进行一次写操作,如果写缺失,是 \(\text{No-write Allocate}\),则不替换块,否则替换,且替换块是 \(\text{dirty}\) 也要写入内存。
LIRS 替换算法实现
不会英文。
期待你的声音
如果在现场,我应该会写很多吧。

浙公网安备 33010602011771号