给定流水线CPU,在管道中执行指令时,CPU何时以及如何通过中断或异常来中断?
在什么阶段处理中断/异常,以及当前管道和/或发生中断/故障的指令会发生什么?
答案 0 :(得分:1)
这个处理器的设计非常具体,我不仅仅意味着arm会这样做,而x86就是这样做的,它可以在那个级别上,但随着每个新核心的出现,设计师可能会改变它们的工作方式。 / p>
一般程序员的假设是它完成当前的指令"然后中断,但是如果你看一下ARM ldm / stm,至少有一些人说即使他们已经启动就会中止,所以不要对那些响应读写的逻辑使用那些指令(例如从不自动增量),x86对于很多人而言多年以来一直说过,一旦分支预测被添加,就永远不会这样做,因为分支预测器可以实际上读取任何东西以防万一,所以除了返回一个值之外别反应。
使用烟斗你的问题与我分支/跳跃时的情况没什么不同。好吧也许它根据指令类型而不同,或者它可能是通用的,但显然管道被中断,管道中排队的东西被丢弃,中断例程被提取/调用并且编码执行,返回导致处理器返回到最后一个完全执行后的指令。它基本上没有分支,你必须完成一个指令,停止并刷新管道开始执行其他地方,ret就像你停止的分支并冲洗管道并在其他地方重新开始。更接近呼叫/分支链接而不是简单的分支,但你得到了我希望的想法。
这里没有魔法,没什么特别的,只要考虑函数调用。
至于管道的确切位置,有数百到数千种不同的流水线处理器设计,并且没有理由期望它们中的任何两个是相同的,所以如果这是问题那么它太宽泛了,没有一个答案。