我问这个关于 Haswell 微架构(英特尔至强 E5-2640-v3 CPU)的问题。从CPU和其他资源的规范我发现有10个LFB, super 队列的大小是16。我有两个关于LFB和SuperQueue的问题:
1) 系统可以提供的最大内存级并行度是多少,10 还是 16(LFB 或 SQ)?
2)根据某些来源,每个 L1D 未命中都记录在 SQ 中,然后 SQ 分配行填充缓冲区,而在其他某些来源中,他们写道 SQ 和 LFB 可以独立工作。你能简单解释一下 SQ 的工作吗?
这是 SQ 和 LFB 的示例图(不适用于 Haswell)。
引用:
https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf
http://www.realworldtech.com/haswell-cpu/
最佳答案
对于 (1) 逻辑上,最大并行度将受限于管道的最不并行部分,即 10 个 LFB,当预取被禁用或无法提供帮助时,这可能严格适用于按需加载并行度。在实践中,一旦你的负载至少部分地通过预取来帮助,一切都会变得更加复杂,因为这样可以使用 L2 和 RAM 之间更宽的队列,这可以使观察到的并行度大于 10。最实用的方法可能是直接测量:给定测量到 RAM 的延迟和观察到的吞吐量,您可以计算任何特定负载的有效并行度。
对于(2),我的理解是相反的:L1 中的所有需求未命中首先分配到 LFB(当然,除非它们命中现有的 LFB)并且稍后可能涉及“ super 队列”(或任何称为这些的天),如果它们在缓存层次结构中也错过了更高的位置。您包含的图表似乎证实了这一点:来自 L1 的唯一路径是通过 LFB 队列。
关于caching - super 队列和行填充缓冲区的语义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45783251/