在arm网站上,提供了针对Cortex-a9处理器的指令时序。指令链接
对于每条指令(具体来说,我正在谈论NEON向量指令),其时序在下表所示的表格中给出(以VADD指令为例):
NAME FORMAT Cycle Source Result Writeback
VADD Dd,Dn,Dm 1 -,2,2 3 6
我有点理解桌子在说什么。例如,值为3的结果表示该指令的结果将在周期3可用,然后取决于该指令结果的其他指令可以平稳地使用该结果而不会停顿。
但是我的问题是:
这个周期号何时开始计数?发出指示后是否算在内?
而且,据我所知,问题是在将指令提取并解码之后将指令发送到处理器执行的步骤,那么为什么表上没有显示解码和提取周期呢?这是非常重要的信息,因为我需要知道获取和解码周期,才能知道要平滑执行一条指令需要等待多少个周期,这取决于前一条指令的结果。
明确,准确的回复或查找的地方将受到高度赞赏!
在诸如A9之类的复杂流水线处理器上使用时序表确实是一项艰巨而艰辛的任务。最好使用模拟,因为这些表提供了该指令将花费多长时间的绝对理论最小值,因此它与实际的相关性较低。由于您需要考虑缓存中的内容以及类似的其他外部因素。
无论如何,这是我对这张桌子的理解。由于Cortex A9支持乱序执行,因此获取和解码周期无关紧要。这就是为什么他们从发布时间算起。您可以自己添加获取和解码周期,但必须考虑先前指令的影响以及诸如内存屏障之类的内容才能准确地对其进行计数。
上表显示,此指令的最短发布时间为1个周期。因此,源值必须在下一个周期(周期2)中可用,以避免停顿。在显示源结果之后,该指令仅需运行一个周期,因此,如果CPU中存在转发路径,则下一条指令可能会使用结果。但是,将结果提交到寄存器文件需要另外3个周期(直到周期6),在此保证任何指令都可以访问结果。
最重要的是,在理想情况下,该指令可能需要1到6个周期才能执行。没有缓存等待,没有内存障碍,等等。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句