cacheline如何注册数据传输工作?

How does cacheline to register data transfer work?

假设我有一个包含 10 个元素的 int 数组。使用 64 字节缓存行,它可以容纳从 arr[0]arr[15].

的 16 个数组元素

我想知道当您从 L1 缓存中提取 arr[5] 到寄存器时会发生什么。这个操作是如何进行的? cpu 能否在高速缓存行中选择一个偏移量并读取下一个 n 字节?

缓存通常会提供完整的行(在本例中为 64B),并且 MMU 中的一个单独组件会根据请求的偏移量和大小旋转和剪切结果(通常是一些桶形移位器)。在此过程中,您通常还会进行一些错误检查(如果缓存支持 ECC 机制)。

请注意,缓存通常按组组织,因此一次读取可能必须从多个位置获取字节。通过提供完整的行,缓存可以在让 MMU 选择相关部分之前先按正确的顺序构造字节(并执行检查)。

一些专注于节能的设计可能决定实现较低的粒度,但这通常只会增加复杂性,因为您可能不得不处理更多线段被分割的情况。