方案:
CS
):32kB LS
):64B A
):8 SS
):512B(A
* LS
)S
):64(C
/ SS
)O
)的大小大于LS
假设(如果无效则纠正我):
SS
* A
)表示为B
)以模数方式映射到集合。换句话说,地址0x0 : 0xFFFF
(块索引(BI
)0)被映射到集合0,0x1000 : 0x1FFF
(BI
1)被映射到1,依此类推。 A
需要找到其BI
,然后将其移动到指定的集合。例如,A
= 0x4600A将BI
= 70.此BI
已映射到第6集(BI
%S
)。O
),需要LS
的对齐。问题:
O
是否会在缓存中串行对齐,或者它可以占用(例如)空闲时隙0& 4& 5,而不是0& 1& 2?O
的成本(惩罚)是多少?假设O
未分配到多个B
。O
放在两个B
中,则会使用两个集合。O
尺寸大于SS
(512B),会发生什么?它会将数据移动到L2并逐步将数据移动到L1吗?它会使用其他套装吗?答案 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,随机)选择受害者阻止。