在arm网站上,提供了 Cortex-a9处理器的指令时序。 Instruction Link
对于每条指令(具体来说,我说的是 NEON向量指令),时间是 在下面显示的格式表中给出(使用VADD指令作为示例):
NAME FORMAT Cycle Source Result Writeback
VADD Dd,Dn,Dm 1 -,2,2 3 6
我有点理解桌子试图说的话。例如,值为3的结果表示 该指令的结果将在第3周期可用,然后是其他指令 在这条指令的结果上可以顺利地使用结果而不会失速。
但我的问题是:
这个循环次数何时开始计算?是否在指令后计算 发出?
另外,据我所知,问题是将指令发送到处理器后执行的步骤 获取和解码指令,然后解码和获取周期为什么不显示 那桌子呢?这是非常重要的信息,因为我需要知道获取和解码周期 能够知道我必须等待多少个周期才能顺利执行依赖的指令 前一条指令的结果。
明确而准确的回复或查找的地方将受到高度赞赏!
答案 0 :(得分:1)
在像A9这样的复杂流水线处理器上使用时序表是一项非常困难和忘恩负义的任务。更好地使用模拟,因为这些表提供了该指令将花费多长时间的绝对理论最小值,它与现实的相关性稍低。因为您需要考虑缓存中的内容以及其他类似的外部因素。
无论如何,这是我对这张表的理解。由于Cortex A9支持乱序执行,因此获取和解码周期无关紧要。这就是他们从发布时间算起的原因。您可以自己添加提取和解码周期,但是您必须考虑先前指令的效果以及内存屏障等因素来准确计算它们。
上表显示此指令的最短发布时间为1个周期。因此,源值必须在下一个周期(周期2)中可用,以避免失速。在源结果出现之后,该指令仅运行一个周期,因此如果CPU内存在转发路径,则下一条指令可能会使用结果。然而,需要另外3个周期(直到第6周期)才能将结果提交到寄存器文件,在该文件中保证任何指令都可以访问结果。
底线是这条指令在理想情况下可能需要1到6个周期才能执行。没有缓存等待,没有内存障碍等。