Answers:
您可能应该查找的关键字是CISC,RISC和超标量体系结构。
在CISC架构(x86、68000,VAX)中,一条指令功能强大,但是处理需要多个周期。在较旧的体系结构中,周期数是固定的,如今,每条指令的周期数通常取决于各种因素(高速缓存命中/未命中,分支预测等)。有表格可以查找这些东西。通常,还可以方便地实际测量某条指令在某些情况下需要花费多少个周期(请参阅性能计数器)。
如果您对Intel的详细信息感兴趣,请阅读《Intel 64和IA-32优化参考手册》。
RISC(ARM,PowerPC,SPARC)体系结构通常意味着一条非常简单的指令仅需要几个(通常只有一个)周期。
但是无论CISC还是RISC,都有超标量体系结构。CPU不会连续处理一条指令,而是同时处理许多指令,这很像一条装配线。
结果是:如果仅查找程序的每个指令的周期,然后将它们全部加起来,那么最终将以数字方式变高。假设您有一个单核RISC CPU。处理一条指令的时间永远不能少于一个周期的时间,但是每个周期的总吞吐量可能是几条指令。
我喜欢用洗衣类比来思考。CPU指令就像洗衣物一样。您需要为每个负载同时使用洗衣机和烘干机。假设每个程序需要30分钟才能运行。那是时钟周期。旧的CPU会先运行洗衣机,然后再运行干衣机,每次需要60分钟(2个周期)来完成每次洗衣。
流水线: 流水线是指您同时使用这两种管道–先洗涤一个负载,然后在干燥时再洗涤下一个负载。第一次加载需要2个周期才能完成,但是第二个加载又需要1个周期。因此,除了第一个负载,大多数负载只需要1个周期。
超标量:将 所有衣物送到洗衣店。获得2个垫圈,并将它们都装入。完成后,找到2个干衣机并同时使用它们。现在,您可以在60分钟内清洗和干燥2个负载。即2个周期内有2个负载。每个负载仍然需要2个周期,但是您现在可以执行更多操作。现在平均时间为每个周期1个负载。
带有流水线的超标量:先 洗涤前2个负载,然后在干燥时,再用后2个负载加载垫圈。现在,前两个负载仍然需要2个周期,然后在另外1个周期后完成接下来的2个负载。因此,大多数情况下,您每个周期要完成2次加载。
多芯:将一半的衣物交给妈妈,妈妈也有2个洗衣机和2个烘干机。你们俩一起工作,可以完成两倍的工作。这类似于超标量,但略有不同。她不必自己将所有衣物移入或移出每台机器,而是可以与您同时进行。
太好了,我们可以在相同的时间内完成比以前多八倍的洗衣,而不必制造更快的机器。(将时钟速度提高一倍:仅需15分钟即可运行的洗衣机。)
现在,让我们谈谈问题出在哪里:
管道气泡: 您的污渍在清洗过程中没有出现,因此您决定再次清洗。现在干衣机正坐在那里,等待着做某事。
高速缓存未命中:运送脏衣服的卡车一直拥堵。现在,您有2个洗衣机和2个干衣机,但由于必须等待,因此您无法完成任何工作。
根据出现问题的频率,每个周期我们将无法总是完成4个负载,因此实际完成的工作量可能会有所不同。
分支预测:好吧,您开始在干净的衣服上洗衣服,以防日后弄脏它们,这样它们就已经很干净了。
周期更多是一个核心概念。每个内核并行执行自己的循环。