根据Real World Technologies关于“英特尔的 Sandy Bridge 微架构”的文章:
“Sandy Bridge 的 uop 缓存被组织成 32 组和 8 路,每行 6 uop,总共 1.5K uop 容量。uop 缓存严格包含在 L1 指令缓存中。每行还保存元数据,包括行中有效 uop 的数量和对应于 uop 缓存行的 x86 指令的长度。映射到 uop 缓存的每个 32B 窗口可以跨越一组 8 路中的 3 条,最多 18 路 uop – 大约 1.8B/uop。如果一个 32B 的窗口有超过 18 个 uop,它就无法放入 uop 缓存中,必须使用传统的前端。微码指令不保存在 uop 缓存中,而是由指向微码 ROM 的指针和可选的前几个 uop 表示。”
'每个 32B 窗口(来自指令缓存)被映射到 uop 缓存中,可以跨越一组 8 路中的 3 路'
因此,假设我们有一个 32B 指令窗口,它将是 L1 指令缓存行的一半,在该行上,只有偏移位不同,但该行上所有字节的标记位和设置位都相同。
解码 32 字节窗口后,uop 将使用与用于从 L1 指令缓存中检索 …