最后
笔者已经把面试题和答案整理成了面试专题文档
关于流水线计算,我们先来看一个图。
在上图中,我们可以看出,执行完第一条指令时,需要3ms时间,执行完第二条指令时,只需要在执行完第一条指令的基础上增加1ms;执行完第三条指令时,只需要在执行完第二条指令的基础上增加1ms。以此类推,执行完第n条指令时,只需要在执行第n-1条指令的基础上增加1ms。说到这里,不知道小伙伴们有没有思考这样一个问题,流水线技术的这种规律就涉及到一个非常重要的概念,叫作 流水线周期。
流水线周期为执行时间最长的一段,上图中的流水线周期为1ms
流水线的计算公式为:
1条指令执行时间 + (指令条数 -1)* 流水线周期
流水线的理论公式如下所示。
(t1 + t2 + … + tk) + (n-1) * △t
其中t1,t2…tk表示执行一条指令的每个步骤分别需要的时间,n为指令的条数,△t为流水线周期。
流水线的实践公式如下所示。
k*△t + (n-1) * △t
其中,k为执行一条指令的步骤数,n为指令的条数,△t为流水线周期。
这里,给小伙伴们举一个例子。
例如,一条执行的执行过程可以分解为取指,分析和执行三步,在取指时间t取指=3△t,分析时间分析=2△t,执行时间t执行=4△t的情况下,若按照串行方式执行,则10条指令全部执行完需要多少△t?若按照流水线方式执行,流水线周期为多少△t?使用流水线方式时,执行完10条指令需要多少△t?
(1)串行方式比较简单,就是将每条指令的执行时间进行累加。
(3△t + 2△t + 4△t) * 10 = 90△t。
(2)在执行一条指令的过程中,取指为3△t,分析为2△t,执行为4△t。根据流水线中对于流水线周期的定义:流水线周期为执行时间最长的一段,所以,流水线周期为4△t。
(3)使用流水线方式时,执行完10条指令需要的时间可以使用如下方式进行计算。
这里,我们分别计算下理论时间和实践时间。
- 理论时间
(3△t + 2△t + 4△t) + (10-1) * 4△t = 45△t。
- 实践时间
3 * 4△t + (10-1) * 4△t = 48△t。
关于超标量流水线,我们可以使用下图来表示。
在超标量流水线中,有一个概念叫作度。度表示在超标量流水线中,由几条流水线组成。例如上面的图中,超标量流水线由两条流水线组成,所以,度为2。此时的超标量流水线可以同时进行2个操作。也就是说,可以同时执行两个取指操作,可以同时执行两个分析操作,也可以同时执行两个执行操作。
如果此时有10条指令需要执行,使用以上超标量流水线的话,只需要10 / 2 = 5 条指令的时间。
那么如何才能正确的掌握Redis呢?
为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题
-
并发编程面试题汇总
-
JVM面试题汇总
-
Netty常被问到的那些面试题汇总
-
Tomcat面试题整理汇总
-
Mysql面试题汇总
-
Spring源码深度解析
-
Mybatis常见面试题汇总
-
Nginx那些面试题汇总
-
Zookeeper面试题汇总
-
RabbitMQ常见面试题汇总
JVM常频面试:
Mysql面试题汇总(一)
Mysql面试题汇总(二)
Redis常见面试题汇总(300+题)