在之前的文章中,我介绍了CPU中的超线程技术,使用这个技术可以提高CPU的利用率,不过经过这么多年的发展,科技工作者们在CPU中还发明了很多高科技,今天我再介绍几个更底层的CPU提效技术:流水线、超标量和SIMD。

流水线技术

我们可以把流水线技术想象成是一个快餐店。做一份快餐需要经过好几个步骤,比如切菜、炒菜、盛菜,如果一个人一次只做一份菜,等他完成一份菜的所有步骤后再开始做下一份菜,那么效率就会很低。但是,如果我们把这个过程分解开来,让A负责切菜,B负责炒菜,C负责盛菜,那么这三个人就可以同时工作,B炒菜2的时候,A就可以切菜3,C则可能在盛菜1,这可以大大提高整体工作效率。这就是流水线技术的原理。

CPU中的高科技:流水线、超标量、SIMD_计算机组成原理

然而,流水线技术并不是万能的。就像我们的快餐店例子,如果我们有太多的人同时工作,比如有10个人都在切菜,那么就会出现人手太多反而效率低下的情况。这是因为,每一个人都需要一个工作台,而工作台的数量是有限的。在计算机中,这个工作台就是流水线寄存器,它需要在每个阶段记录上一级的输出,供下一级使用。如果流水线级数过多,就会导致寄存器操作的时间开销过大,影响性能的提升。因此,我们需要选择一个合适的流水线级数,以达到最佳的性能。

超标量技术

接下来,我们来谈谈超标量技术。超标量技术就像一个有多道菜的餐厅。在一个普通的餐厅,你可能需要一个厨师去做一道菜,然后等他做完后再做下一道菜。但是在一个有多道菜的餐厅,你可以让多个厨师同时做多道菜,从而大大提高了效率。超标量技术就是这样,CPU一次从内存取出多条指令,然后发射到不同的指令译码器及后续的流水线中。本来1个时钟周期内只能执行1条指令,也就是1个标量的运算,现在通过多发射能够并行多个标量的运算,所以称为超标量技术。

然而,超标量技术也有其技术挑战,那就是它需要增加CPU电路设计的复杂度。为了解决这个问题,人们考虑将一部分工作放到软件中处理,提出了超长指令字设计(VLIW),编译器把多条指令打包成一个指令包(同时解决指令依赖问题),然后CPU取指令包,译码指令包,然后让多条指令并行执行。这就像是让我们的厨师们提前准备好菜单,然后让他们按照菜单上的顺序一起工作。但是,这种方法也有其问题,那就是如果我们想改变菜单,那么我们可能需要重新编译整个程序,向前兼容和向后兼容都存在问题,这就是安腾史诗级失败的原因。

SIMD技术

最后,我们来谈谈SIMD技术。SIMD技术就像是一台大型的食品加工机,它可以一次处理多个食品,而且这些食品的处理过程互相没有依赖,可以并行进行。这就是SIMD技术的原理,它通过一次从内存读取多个数据,然后在CPU中并行计算,从而提高了效率。

在CPU中,这是通过增加寄存器的方式实现的。一个寄存器一次性可以加载多个数据,这些数据的计算互相没有依赖,也就没有冒险问题需要处理。只要CPU里有足够多的功能单元,这些计算就可以并行进行。SIMD技术在向量运算、矩阵运算、图片、音频、视频处理等领域有广泛的应用。

更多学习资源

我注册了一个微/信/公/众/号:萤火架构,后续会分享很多架构方面的真实经验和认知,欢迎关注,以免错过精彩内容。


总的来说,计算机硬件的世界是一个充满了奇妙的世界,它通过流水线、超标量、SIMD等技术,使得我们的计算机能够更高效地工作。希望通过这个讲解,大家能够对计算机硬件有一个更深入的理解,从而更好地开发软件。需知,理解工具,才能更好地使用它。