【发布时间】:2017-12-21 14:53:14
【问题描述】:
假设有两条顺序指令,像这样:
instruction A
instruction B
由于 CPU 流水线,B 将在 A 完成之前启动。
是否存在确保 B 在 A 完成后启动的机制?
更新:
抱歉,我没有准确描述问题。我的意思是,这两条指令具有应用程序级别的排序依赖性,但没有危险。例如,在事务系统中,第一条指令将日志刷新到持久存储,第二条指令通知客户端有关事务提交。所以我们不能执行第二条指令,直到第一个完成。如何提供这个执行顺序?
【问题讨论】:
-
你的意思是管道停顿?这与 C(或汇编)有什么关系?
-
有许多障碍可以在各种指令集架构中实现,这个问题写得不够好,不知道要解决哪个问题。
-
您要解决的实际问题是什么?对于 CPU 设计人员来说,无缘无故地添加指令以减慢速度是非常愚蠢的。各种 CPU 上都有指令,但它们用于解决特定的排序问题(如内存、陷阱等),不过我还没有看到为了它而停止流水线的特定指令。
-
CPU 内置了很多逻辑,以避免在 B 依赖于 A 时启动 B。如果您有特定情况(以某种方式)B 依赖于 A,但 B 在 A 完成之前运行,提供详细信息。
-
我认为这个问题不值得这么多反对。尽管单独的流水线并不意味着“B 在 A 完成之前开始”(因为 CPU 需要多个执行单元才能实现超标量并最终实现 OoO),但序列化指令是编程的一个重要方面。
标签: assembly cpu cpu-architecture pipelining