这一篇也是计算机组成中比较重要的概念,高速缓存。
上一篇已经讲了存储层次结构,接下来看看高速缓存的原理。
Cache取回数据时并不只是取回CPU要求的单个数据,而是取回一个数据块Block,其实这是一个预期的行为,比如一般我们
访问数组下标为1的数据时,接下来大可能继续访问下标2,3……的数据
另外频繁被访问的数据也会在Cache中被缓存下来
这是Cache的访问过程,看起来非常像我们写的程序逻辑判断。。。
上图中衡量高速缓存的是平均访问时间=命中时间+失效代价X失效率
降低平均访问时间也是从这三个参数入手设计,然而实现目标总没有那么十全十美,比如想让命中时间降低,需要让缓存容量减小,
这样能存下的缓存数据就减少了,失效率也会上去。
需要知道的是指令和数据以前都是在内存中,但是指令和数据的访存时间差距却很大,一般指令访存的平均时间比数据小很多,比如
厨师现在知道了下一个菜是炒番茄鸡蛋,但是收到指令很久才有切好的番茄送过来,因此现代CPU大多数将指令和数据分放在两个独立的
Cache中,避免空间上相互影响。
下图是Corei7的缓存设计。其中路组相联指的是高速缓存中的相同地址头的存放策略。比如编号为1的房间现在放着数据A,现在需要
数据B,取回来后编号也是1,那么是增加一个房间呢还是替换编号1房间的数据A呢,很显然,这又是个相互制约的设计
关于Cache的写策略,只能从字面意思上去理解,具体的怎么设置尚不清楚