关于手臂指示时间

Da Teng

在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

手臂; 或开关;asm;

来自分类Dev

重用手臂共享库

来自分类Dev

手臂调试切刀

来自分类Dev

交叉为手臂发行libnftnl

来自分类Dev

手臂装配中的管线处理

来自分类Dev

手臂装配中的异常处理

来自分类Dev

Apache Cross进行手臂编译

来自分类Dev

使用crystax NDK交叉编译手臂

来自分类Dev

如何隔离手臂设备上的故障?

来自分类Dev

手臂“版本”之间的差异?(仅限ARMv7)

来自分类Dev

手臂交叉编译无法识别--sysroot选项。(Eclipse)

来自分类Dev

g ++双精度手臂vs英特尔

来自分类Dev

手臂; 内联汇编 使用暂存器;

来自分类Dev

手臂处理器中的外部中止

来自分类Dev

手臂架构领域意味着什么

来自分类Dev

手臂皮质a / r / m编号约定的说明

来自分类Dev

手臂组件-多个推/弹出命令和SP

来自分类Dev

如何在手臂编码即时价值?

来自分类Dev

Ada +固定琴弦+ Stm32手臂

来自分类Dev

霓虹灯和手臂装配优化

来自分类Dev

手臂处理器中的外部中止

来自分类Dev

手臂; VFP;浮点扩展;未定义的指令;

来自分类Dev

手臂; 内联汇编 使用暂存器;

来自分类Dev

有效结合手臂霓虹中的面具

来自分类Dev

手臂组装中的负寄存器?

来自分类Dev

ubuntu 20.04 手臂没有声音

来自分类Dev

手臂交叉编译时如何处理Boost等库?

来自分类Dev

手臂组装说明中添加了.w和.n后缀是什么?

来自分类Dev

手臂霓虹灯转置4x4 uint32