超级队列和线填充缓冲区的语义是什么?

6

我关于Haswell微架构(Intel Xeon E5-2640-v3 CPU)有一个问题。从CPU规格和其他资源中,我发现有10个LFB和超级队列的大小为16。我有两个与LFB和SuperQueues相关的问题:

1) 系统能够提供的最大内存级别并行度是多少?10还是16(LFB或SQ)?

2) 根据一些来源,每个L1D缺失都记录在SQ中,然后SQ分配Line fill buffer,而在其他一些来源中,他们写道SQ和LFB可以独立工作。您能否简要解释一下SQ的工作原理?

这里是SQ和LFB的示例图(不适用于Haswell)。 enter image description here 参考资料: 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/


(离题)您正在查看英特尔优化手册的旧版本。官方版本位于https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf。(目前日期为2016年6月,因此比您链接的2015年9月版本更新)。 - Peter Cordes
那个块状图不是Haswell(没有port6或port7)。我认为它是 Nehalem,基于36个条目的RS大小(与Sandybridge中的54个相比),并且它显示对“IA寄存器集”的写回。(Sandybridge系列使用物理寄存器文件)。Haswell的高速缓存层次结构与Nehalem基本相同:仍然有10个LFB用于未完成的L1d请求。我从未读过关于L2和L3之间接口的文章。现在你提到了它,在Intel的优化手册中搜索“超级队列”确实可以找到一些东西。很酷。 - Peter Cordes
此外,那个Haswell PDF只是David Kanter的http://www.realworldtech.com/haswell-cpu/ Haswell深度剖析的复制品。为什么要链接到PDF复制品? - Peter Cordes
1
无论如何,Haswell的10个LFB限制了单个核心的L1d并发,但我猜超级队列允许从L3到L2(和L2驱逐)的预取独立于LFB发生。该图还显示指令高速缓存缺失将通过超级队列服务,但不会使用LFB。 (因为L1I与L1D分离,并且LFB用于D-cache。) - Peter Cordes
@PeterCordes 感谢您的建议。我已经更新了链接。我没有找到其他图表来展示超级队列,只能使用我能找到的示例图表。预取添加了另一层复杂性到这个问题中。据我理解,硬件预取器不使用LFB,而软件预取器则会(我对这个说法不是很确定)。 - A-B
大多数Intel CPU中的预取器都会提前获取到L2缓存,因此它们不使用LFB。我认为,预取到L1D确实会使用LFB。 - Peter Cordes
1个回答

4
对于(1),从逻辑上讲,最大并行度将受到管道中最不并行部分的限制,即10个LFB。当预取被禁用或无法帮助时,这可能是严格的需求加载并行性。实际上,一旦您的负载至少部分由预取帮助,则一切都更加复杂,因为此时可以使用L2和RAM之间更宽的队列,这可能使观察到的并行性大于10。最实用的方法可能是直接测量:给定到RAM的测量延迟和观察到的吞吐量,您可以计算任何特定负载的有效并行度。
对于(2),我的理解是相反的:所有L1中的需求未命中首先分配到LFB(除非当然它们命中现有的LFB),如果它们在高速缓存层次结构中也未命中,则稍后可能涉及“超级队列”(或者现在被称为什么)。您包含的图表似乎证实了这一点:从L1的唯一路径是通过LFB队列。

谢谢您的回复。我也在考虑将LFB分配给L1D缺失。我从英特尔优化手册中复制了一些行。 “L1D缺失会在16个元素的超级队列中创建一个条目,并分配一个线路填充缓冲区。如果在L2高速缓存中找到该行,则将其传输到L1数据缓存中,数据访问指令可以得到服务。从L2 CACHE加载延迟为10个周期,导致大约6个周期的性能惩罚,即有效L2 CACHE和L1D延迟之间的差异。” - A-B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接