今天来复习 cache 相关的知识!
首先可以参考一下这篇:Day.8 Cache 的基本原理
cache 是一个折衷的设计,存取速度比 RAM 快上一大截,比较接近 CPU 的运作速度,但是 size 没有 RAM 大,所以 cache 能够储存的资料量一定是 RAM 的子集,那麽要怎麽知道现在 CPU 要存取的资料有没有在 cache 中呢?
cache 的设计原理有点像是一个杂凑表(hash table),取要存取位址的某些部份来做比对,很多资讯工程硕士班的入学考试,都会有相关的题目,笔者作为一个考试录取的硕士生,从来没有真正的理解这部分怎麽计算XDDDD
直到这次的整理,才大致上了解 cache 计算的细节,那我们就以考题为例,来复习一下 cache 的相关计算罗!
[ tag | index | block or line offset | byte offset ]
byte offset
:用来存取一个 word 里面的某个 byte,所以所需的 bit 数会是可以代表一个 word 里面可以存的 byte 数,通常 1 word == 4 byte 所以这个部分通常为 2 bitblock offset
:用来存取 cache line 中的某个 word,所以由 cache line size(cache block size) 和 byte per word 来决定,举例 64 B 的 cache block size,4 byte per word,那 block offset 就是 4 bit (64/4 == 2^4
)index
:用来存取某个 set,所以由 way 和 cache block entry 数目决定;若为 direct-mapped,表示有 cache block entry 这麽多个 set;若为 fully associative 则是只有 1 个 set (index bit 数目为零);若是 n-way associative,则 set 数量 == (# of cache block entry / n)
tag
:用来比对是否存在 cache 中的索引,bit 数量 == (# of bit representing the address space - # of bit for byte offset - # of bit for block offset - # of bit for index)
题目 | 答案 |
---|---|
从上面可以大致上理解,cache 比对的方式,那麽接下来记录的是 cache 比对方式的种类。
上个图:
TLB 的位置决定了 cache 比对的方式,最左边 PIPT(Physically Indexed, Physically Tagged),中间 VIVT(Virtually Indexed, Virtually Tagged),最右边 (Virtually Indexed, Physically Tagged)。
homonyms
:同一个 VA 对应到 2 个不同的 PAsynonyms
:同一个 PA 对应到在 cache 中的 2 个 VA;对其中一个 VA 做修改,会导致两个 VA 的值有歧异的问题。
Laravel是基於MVC架构设计出来的框架, 什麽是MVC(Model–View–Controll...
Block说:我让Ruby发光发亮。 Ruby中少数天生不属於物件的存在。 未物件化前,只能依附在有...
工欲善其事,必先利其器—该先装 Visual Studio 了 今天的内容会开始介绍我们要使用的整合...
上一篇提到有工具可以做到丛集 (Cluster) 的功能,以使用多线程,今天就要来简单介绍一下这个强...
-网站WentzWu.com的X.509证书样本 因为如今在实践中很少使用正斜杠“ /”作为分隔符...