2012-01-02 63 views
2

我想了解管道中危险的基本概念。我知道管道是如何实施的,但我不确定管道风险如何影响管道效率。管道常见的管道危害是什么?

我已经在线阅读过它,但由于解释它们时使用的语言复杂性,我无法真正理解它。任何人都可以用简单的术语解释它们吗?

例如:分支行为的影响? (找不到一个简单的解释与图解,说明如何危险工作)

+0

你为什么在意?您是否尝试优化ARM asm代码?或者编写一个编译器后端,也许?如果你解释了你的动机,它可能会帮助你得到更具体的答案。 – 2012-01-02 11:53:26

+0

试图了解流水线的基本概念。 - 我编辑了我的问题,使其更清晰。 – NLed 2012-01-02 11:57:42

+4

关于危害的[维基百科文章](http://en.wikipedia.org/wiki/Hazard_(computer_architecture))是相当不错的。 – 2012-01-02 12:03:35

回答

2

我不认为有太多的事情。想想流水线是什么或意味着什么,或者它如何让事情变得更快更好。它就像制造工厂的装配线一样。而不是让整个汽车建造一个地方,而且必须将工具和材料移动到汽车上,并将其他工具移开,以将汽车移动到工厂中。一步一步地完成了每一步。

分支问题很简单。假设管道中有12条指令,有些分支不会被确定,直到管道末端或接近管道末端。如果分支被采纳,那么你有一堆你不能执行的管道中的指令,你必须丢弃它们。您重新启动具有分支目标的管道,并且必须等待多个指令周期才能使管道恢复完全运行。

并且已经有很多方法来解决这个问题,有些方法有分支阴影,无论如何都在分支之后执行指令。其他的是分支预测,猜测分支目标可能是什么,并独立地从这些替代路径获取一些指令,如延迟槽,可能会节省几个周期,但是如果/随着你的管线从一代到另一代延长没有指令集更改匹配),您仍然必须基本上冲洗管道。

I/O是我们现在最大的问题,现在不是CPU,管道被发明是为了解决CPU问题时的瓶颈。例如分支预测,导致随机查找提取周期,使得I/O问题变得更糟,而不是更好...

Simon提供的维基百科链接还提到了其他危害,如在写入前阅读。如果源代码说要写一个位置,那么在写入之后将其读回来,这就是代码需要发生的事情。如果硬件的编译器和体系结构等导致它不按写入的方式发生,则软件可能会崩溃/失败。问题可能来自并行执行,如果读取和写入被分成不同的执行单元,并且读取执行单元的内容较少,或者在执行单元写入之前执行该读取,则会出现问题。这很容易发生在CPU核心之外,但也在内存或缓存系统中。读取和写入可以在内存控制器内的单独路径上,一个导致高速缓存行读取,另一个在写入缓冲区中找到行的末尾,并且读取可以首先发生。写作通常是火和遗忘,这里是地址,这里是数据,信使接受信息,你就完成了。就像在FedEx上放下一个包裹一样,这里是包含地址的箱子,我的部分已经完成,但箱子真的没有交付好几天。一个读取,你必须等待结果回来,这可能是很好的,执行单元在cpu或内存控制器中的时间要长得多。这一切都必须在系统级进行管理,你可以在并行cpu上解决read之前的写入问题,只让你的内存系统不能像你期望的那样工作,只是因为写入指令在读你认为你赢得了这场战斗。这就是为什么像延期槽这样的解决方案通常最终会被缺陷所填补。 (系统工程涉及编程语言,人类编写代码时需要包括人类及其做事方式)。

这些危险,尤指由维基百科的链接

http://en.wikipedia.org/wiki/Hazard_(computer_architecture)

描述的情况下,流水线,用于提高吞吐量,未能提供正确的产品的输出。

假设你的管道是汽车,沿着装配线的每一步都会把一件东西放在汽车上,比如挡风玻璃或车轮或发动机与底盘配合等。我们现在有几十年的“及时”供应并在此流水线上。但在某些国家有一场自然灾害影响了向世界供应蓝色油漆,并且生产用于生产汽车的装配线的门的装配线已经用完了蓝色的门。你对行中的蓝色汽车做什么?与在读取周期中获取数据中止无异,您必须停止管道,调用中止处理程序并能够从受影响的指令或随后的指令开始执行。

无论你怎么想,这真的发生,导致管道设计不起作用,是一个管道的危险。是的,我同意内存系统导致系统级故障的不是管道故障,也不是管道危险。与将指令放在错误的位置/顺序中的编译器错误相同,也不是管道故障。系统故障,而不是管道故障。

+1

罚款只要“共同”一词去分支也许是唯一一个与管道的CPU通用的。然后,无论您想调用它,进入设计特定问题,多个执行单元还是并行执行,都会导致无序执行以及您在单个CPU上的单个管道上看不到的其他内容(常见情况)。导致新危害的解决方案也可能是特定于该设计的,并且不适用于所有设计。 – 2012-01-02 18:03:06

+0

我在这里收到的最佳答案之一。非常感谢这个非常丰富的答案!!!!! – NLed 2012-01-02 20:22:44

+0

我本来可以写得更好,但是要感谢赞美,无论哪种方式......将它传递给自己......自己回答问题并保持堆栈溢出。 – 2012-01-02 21:42:49