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 替换算法实现

不会英文。

期待你的声音

如果在现场,我应该会写很多吧。

posted @ 2025-01-12 17:30  Nazq  阅读(26)  评论(0)    收藏  举报