• 易儿易
    2019-06-10
    一个 CPU 的时钟周期,可以认为是完成一条简单指令的时间。
    两个错误:
    1简单:不是简单是复杂(耗时最长)
    2指令:不是指令时间,而是指令拆分后线级执行时间
    简单线级需要等待以补齐时间然后与上下流水线一起牵手步入下一线级
    线级分的多的话,这个时钟周期应该就可以固定是IF取指令的时间了
    如果把IF取指令看做是最简单的指令的话,这句话就没毛病了
    但一般说指令应该是指令集的一个命令吧?
    但是指令集是提供给开发者视角的,在CPU内部IF取指令才是一个原子化操作,从CPU视角来看又觉得这句话是靠谱的……
    展开

    作者回复: 易儿易同学,

    你说得很好啊!👍

    
     11
  • cc
    2019-06-10
    随着流水线设计的引入,一个指令被拆分为14个子流程。一个CPU的时钟时间,应该是14个子流程中最长的那条的耗时时间

    作者回复: 回答正确!👍

    
     7
  • DreamItPossible
    2019-08-21
    如果从单条指令的执行来看,这句话显然是错的,因为即使最简单的无条件跳转指令都至少需要3个时钟周期;
    在了解CPU的流水线设计之后,这句话从吞吐率的角度来讲,是正确的:以5级流水线为例,当过了5个时钟周期后,可以保证每个时钟周期都有一条指令执行完成,即实现了一个CPU的时钟周期;由于取指阶段肯定是所有5个阶段里耗时最长的,即一个CPU的时钟周期可以设置为取指阶段的花费时间;

    注意,这里的5个时钟周期后,才有这种现象,意味着即使引入了流水线操作,这5个时钟周期的开销也是不可避免的,突然想到了之前讲到的Amdahl定律

    作者回复: 👍能够前后联系起来,很好啊

     1
     5
  •        鸟人
    2019-06-11
    这个不知道跟多线程 多进程是否有关系?

    作者回复: 这个和多线程多进程没有太大关系,那个更多是操作系统调度的问题,这个是CPU在硬件层面的实现。

    
     4
  • 随心而至
    2019-10-15
    1.高度的专业化分工,可以极大的提高生产效率。
    《国富论》中亚当斯密提到一个扣针工场的例子:一个工人无论如何努力,一天也生产不了20枚扣针,但有了分工之后,经过前后十几道工序,每人每天平均可以生产48000枚扣针。
    这可以从经济学上,解释为什么会有流水线
    2.边际效益递减
    新增一个单位的商品或服务,它对商品或服务的收益增加的效用,经济学通常认为,随着商品或服务的量增加,边际效用将会逐步减少。
    这可以从经济学上,解释为什么流水线级数不可以无限增加,而有个界限。
    展开
    
     2
  • 瀚海星尘
    2019-07-24
    各种工程都充满了权衡~
    
     2
  • 斐波那契
    2019-06-11
    这句话不正确
    哪怕再简单的指令都要经过划分好的阶段。首先我们要明确那几个周期的概念 所谓时钟周期(或叫做震荡周期)是指cpu一次晶体震动的时间 是计算机最小的时间单位 就拿我们补码来说 取反加1 这实际上就至少需要2个脉冲也就是两个时钟周期了 对于一条指令来说我们把执行过程划分成好几个阶段(具体几个由厂商工艺设计决定) 每个阶段的时间就是一个机器周期 所以一般情况下执行一条指令的时间是由多个机器周期决定的而一个机器周期又由多个时钟周期决定的 这样一条流水线就是由最多时钟周期的机器周期时间决定的 显然一个时钟周期执行不完一条指令

    作者回复: Single-Cycle Processor就可以在一个时钟周期完成一条指令呀。虽然Single-Cycle Processor已经并不在现代CPU设计中使用了,但是并不代表这个是不可行的啊。

    
     2
  • 喜欢吃鱼
    2019-06-10
    每个流水线级的执行时间应该不一定相同吧,所以一个CPU执行周期是不是执行时间最久的流水线级所需要的时间?

    作者回复: 喜欢吃鱼同学,你好

    准确地说,每一个流水线级的时间都是一个时钟周期,但是其中实际操作的时间,可能短于一个时钟周期。比如我们译码器其实就是一个组合逻辑电路,门延迟很低,就不需要一个完整的时钟周期就能完成自己的任务。那么在这个之后,它其实是在“等待”。

    
     2
  • Only now
    2019-06-10
    一个 CPU 的时钟周期,可以认为是完成一条简单指令的时间。 这个应该是依据于吞吐量来理解的吧。
    实际指令不能在一个时钟周期完成, 但是流水线的引入使吞吐量更高。

    作者回复: 没错,这是一个很好的角度,从吞吐率的角度来讲,如果没有superscalar这样的指令集并行,那么流水线没有遇到任何冒险问题的情况下。按吞吐率算下来相当于一个时钟周期完成了一条指令。

    
     2
  • -W.LI-
    2019-06-22
    老师好!我又两个问题。
    指令分级以后同样会存在一个问题啊,每一级执行时间不一样。这样一个指令周期需要时最长的那个级的时间么?还有就是每条指令的级数一样么?如果一个时钟周期就是一级的时间,那么执行时间长的指令的级数就多了吧。再就是指令分级这个需要考虑原子性这种么?还是随便分分?
    
     1
  • softpower2018
    2019-06-11
    引入了流水线技术,一个时钟周期执行一条简单指令应该完全没问题吧!期待多指令并行执行带来的问题及其解决!

    作者回复: softpower2018同学,你好,

    其实现代流水线下的CPU,一个时钟周期已经不能执行完一条指令了。因为一般来说,取指令就要一个时钟钟周期……

    
     1
  • 南山
    2019-06-10
    无条件跳转这样的简单指令三个流水级应该可以在一个时钟周期完成,换句话说就是一个指令在一个时钟周期完成。但是稍微复杂的指令往往是超过一个时钟周期的。
        这里有一点疑惑:在流水线设计的CPU中,一个时钟周期只会执行一个流水级吗?对于很简单的流水级,可能执行时间只占时钟周期的一半,那另一半就是什么也不干吗?

    作者回复: 一个流水线级就需要一个时钟周期,所以即使是无条件跳转这样的简单指令,也需要三个时钟周期。

    是的,可能特定的流水线级的操作需要的时间很少,那么其他时间本质上是在“等待”。

    
     1
  • Hash
    2019-12-16
    CPU就像生产线一样,不同分工的组件不断处理上游传递下来的内容,而不需要等待单件商品生产完成之后,再启动下一件商品的生产过程。
    
    
  • Ronnyz
    2019-12-13
    一个CPU时钟周期在指令流水中取决于指令拆分后最长的子阶段时间长度
    
    
  • 拯救地球好累
    2019-10-27

    ---总结---
    由于需要保证同一时刻同一硬件设备仅被一个指令所使用,我们要保证一个指令周期能完成一个最复杂的指令,导致平均执行时间下降。
    而通过引入流水线,我们从吞吐率这个性能指标上做提升,保证CPU中各硬件部分的充分利用。
    作为性能调优的思路,首先我们需要确定是否有部分模块做了无用功,此外,再看是否每时每刻已经充分利用了资源。
    ---问题---
    老师您好,请问下流水线寄存器是会用来存放所有中间结果的吗?比如说取指这个阶段,指令除了会被放到指令寄存器,还会被放到流水线寄存器?
    展开
     1
    
  • westfall
    2019-10-20
    之前不是说时钟周期是CPU频率的倒数吗?那时钟周期应该是固定的呀!
    
    
  • w 🍍
    2019-10-10
    内存访问这一步是在做什么呢, alu计算后就可以直接回写到寄存器吧....
    
    
  • DriveMan_邱佳源
    2019-10-08
    虽说流水线有提升cpu吞吐率,但是把流水线分成了n级,那么肯定有一级是读取内存的,这步是最耗时,整个流水线会因为这一步而拖迟了时间,也会因为这一步而致使一部分级别处于等待状态,所以重点是如何解决最原始最拖迟的读内存操作。
    
    
  • 活的潇洒
    2019-09-01
    老师的比喻使我们理解起来非常容易、给老师点赞
    day20 笔记:https://www.cnblogs.com/luoahong/p/11434290.html

    作者回复: 谢谢支持👍

    
    
  • 栋能
    2019-07-03
    有个问题:“五级的流水线,就表示我们在同一个时钟周期里面,同时运行五条指的不同阶段。这个时候,虽然执行一条指令的时钟周期变成了 5,但是我们可以把 CPU 的主频提得更高了”。这句话理解起来好有问题。一条指令分为五级流水操作,都在同一个时钟周期,为什么会在同一个时钟周期?而后面是种周期变为5。这两个时钟周期是指同一个东西?
     1
    
我们在线,来聊聊吧