cpu cache如何处理大内存对象?

时间:2013-02-07 09:31:28

标签: optimization cpu-cache

方案

  • 缓存(L1)大小(CS):32kB
  • 行大小(LS):64B
  • 相关性(A):8
  • 设置尺寸(SS):512B(A * LS
  • 设置(S):64(C / SS
  • 读/写对象(O)的大小大于LS

假设(如果无效则纠正我):

  • 虚拟内存块(大小为4kB(SS * A)表示为B)以模数方式映射到集合。换句话说,地址0x0 : 0xFFFF(块索引(BI)0)被映射到集合0,0x1000 : 0x1FFFBI 1)被映射到1,依此类推。
  • 读取/写入请求(不使用非时间写入/读取)给定地址A需要找到其BI,然后将其移动到指定的集合。例如,A = 0x4600A将BI = 70.此BI已映射到第6集(BIS)。
  • 为了正确(没有错位)r / w要缓存的对象(O),需要LS的对齐。

问题

  1. O是否会在缓存中串行对齐,或者它可以占用(例如)空闲时隙0& 4& 5,而不是0& 1& 2?
  2. 从缓存中检索分区O的成本(惩罚)是多少?假设O未分配到多个B
  3. 与上述问题相同,但如果将O放在两个B中,则会使用两个集合。
  4. 如果O尺寸大于SS(512B),会发生什么?它会将数据移动到L2并逐步将数据移动到L1吗?它会使用其他套装吗?
  5. 如果所有数据的L2(和L3)太小,该怎么办?

1 个答案:

答案 0 :(得分:1)

  

映射虚拟存储块(大小为4kB(SS * A),表示为B)   以模数方式设置。换句话说,地址0x0:0xFFFF   (块索引(BI)0)映射到集合0,0x1000:0x1FFF(BI 1)   映射到1,依此类推。

在L1缓存和内存层次结构之间传输: L1高速缓存和存储器层次的后续级别之间的传送单元是行大小(LS)字节的块。也就是说,对于L1高速缓存,内存以64字节块(LS字节)构成。

内存块和缓存条目之间的对应关系: 连续的内存块被映射到连续集的缓存行。因此,块0(地址0x0000 : 0x003F)被映射到集合0处的高速缓存行,块1(地址0x0040 : 0x007F)被映射到集合1处的高速缓存行,等等。


  

读/写请求(不使用非时间写/读)a   给定地址A需要找到它的BI,然后将其移动到   分配集。例如,A = 0x4600A将具有BI = 70.此BI是   映射到集合6(BI%S)。

找到块标识符(或索引)和设置索引(SI)的正确过程如下:

 BI = A >> LS = 0x4600A >> 6 = 0x1180
 SI = BI & (S-1) = 0x1180 & 0x3F = 0x0000
 (when S is a power of two, BI & (S-1) = BI  mod S)

  

为了正确(没有错位)r / w对象(O)   缓存,需要LS的对齐。

这不是必要的。 O不需要块对齐。


  

Q1。 O是否会在缓存中进行串行对齐,或者可以采用(对于   实例)免费插槽0& 4& 5,而不是0& 1& 2?

O块将存储在具有缓存行粒度的连续集中(设置k,k​​ + 1,...,S-1,0,1,...)。

  

Q2。从缓存中检索分区O的成本(惩罚)是多少?   假设O没有被划分为多个B.   Q3。与上面相同的问题,但是如果将O放在两个B中,   因此使用了两套。

我假设您对从缓存中读取O字的CPU的成本感兴趣。 假设顺序引用O,则高速缓存访​​问的数量将等于引用的单词的数量。我认为成本不依赖于相同或不同集合中的块(至少在多端口缓存中)。

  

Q4。如果O尺寸大于SS(512B)会发生什么?将   它将数据移动到L2并逐步将数据移动到L1?它会用吗   其他套装?

     

Q5。如果L2(和L3)对于所有数据来说太小了会怎么样?

如果必须将块分配给没有空闲缓存行的集合,则必须选择一个块以便逐出(受害者阻止)。替换策略根据algorithm(LRU,pLRU,随机)选择受害者阻止。