gpt4 book ai didi

assembly - ARM 指令的管道再填充周期

转载 作者:行者123 更新时间:2023-12-02 21:38:26 27 4
gpt4 key购买 nike

以下是具有三级流水线的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 这样相对简单的东西上,也有足够的因素使得指定一些硬性规则不一定是可能的(或有用的)。然而,这并不是说我们不能根据现有信息进行一些推理:

depending on the alignment and width of the target instruction

Instruction fetches are 32 bits wide ,因此可以相当安全地假设 3 周期最坏情况涉及半字对齐的 32 位目标指令,需要 2 次指令读取才能解码整个指令。那么,很可能在少一个周期内就能到达由单个指令读取覆盖的 16 位目标指令或字对齐的 32 位目标指令。

and whether the processor manages to speculate the address early

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

现在,这只是有根据的猜测 - 我不知道 ARM 微架构的 secret ,因此可能比我想象的更微妙,但它已经足够复杂了。我怀疑有人会愿意挑选反汇编代码,交叉引用所有可能的分支/目标组合,只是为了在这里和那里考虑 2 个周期 - 如果你真的需要知道一段代码执行了多少个周期,那么最好的办法就是 execute it and count the cycles .

关于assembly - ARM 指令的管道再填充周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28760617/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com