- 高速缓存(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 : 0x1FFF
(BI
1)被映射到1,等等。 - 读取/写入请求(不使用非时间性写入/读取)给定地址
A
要求找到其BI
,然后将其移动到指定集。例如,A
= 0x4600A将具有BI
= 70.这BI
被映射到集合6(BI
%S
)。 - 为了正确(没有未对齐)r/w对象(
O
)进行缓存,需要对齐LS
。
问题:
- 请问
O
在缓存中连续对齐的,或者它可以采取(例如)免费时隙0 5,而不是0 2? - 从缓存中检索分区
O
的成本(惩罚)是多少?假设O
未被分割为几个B
。 - 与上述相同的问题,但在
O
被置于两个B
中的情况下,因此使用了两组。 - 如果
O
尺寸大于SS
(512B),会发生什么情况?它会将数据移动到L2并逐步将数据移动到L1吗?它会使用其他套件吗? - 如果L2(和L3就此而言)对于所有数据来说太小,该怎么办?
这和C++ 11有什么关系? –
@BartekBanachewicz主要是因为'alignas()'提供了简单和标准化的对齐操作。当您开始对齐数据以优化缓存性能时,我认为自然会要求缓存大对象的成本。 –
呃。这听起来很像*过早的优化。 –