英特尔所说的“退役”是什么意思?

41
英特尔手册中,提到了很多性能事件,其中包括“已退役的错误预测分支指令”。在这个上下文中,retired确切意味着什么?
需要注意的是,我已经查看了英特尔的性能分析指南,它指出“retired”有一个非常精确的含义(第8页),并参考第7页的图表,但我认为我缺乏理解退役 / 写回涉及的背景知识。这个过程到底是什么,它有什么涉及?

"Mispredicted taken branch instructions retired." 的意思是有一些分支指令,每个分支指令都被转换为微操作并分派到相应的执行单元;其中一些被预测为“taken”,一些被预测为“not taken”,但预测是错误的(misprediction)。该分支被认为是“taken”(预测为“not-taken”,惩罚约为15-17个周期),并且它是真实的分支(不是推测),因为它到达并离开退役单元。即使在现实生活中分支指令是“not taken”,它仍然使用执行单元,并将被退役(嗯)。 - osgx
1
@osgx的性能指南暗示,由于退役仅适用于正确的指令,因此错误预测的分支指令不会被退役?我真的很困惑... - user997112
1个回答

50
在上下文中,“已退役”表示:指令(microoperation,μop)离开了“退役单元”。这意味着,在无序CPU流水线中,指令最终被执行,并且其结果在体系结构状态中正确可见,就像它们按顺序执行一样。从性能的角度来看,这是您应该检查的数字,以计算实际执行了多少条指令(具有有用的输出)。如果您的上下文是节能,您可以检查有多少指令在OOO管道中开始执行(“ISSUED”计数器或“EXECUTED”计数器),并将该数字与已退役操作的计数进行比较;高差异表明CPU做了很多无用功,使用了过多的动力。
退役单元的简短描述在这里:http://users.utcluj.ro/~baruch/book_ssce/SSCE-Intel-Pipeline.pdf 5.4.7.4. 退役单元
退役单元将预测执行的微操作结果写入用户可见寄存器,并从重排序缓冲区中删除这些微操作。与保留站一样,退役单元不断检查重排序缓冲区中的微操作状态,寻找已经执行并且不再具有指令池中其他微操作依赖关系的微操作。然后按照原始程序顺序退役完成的微操作。
退役单元每个时钟周期可以退役三个微操作(/<--此信息可能已过时/)。在退役微操作时,它将结果写入处理器的寄存器文件和/或内存。结果写入后,该微操作将从重排序缓冲区中删除。
更详细的单元信息请参考Agner Fog的《为您的CPU优化》http://www.agner.org/optimize/microarchitecture.pdf第“退役”章节。

1
嗨,这仍然没有回答问题。退役单元只会从正确的分支中“撤销”指令。因此如果是错误的分支,它们怎么能被撤销? - user997112
4
@user997112,误判的分支本身并不是错误的,只有在它之后的指令才是错误的。当分支将CPU重新设置到正确的轨道上后,该分支仍必须退役。 - Leeor
https://www.intel.com/content/www/us/en/develop/documentation/vtune-help/top/analyze-performance/custom-analysis/custom-analysis-options/hardware-event-list/instructions-retired-event.html - Gordon

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