我正在用Winmips64分析一个简单的汇编程序,并且在一瞬间程序有一个分支停止,但我不知道为什么以及它是什么类型的停顿。我一直在互联网上搜索,我找到了与#34;预测摊位相关的东西",但我对此并不了解。
在图片中,您可以看到生成分支停止的那一刻。
提前致谢:)
答案 0 :(得分:4)
当分支被采取时,分支停止是一个失速: - )
此Instruction prefetch的核心原因,其中并行处理流中的多个指令。另请参阅pipeline picture
在最简单的形式中,当流中的指令n正在执行时,下一个(n + 1)已经在解码。因此,机器平均执行一个指令,但实际上指令需要两个时钟(一个时钟解码,一个时钟执行)。这个原则可以分为更多阶段。 (例如效果地址计算,以及与寄存器重命名相关的阶段)Netburst架构(Pentium 4 / D)因拥有非常深的流水线而臭名昭着。 (如果出现错误的预测,那将是可怕的惩罚)
在简单的两阶段情况下,如果你进行分支(转到与下一个不同的指令),目标地址上的指令还没有被解码。因此必须首先对其进行解码,因此该指令的执行需要两个时钟。这个额外的时钟是分支停顿惩罚。
更现代的CPU试图尽早将这些惩罚最小化guestimating possible branch targets 并且已经推测性地预取了他们的指令。为了最大限度地提高分支被正确预取的可能性,他们也calculate the chance that a branch is taken