繁体   English   中英

管道补充循环用于指令

[英]Pipeline refill cycles for instructions in arm

以下是带有3级流水线的arm Cortex M4处理器的说明。我们如何知道这些指令的流水线补充周期数?

     Assembler                   Cycles
 1.  MOV PC, Rm                  1 + P
 2.  ADD PC, PC, Rm              1 + P
 3.  B <label>                   1 + P
 4.  BL <label>                  1 + P

根据数据表P是管道补充所需的循环次数。 其范围从1到3,具体取决于目标指令的对齐和宽度,以及处理器是否能够尽早推测地址。

问题的答案就在那里:1至3个周期取决于事物 即使在像Cortex-M4这样相对简单的东西上,也有足够的因素指出一些硬性规则并不一定可能(或有用)。 但是,这并不是说我们不能根据可用的信息做一些推理:

取决于目标指令的对齐和宽度

指令提取是32位宽 ,因此可以相当安全地假设3周期最坏情况涉及半字对齐的32位目标指令,在整个指令被解码之前需要2次指令提取。 因此,有可能在一个较少的周期内达到一个16位目标指令或一个字对齐的32位指令,由一次取指令覆盖。

以及处理器是否设法尽早推测地址

鉴于上述情况,似乎合理的是,成功的分支预取与不成功的预取之间的差异占最佳情况和最差情况之间的2个周期中的另一个。 关于分支预测器似乎没有太多可用信息,但我认为它是流水线解码阶段的简单静态预测器,在这种情况下,寄存器分支(包括PC写入)和条件可能就是这种情况。不预测前向分支,并且预测无条件立即分支和条件后向分支。

现在,这只是受过教育的猜测 - 我不知道ARM微体系结构的秘密,所以可能会有比我想象的更微妙的细节,但它已经足够复杂了。 我怀疑是否有人愿意选择反汇编代码,对所有可能的分支/目标组合进行交叉引用,只需在这里和那里考虑2个周期 - 如果你真的需要知道一段代码执行了多少个周期,那么最好的办法就是执行它并计算周期

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM