网站建设生存期模型,软装设计培训班哪家好,如何在百度建设企业网站,网站开发毕业设计书1 Cache的与存储地址的映射
以一个Cache Size 为 128 Bytes 并且Cache Line是 16 Bytes的Cache为例。首先把这个Cache想象成一个数组#xff0c;数组总共8个元素#xff0c;每个元素大小是 16 Bytes#xff0c;如下图#xff1a; 现在考虑一个问题#xff0c;CPU从0x0654…1 Cache的与存储地址的映射
以一个Cache Size 为 128 Bytes 并且Cache Line是 16 Bytes的Cache为例。首先把这个Cache想象成一个数组数组总共8个元素每个元素大小是 16 Bytes如下图 现在考虑一个问题CPU从0x0654地址读取一个字节由于Cache大小相对于主存来说是非常小的。所以Cache只能缓存主存中极小一部分数据。如何根据地址在有限大小的Cache中查找数据呢现在硬件采取的做法是对地址进行散列可以理解成地址取模操作。分为如下多种映射方式他们各有优劣同时也有着继承与发展的关系
1.1 直接映射缓存Direct Mapped Cache
1.1.1 地址映射方式
在前文中讲解了详细的地址映射关系这里仅做简单的回顾 上面的例子中直接映射缓存的地址映射分配方式如下
Cache Size是128 ByteCache Line size是16 Byte-----offset4bit共计8个Cache Line-------------index3bit假设地址宽度是16 bit-----------tag9bits
根据直接映射缓存的工作方式可以计算出不同主存地址段和对应的Cache
地址段Cahce Line Index0x0000-0x000F0x0080-0x008F…00x0010-0x001F0x0090-0x009F…10x0020-0x002F0x00A0-0x00AF…20x0030-0x003F0x00B0-0x00BF…30x0040-0x004F0x00C0-0x00CF…40x0050-0x005F0x00D0-0x00DF…50x0060-0x006F0x00E0-0x00EF…60x0070-0x007F0x00F0-0x00FF…7
可以看到地址0x0000-0x007F地址0x0000-0x000F~0x0070-0x007F处对应的数据可以覆盖整个Cache。0x0080-0x00FF地址的数据也同样是覆盖整个Cache。 1.1.2 直接映射缓存的优缺点
优点
优点1直接映射缓存在硬件设计上会更加简单优点2因为优点1所以成本上也会较低
缺点
容易出现Cache颠簸Cache thrashing
针对这个问题在后面的文章中引入多路组相连缓存优化规避这一问题。首先介绍学习两路组相连缓存
1.2 两路组相连缓存Two-way Set Associative Cache
1.2.1 地址映射方式
依然使用本章的例子Cache Size 128 Bytes Cache Line 16 Byte引入新的概念路Way将Cache平均分成多份每一份就是一路。因此两路组相连缓存就是将Cache平均分成2份每份64 Bytes。将所有索引一样的Cache Line组合在一起称之为组下图中用绿色的框表示。所以当Way2时候Set4Set*Way Cache Line Count。如下图所示。 Cache Size是128 ByteCache Line size是16 Byte-----Offset4bit与直接映射缓存相同因为Cache Line Size 没有变共计4个Set----------------------Index2bit因为被平均分成了2 Way每一个Set有2个Cache Line共计4个Set只需要2bit即可完成索引假设地址宽度是16 bit-----------Tag10bits索引处少了一位所以tag处需要多1 bit
依然假设从地址0x0654地址读取一个字节数据。在上述例子中会有如下操作
根据Index01找到第2行Cache Line第2行对应2个Cache Line分别对应Way 0和Way 1。因此Index也可以称作Set Index组索引。将Set Index01的组内的所有Cache Line对应的tag取出来和地址中的tag部分对比如果其中一个相等就意味着命中。
因此两路组相连缓存较直接映射缓存最大的差异就是
某一地址数据可以存储于对应组内的2个Cache Line而直接映射缓存一个地址只对应一个固定的Cache Line
1.2.2 两路组相连缓存的优缺点
**缺点**硬件成本相对于直接映射缓存更高因为其每次比较tag的时候开销更大。根据Set Index索引到对应组之后由于组内有两个Cache Line所以也会对应的有两个Tag。
在硬件实现角度增加了逻辑复杂性某些硬件可能会做并行比较虽然增加比较速度但进一步增加了硬件设计复杂度。比较两个tag也会有更大的开销速度可能会有所下降
**优点**有助于降低Cache颠簸可能性。
根据两路组相连缓存的工作方式可以画出主存地址0x0000-0x00FF地址对应的Cache分布图。同时在问题“程序试图依次访问地址0x0000、0x0080、0x0100”中比较两者Cache性能。 直接映射缓存0x0000、0x0080、0x0100地址中index部分是一样的。因此这3个地址对应的Cache Line是同一个。当分别访问三个地址的时候都会发生Cache缺失然后数据会发生替换从主存中加载数据。出现Cache颠簸Cache thrashing。 两路组相连缓存0x0000、0x0080、0x0100地址中index部分也是一样的。因此这3个地址会对应到相同的组但是由于有两个Way在第一个数据0x0000加载进来的情况下放置在Way 0再访问第二个数据0x0080也不会替换仅是将他放在Way1 中。避免了Cache颠簸。 好处1不至于每一次有数据访问都需要发生数据替换虽然在访问第三个数据的时候还是需要替换但是随着Way的数量增多可能存下的数据更多好处2一个组中存了若干个数据后面可能会继续使用
因此当Cache size一定的情况下组相连缓存对性能的提升最差情况下也和直接映射缓存一样在大部分情况下组相连缓存效果比直接映射缓存好。同时其降低了Cache颠簸的频率。从某种程度上来说直接映射缓存是组相连缓存的一种特殊情况每个组只有一个Cache Line而已。因此直接映射缓存也可以称作单路组相连缓存。 1.3 全相连缓存Full associative Cache
1.3.1 地址映射方式
组相连的另一个极端情况将Way的数量扩大至最大这就是全向相连缓存即为所有的Cache Line都在一个组内。这种缓存就是全相连缓存。 Cache Size是128 ByteCache Line size是16 Byte-----Offset4bit与直接映射缓存相同因为Cache Line Size 没有变仅有1个Set----------------------Index0bit因为被平均分成了8 Way每一个Set有8个Cache Line所有的Cache Line都在1个Set内因此地址中不需要set index部分。因为只有一个组让你选择不需要设置索引即可完成定位。假设地址宽度是16 bit-----------Tag12bits索引处少了3位所以tag处需要多3 bit
1.3.2 全相连缓存优缺点
缺点
需要根据地址中的tag部分和唯一组内的所有的Cache Line对应的tag进行比较硬件上可能并行比较也可能串行比较。哪个tag比较相等就意味着命中某个Cache Line。因此在全相连缓存中任意地址的数据可以缓存在任意的Cache Line中。但是硬件成本上也是更高。
优点
可以最大程度的降低Cache颠簸的频率。