我们可以同时使用NOPs
,数据转发和停顿周期来解决数据和负载使用方面的危害。但是,如果我们有多个数据危险,那么使用NOPs
解析所有数据危险将变得非常低效,因为它们会增加程序的运行时间。相比之下,如果存在负载使用危险,则可以使用数据转发和停顿周期来解决该危险,这样可以提供更有效的结果。我的问题是,与NOPs
相比,数据转发与停顿周期相结合如何成为处理数据危害的更有效方法?因为当我们添加一个停顿周期时,程序必须等待一个时钟周期才能进行数据转发(MEM
至EX
)。因此,时钟周期计数将增加1。
最佳答案
数据转发克服了一些危险,它认识到由先行指令计算出的必要值比早在寄存器中出现时就更早可用。因此,数据转发始终是克服停顿和NOP的制胜法宝。
当然,有时会出现停转的情况,如您所描述的带有负载使用危险的情况。在小型情况下,停顿与NOP的作用相同,但是:
没有NOP的代码较小。代码大小在指令高速缓存中具有巨大影响-这会影响性能,因此代码大小不可忽略。
同样,从架构寿命的角度来看,虽然我们可能知道某些微体系结构设计所需的NOP数量,但是这很可能会在将来的微体系结构中发生变化,因此插入较旧程序中的NOP不再发挥作用正确地在较新的硬件上。因此,我们得出的结论是,让硬件停止运行比插入NOP更好。
例如,乱序的机器可能会在内部重新排列指令以覆盖MEM-> EX危险(NOP会妨碍您)。