【问题标题】:How does a pipelined processor guarantee atomicity?流水线处理器如何保证原子性?
【发布时间】:2012-05-07 14:09:35
【问题描述】:

当处理器执行一条指令时,可以假设这是一个原子操作。但是当处理器使用流水线时,它是如何工作的呢?该指令在多个步骤中执行,与许多其他指令并行,都在不同的步骤中。但是,如果其他指令之一干扰了我们的指令怎么办?处理器如何“回滚”指令的效果,或完全避免干扰?

【问题讨论】:

    标签: compiler-construction atomic processor


    【解决方案1】:

    我敢肯定,各种处理器采用了许多策略。我曾经有一个项目,我将流水线添加到模拟处理器中。我采用的技术是

    1. 冒泡。对于某些可能会干扰后续指令的操作,我知道干扰可能会发生多远。例如,如果在下一条指令已经通过流水线的一个阶段之前条件跳转评估尚未完成,我可能会将有效的 NOP 直接放在条件跳转后面的管道中。

    2. 转发。在几种情况下,我能够看到我需要指令中的一个值,该值比当前指令高一两个阶段,但尚未复制到它通常从中访问它的寄存器/门中。在这种情况下,它直接从后期访问它。

    3. 分支预测和校正。预测部分不是关于如何避免碰撞,但重要的是要注意。在条件跳转的情况下,您希望预测会发生什么并尽早将下一条指令加载到管道中。我一直假设条件会评估为不进行跳转,因为这样我可以立即将下一条指令加载到管道中而无需先评估跳转地址,从而避免需要冒泡。

    当预言成真时,是的,我很高兴。如果预测没有实现,那么我需要否定我们乐观地早早启动的下一条指令的影响。我通过将信号切换到前几个流水线阶段中的与非门来实现这一点,以有效地 NOP 出当前正在那里执行的指令。

    这是我唯一的个人经历所记得的。我查看了指令管道的维基百科页面,看到了一些相同的想法,我敢肯定会有更好的解释:) http://en.wikipedia.org/wiki/Instruction_pipeline

    【讨论】:

    • 所以基本上没有单一的策略,而是处理器设计人员可以选择的大量不同技术。感谢您提供现实生活中的示例。
    【解决方案2】:

    这是由处理器的设计者定义的,并且对于每个特定的处理器来说可能是不同的。例如,如果我们采用典型的 Intel/AMD x86/x64 处理器系列,单指令并不总是原子的

    您必须始终说出您所谈论的处理器类型。如果它是与 x86/x64 不同的平台,您可能会在Electronics forum 获得更好的答案,而不是在这里。

    【讨论】:

    • 可能是相对于相关核心或整个处理器的原子之间的差异。然后是缓存和内存子系统......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2014-08-04
    • 2013-07-10
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多