计算机指令-流水线和吞吐率
流水线
我们把计算机的一条指令抽象成三个步骤(实际不止这些)
现在向计算机发送三条指令A,B,C,如果不采用流水线的方式传输,那么在每个机器周期中的执行步骤如下图所示(我们假设每个步骤都会耗费一个机器周期):
采用流水线的方式传输如下图所示:
对比上面两张图,我们可以看出,流水线是一种准并行处理技术:
第1个机器周期:处理A指令的取指步骤
第2个机器周期:处理A指令的分析步骤,同时也在处理B指令的取指步骤
以此类推,我们可以看出,同一机器周期只允许处理不同的步骤,不能处理相同的步骤,这样在保证指令安全的同时也可以加快处理速度,提升了效率,这就是流水线带来的好处
吞吐率
流水线理解了,吞吐率就好说了,这里的吞吐率指的是流水线的吞吐率,简单理解吞吐率就是通过数值来反应计算的处理速度,先列个公式:吞吐率 = 指令条数 / 流水线时间
指令条数:需要计算吞吐率的指令的总数
流水线时间:这里的流水线时间指的并不是一个指令流水线花费的时间,而是跑完公式中指定的指令条数所需要的时间,对比上面两个图,一条指定所需要耗费的流水线时间是3个机器周期,而跑完ABC三条指令耗费的流水线时间是5个机器周期,对于流水线时间,有个计算公式:一条指令流水线所需要耗费的时间 + (指令条数 - 1)* 一条流水线中最耗时的步骤时间
吞吐率一般分为实际吞吐率和最大吞吐率,下面我从两个案例来分别讲述:
实际吞吐率
按照上面的公式,指令条数为8条,流水线时间=(1+2+3+1) + (8-1) * 3=28,结果就显而易见是C了
最大吞吐率
我们列个一元二次方程,设最大吞吐率为y,指令条数为x,按照上面的公式y=x /((2+1+3+1+2) + (x-1)* 3),简化下就是y=x / (3x + 6)=1 / 3 - 2 / (3x-6),x为正整数,当x趋于无穷大的时候,y的最大值为1/3
大家想要更加详细的了解其中的原理,可以参考:https://blog.csdn.net/yi_zz/article/details/7479912
用通俗易懂的语言阐述复杂的概念,学无止境,共勉前进!!!