2 回答
TA贡献2065条经验 获得超13个赞
这是原始答案的后续内容,根据Andreas Abel提供的测试结果分析其他五种架构的行为:
Nehalem处理器
珊迪大桥
常春藤桥
Broadwell微架构
咖啡湖
除了Skylake和Haswell之外,我们还快速了解这些架构的结果。它只需要一个“快速”的外观,因为除了Nehalem之外的所有架构都遵循上面讨论的现有模式之一。
首先,短nop情况下运行传统解码器(对于不适合LSD的循环)和LSD。以下是针对所有7种体系结构的此方案的周期/迭代。
图2.1:所有架构密集的nop性能:
这个图表非常繁忙(点击查看大图)并且有点难以阅读,因为许多架构的结果彼此重叠,但我试图确保专用阅读器可以跟踪任何架构的线路。
首先,我们来讨论一下这个大异常值:Nehalem。所有其他架构的斜率大致遵循4 uops / cycle周期线,但Nehalem每个周期几乎正好是3 uop,因此很快落后于所有其他架构。在最初的LSD区域之外,该线路也是完全平滑的,没有在其他架构中看到的“阶梯”外观。
这与Nehalem的uop 退休限制为3 uops / cycle 完全一致。这是LSD之外的uops的瓶颈:它们每个周期都执行大约3个uop,退休时瓶颈。前端不是瓶颈,所以准确的uop计数和解码安排都无关紧要,因此没有台阶。
除了Nehalem之外,其他架构,除了Broadwell之外,还可以分成几组:Haswell-like或Skylake-like。也就是说,所有Sandy Bridge,Ivy Bridge和Haswell都表现得像Haswell,因为大于15 uops的循环(在另一个答案中讨论了Haswell行为)。尽管它们是不同的微架构,但由于它们的传统解码能力相同,因此它们的行为基本相同。低于约15 uops,我们看到Haswell对于任何uop计数而言都要快一些,而不是4的倍数。由于更大的LSD或者还有其他“小循环”优化,它可能会在LSD中额外展开。对于Sandy Bridge和Ivy Bridge,这意味着小循环应该绝对定位一个uop计数,它是4的倍数。
Coffee Lake的行为与Skylake 1相似。这是有道理的,因为微架构是相同的。Coffee Lake看起来比Skylake低约16 uops,但这只是Coffee Lake默认的残疾LSD的影响。Skylake已经通过启用的LSD进行了测试,之后由于安全问题,英特尔通过微码更新禁用了它。咖啡湖在这个问题出现之后就被释放了,所以LSD是开箱即用的。因此,对于此测试,Coffee Lake正在使用DSB(对于低于约18 uop的循环,仍然可以适合DSB)或传统解码器(对于其余循环),这样可以获得更好的小uop计数结果LSD强加开销的循环(有趣的是,对于较大的循环,LSD和传统解码器碰巧强加完全相同的开销,原因各不相同)。
最后,我们来看看2字节的NOP,它们不够密集以防止使用DSB(因此这种情况更能反映典型代码)。
图2.1:2字节nop性能:
同样,结果与前面的图表一致。Nehalem仍然是每个周期3个uop的瓶颈。对于高达约60个uops的范围,除了Coffee Lake之外的所有架构都使用LSD,我们看到Sandy Bridge和Ivy Bridge在这里表现稍差,四舍五入到下一个周期,因此只实现了4的最大吞吐量uops /循环如果循环中的uops数是4的倍数。在32 uops以上,Haswell和新uarchs的“展开”功能没有任何影响,所以一切都大致相关。
Sandy Bridge实际上有一些uop范围(例如,从36到44 uops),它比新架构表现更好。这似乎是因为并非LSD检测到所有循环,并且在这些范围内,循环由DSB提供。由于DSB通常更快,因此在这些情况下Sandy Bridge也是如此。
英特尔说的是什么
实际上,您可以在英特尔优化手册第3.4.2.5节中找到专门处理此主题的部分,正如Andreas Abel在评论中所指出的那样。在那里,英特尔说:
LSD拥有构建小“无限”循环的微操作。来自LSD的微操作分配在无序引擎中。LSD中的循环以采用分支结束到循环的开头。循环结束时采用的分支始终是循环中分配的最后一个微操作。循环开始处的指令始终在下一个循环中分配。如果代码性能受前端带宽限制,则未使用的分配时隙会导致分配气泡,并可能导致性能下降。英特尔微体系结构代码名称Sandy Bridge中的分配带宽是每个周期四个微操作。当LSD中的微操作数导致未使用的分配插槽数量最少时,性能最佳。您可以使用循环展开来控制LSD中的微操作数。
他们继续展示一个例子,由于LSD“四舍五入”,将循环展开一个因子2无助于性能,但是通过三个作品展开。这个例子很混乱,因为它实际上混合了两个效果,因为展开更多也减少了循环开销,因此减少了每次迭代的uop数。一个更有趣的例子就是将循环展开次数减少导致由于LSD舍入效应导致性能提高。
本节似乎准确描述了Sandy Bridge和Ivy Bridge的行为。上面的结果表明,这两种体系结构都如上所述,并且对于分别具有4N + 3,4N + 2或4N + 1 uops的循环,您将丢失1,2或3个uop执行槽。
但是,Haswell及其后来的新性能尚未更新。如在另一个答案中所描述的,性能已经从上述简单模型改进并且行为更复杂。
1在16 uops有一个奇怪的异常值,其中Coffee Lake表现比其他所有架构都差,甚至Nehalem(回归率约为50%),但也许这个测量噪音?
- 2 回答
- 0 关注
- 879 浏览
添加回答
举报