首页 文章

流水线处理器如何保证原子性?

提问于
浏览
0

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

2 回答

  • 3

    我相信,各种处理器采用了许多策略 . 我曾经有一个项目,我在其中添加了流水线技术到模拟处理器 . 我使用的技术是

    • 冒泡 . 对于某些有可能干扰后续指令的操作,我知道干扰可能会发生多远 . 例如,如果条件跳转评估在下一条指令已经通过管道的一个阶段之前没有完成,我可能会将实际上是NOP的内容直接置于条件跳转后面的管道中 .

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

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

    当预测成真时,我很高兴 . 如果预测没有实现,那么我需要否定我们乐观地提前启动的下一条指令的效果 . 我通过将信号切换到前一个流水线级中的nand门来实现这一目的,从而有效地NOP输出当前正在执行的指令 .

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

  • 1

    这由prcessor的设计者定义,并且对于每个特定处理器可以是不同的 . 例如,如果我们采用典型的Intel / AMD x86 / x64处理器系列, single instruction is not always atomic .

    您必须始终说出您正在谈论的处理器类型 . 如果它是一个与x86 / x64不同的平台,你可以在Electronics forum得到更好的答案,而不是在这里 .

相关问题