3

场景

  • 缓存 (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 : 0x1FFFBI1)映射到1,等等。
  • 读取/写入请求(不使用非临时写入/读取)给定地址A需要找到它BI,然后将其移动到分配的集合。例如,A= 0x4600A 将有BI= 70。这BI映射到集合 6 ( BI% S)。
  • 为了正确(没有错位)读/写O要缓存的对象( ),需要对齐LS

问题

  1. 是否会O在缓存中串行对齐,或者它可以占用(例如)空闲插槽 0 & 4 & 5,而不是 0 & 1 & 2?
  2. O从缓存中检索分区的成本(惩罚)是多少?假设O没有划分为多​​个B.
  3. 与上面相同的问题,但如果将 whenO放在两个中B,则使用两组。
  4. 如果O尺寸大于SS(512B)会怎样?会不会把数据移到L2,一步步把数据移到L1?它会使用其他套装吗?
  5. 如果 L2(和 L3 就此而言)对于所有数据来说都太小了怎么办?
4

1 回答 1

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 需要找到其 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)

为了正确(没有错位)读/写要缓存的对象(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 就此而言)对于所有数据来说都太小了怎么办?

如果必须将一个块分配给没有空闲高速缓存行的集合,则必须选择一个块才能被驱逐(受害块)。替换策略根据算法(LRU、pLRU、随机)选择牺牲块。

于 2013-05-23T12:01:46.173 回答