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 选择相关部分之前先按正确的顺序构造字节(并执行检查)。
一些专注于节能的设计可能决定实现较低的粒度,但这通常只会增加复杂性,因为您可能不得不处理更多线段被分割的情况。
假设我有一个包含 10 个元素的 int
数组。使用 64 字节缓存行,它可以容纳从 arr[0]
到 arr[15]
.
我想知道当您从 L1 缓存中提取 arr[5]
到寄存器时会发生什么。这个操作是如何进行的? cpu 能否在高速缓存行中选择一个偏移量并读取下一个 n
字节?
缓存通常会提供完整的行(在本例中为 64B),并且 MMU 中的一个单独组件会根据请求的偏移量和大小旋转和剪切结果(通常是一些桶形移位器)。在此过程中,您通常还会进行一些错误检查(如果缓存支持 ECC 机制)。
请注意,缓存通常按组组织,因此一次读取可能必须从多个位置获取字节。通过提供完整的行,缓存可以在让 MMU 选择相关部分之前先按正确的顺序构造字节(并执行检查)。
一些专注于节能的设计可能决定实现较低的粒度,但这通常只会增加复杂性,因为您可能不得不处理更多线段被分割的情况。