关于arm指令时序
Posted
技术标签:
【中文标题】关于arm指令时序【英文标题】:Regarding arm instruction timing 【发布时间】:2014-06-07 03:49:32 【问题描述】:在 arm 网站上,提供了 Cortex-a9 处理器 的指令时序。 Instruction Link
对于每条指令(具体来说,我说的是NEON向量指令),时序是 以表格形式给出(以 VADD 指令为例):
NAME FORMAT Cycle Source Result Writeback
VADD Dd,Dn,Dm 1 -,2,2 3 6
我有点理解这张桌子想要表达的意思。例如,值为 3 的 Result 表示 该指令的结果将在第 3 周期可用,然后其他指令取决于 对这条指令的结果可以顺利使用结果而不会停顿。
但我的问题是:
这个周期数什么时候开始计算?指令后是否计算在内 发行?
另外,据我所知,问题是指令发送到处理器执行之后的步骤 指令被提取和解码,那么为什么解码和提取周期不显示在 表呢?这是非常重要的信息,因为我需要知道获取和解码周期 能够知道我必须等待多少个周期才能顺利执行一条指令,这取决于 上一条指令的结果。
非常感谢您提供清晰准确的回复或查找它的地方!
【问题讨论】:
非常感谢ooga,修改了我的帖子错误! 【参考方案1】:在复杂的流水线处理器(如 A9)上使用时序表确实是一项艰巨且忘恩负义的任务。最好使用模拟,因为这些表提供了该指令需要多长时间的绝对理论最小值,它与现实的相关性较低。因为您需要考虑缓存中的内容和其他类似的外部因素。
不管怎样,这是我对这张表的理解。由于 Cortex A9 支持乱序执行,因此获取和解码周期无关紧要。这就是为什么他们从发布时间开始计算的原因。您可以自己添加 fetch 和 decode 周期,但您必须考虑先前指令的影响以及内存屏障等因素才能准确计算它们。
上表显示该指令的最短发出时间为 1 个周期。因此,源值必须在下一个周期(周期 2)中可用,以避免停顿。在源结果出现后,该指令只需要一个周期即可运行,因此如果 CPU 内存在转发路径,则下一条指令可能会使用结果。然而,将结果提交到寄存器文件需要另外 3 个周期(直到第 6 个周期),从而保证任何指令都可以访问结果。
最重要的是,在理想情况下,这条指令可能需要 1 到 6 个周期才能执行。没有缓存等待,没有内存屏障等。
【讨论】:
以上是关于关于arm指令时序的主要内容,如果未能解决你的问题,请参考以下文章
7816协议时序和采用UART模拟7816时序与智能卡APDU指令协议
Linux C/C++并发编程实战2万字解读C/C++ 6种内存时序memory_order(内存屏障)指令重排原子操作