way是将cache进行划分成几个相同大小的部分,每几个way对应一个相同的index(set),个人认为这里的“way”理解为块更合适。 set就是由一组相同index的cacheline组成。 set、way涉及cache的映射方式,直接相连、组相连和全相连,后面会详细介绍。 offset,前面我们提到过,一个cache line由多个数据组成,有时候你不需要整个...
line:代表一个cacheline,cache中最小访问单元,常见的cache line大小是32/64 Byte,从主存向cache迁移数据都是按照linesize为单位替换的。(上图红色线条) set(组):相同index的cache line组成的一个组。(上图绿色方框) way(路):在组相联的cache中,cache被分成大小相同的几个快,一个cache块就是一个way。(上图蓝...
Way -- 相当于Cache的一页,如上述示例,Cache就有2 Ways Set -- 每个Way里的同一Cache Line组成Set 这里理解了,英飞凌描述的2-way set associative DCache是不是就手拿把攥了。 英飞凌每个CPU都有16K DCache,Cache Line为32Bytes,因此总共有512个Cache Line。那么针对memory地址就可以分为: 我们计算非Tag后的...
line:是cache数据调入调出的原子单位。Line的大小又叫linesize。Linesize一般是64B的倍数。我记得skylake CPU的linesize是256B。 一个set组包括多少个line——专业的说法叫 多少个way 同组。 这里的11-ways,8-ways,就是指 每个set里有11个line,或没个set里有8个line。 2、 根据intel EDS的暗示,CHA似乎分成了...
取消index信号,每个cache line占一个way。其实就相当于不考虑offset的3bit,其余地址一个一个放在表中的一条一条上,在这个表里挨个查,显而易见只适合小容量的cache。 此时查找是否命中,需要将地址的tag与所有组的tag进行比较。 因为不存在index,任意数据可以存在任意位置,可以最大程度降低cache的颠簸性。 硬件成本最...
由于是4-way 组相连结构,cache line 可以存在与任意一个way中,所以我们的cache way可能为0,1,2,3中任意一个数字。 求得了set和way的index后,需要对其进行编码,然后写入到Data Cache Tag Read Operation Register寄存器中。其编码规则如下图所示,只需将Set和way的值写入对应的bit中即可,其中Rd[5:3]为cahche...
L1缓存分成两种,一种是指令缓存,一种是数据缓存。L2缓存和L3缓存不分指令和数据。在L1缓存中,有一个叫做Cache line的东西。 他表示cpu从一级缓存读取数据的最小单位 L1和L2缓存在每一个CPU核中,L3则是所有CPU核心共享的内存。 L1、L2、L3的越离CPU近就越小,速度也就越快,越离CPU远,速度也越慢。
上面以本人电脑的cpu一级缓存为例知道了cpu0的一级缓存的大小:32k,其包含64个(sets)组,每组有8(ways),则可以算出每一个way(cache_line)的大小 cache_line = 32*1024/(64*8)=64 bytes。当然我们也可以通过以下命令查出cache_line的大小 $ cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line...
line. 通常翻译成缓存线, 而我一般翻译成缓存行. cache line的大小(有时候也称作宽度)取决于cpu以及cache的设计.- cache的组织结构通常分成三种: 直接映射(direct map)型, 全关联(fully-associative)型, 组关联(set associative)型. 现在流行的英特尔x86_64一般采用的是组关联型cache....
举例来说,data cache: 32-KB, 8-way set associative, 64-byte line size Cache总大小为32KB,8路组相连(每组有8个line),每个line的大小linesize为64Byte,OK,我们可以很轻易的算出一共有32K/8/64=64 个组。 对于32位的内存地址,每个line有2^6 = 64Byte,所以地址的【0,5】区分line中的那个字节。一共...