line:代表一个cacheline,cache中最小访问单元,常见的cache line大小是32/64 Byte,从主存向cache迁移数据都是按照linesize为单位替换的。(上图红色线条)set(组):相同index的cache line组成的一个组。(上图绿色方框)way(路):在组相联的cache中,cache被分成大小相同的几个快,一个cache块就是一个way。(上图蓝色...
理解cache,SET、WAY、TAG、INDEX,这几个概念是关键。 tag是内存地址的高位部分,存储在cache中用于标识相应的数据。一般来说cache的大小指的是所保存的数据规模,并不包括其中需要储存tag的物理空间。很多时候并不是一个tag对应一个数据,而是对应一组数据,这一组数据块称为cache line,即cache读写的最小的粒度。 cac...
Set :用index查询到的cache line可能是多个,这些index值一样的cacheline称之为一个set way:用白话来说,将cache分成了多个块(多路),每一块是一个way cache TAG :查询到了一行cache后,cachelne由 TAG + DATA组成 cache Data :查询到了一行cache后,cachelne由 TAG + DATA组成 cache Line 和 entry 是一个概念...
14、cache的组织形式(index, way, set) 全相连 直接相连 4路组相连 例如A76 L1 i-cache :64KB,4路256组相连,cache line为64bytes TLB i-cache :全相连,支持4KB, 16KB, 64KB, 2MB,32M的页 L1 d-cache :64KB,4路256组相连,cache line位64bytes TLB d-cache :全相连,支持4KB, 16KB, 64KB, 2MB,5...
好,我们来看组的概念,组是英文单词set直接翻译过来的。我们刚才讲了cache分成几个大块,比如4大块,那么就有4个大小相同的数组。那么对于一个地址来说,从它的索引域可以找到 4个cache line,每个数组一个,那么这4个cache line就组成了一个组。一个组的cache line,他们的索引值都是一样的。大家可能会疑问,为啥要...
1 直接映射,每个Set只有一个Cacheline。 2 组相联,多个Set,每个Set有多个Cacheline。 3 全相联,只有一个Set,所有Cacheline都在这个Set中。 其中组相联中有一个Way的概念,用来表示一个Set中Cacheline的数量。 例如一个Set中有4个Cacheline的话,就叫4路组相联( 4-way set associative)。
由于它们红色的6位都相同,所以他们全部都会找到第0个set的cacheline。第0个set里面有4个way,之后硬件会用地址的高位如0,1,YYYY作为tag,去检索这4个way的tag是否与地址的高位相同,而且cacheline是否有效,如果tag匹配且cacheline有效,则cache命中。 所以地址YYYYYY000000XXXXXX全部都是找第0个set,YYYYYY000001XXXXXX...
举例来说,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中的那个字节。一共...
NumSets:(Number of sets in cache)-1,缓存中的集合数-1,也就是说该字段的数值加1,才是当前cache的set数量。该数值不必是2的幂次方。 Associativity:Number of ways in cache -1,如果Associativity = 3,则说明有4个way。 LineSize:(Log2(Number of bytes in cache line)) - 4,表示一个cache line的大小...
(1)Cortex-M7内核的L1 Cache由多行内存区组成,每行有32字节,每行都配有一个地址标签。数据缓冲DCache是每4行为一组,称为4-way set associative。而指令缓冲区ICache是2行为一组,这样节省地址标签,不用每个行都标记一个地址。(2)对于读操作,只有在第1次访问指定地址时才会加载到Cache,而写操作的话...