【计算机系统导论】第八章 协同之法 未来计算

随着摩尔定律逐渐失效,人们开始想尽办法挖掘处理器的最后一点潜力。既然单个不行,那么众人拾柴火焰高。不过有得就有失,原来并不是太大问题的同步问题,在协同计算下,成了大问题。本章中我们就从芯片的并行一路探索到网格系统,来看看计算的未来。


随着摩尔定律逐渐失效,人们开始想尽办法挖掘处理器的最后一点潜力。既然单个不行,那么众人拾柴火焰高。不过有得就有失,原来并不是太大问题的同步问题,在协同计算下,成了大问题,尤其是构建在计算机网络上的计算集群,如何在不稳定的网络之上提供稳定的服务是众多开发者一直在努力的目标。本章中我们就从芯片的并行一路探索到网格系统,来看看计算的未来。

计算的未来,大方向大家基本没有意见,一定是并行的。从多核到多处理器再到多机器,并行的不同层次难免遇到同一个问题:并行程序有其天然的难点,难在同步,难在调度,难在协调。如果把计算的过程比作拨弄算盘,那么最开始人们提高运算速度的方式就是把拨算盘的速度加快。就好像再快快不过光速一样,各种各样物理的限制使得计算速度的提高变得越来越困难。于是人们把目光转向了并行:既然一个算盘不能更快了,那么就来俩!

这里需要注意,并行虽然听起来很简单,就是一起干活嘛,但是从最底层到最高层,同样是并行,可能有完全不同的协同工作机制,这里面的奥秘,相信在读完这章之后大家就会明白。

最底层是芯片内部的并行,我们手机里的 SoC 和计算机里的中央处理器都是这样的例子,所有的并行行为都在一个单独的芯片中发生。这里又有几种不同的方式,最简单的是指令级并行,一系列指令会在处理器的调度下发射到不同的功能单元中并行执行,也就是我们常说的流水线。另一种稍微复杂一点的机制是多线程,处理器会在不同的线程中切换,看起来好像是同时在处理多个任务。最后一种就是我们常说的多核处理器了,一个大芯片中包含两个或者更多核心,并且在统一的调度下进行运算(现在手机都快有十核处理器了)。

除了芯片内部的并行,人们还意识到针对某些特定的操作,其实并不需要时时刻刻动用中央处理器如此兴师动众,而是利用协处理器完成简单的操作(一般来说是数据传输和运算量较小的计算)。从 DMA 到手机上用来检测运动状态的协处理器,其目的都是为了减轻中央处理器的负担,也完成了同时做多件事情的任务。

有了协处理器,自然可以考虑多个处理器协同工作。单个芯片的多个核心是通过共享二级或三级缓存来完成协同的,多个处理器则可以通过共享内存来满足。根据对内存的不同访问形式,我们有 UMA 多处理器(所有内存的访问都有一致的访问时间)、NUMA 多处理器(对远程内存的访问时间比本地内存要略微长一些)与 COMA 多处理器(缓存可以根据需要在不同机器间移动)几种不同的方式。

随着计算能力的需求越来越大,共享内存已经成为了多处理器系统的瓶颈,于是多计算系统出现了,每个中央处理器并不共享内存,而是通过消息传递来进行互相通信。从 MPI 到 Hadoop 再到 Spark,每一次计算模型的升级,带来的都是极大的效率提升,通过因特网将各种相关组织联结在一起,共享计算能力、数据和其他资源。

从底层一路走上来,会发现协同计算一层比一层松散,共享的程度也越来越低,直到不同的硬件最终被虚拟化成统一的计算资源,最终催生了云计算这一新产业。

本章最后我们会通过利用云计算来搭建一个网络服务,在实践中我们会发现,云使得原来需要专业人员维护才能拥有的大量计算能力变得容易获取和维护,将成为数字时代进一步发展的空气和水。

好了,让我们走进并行,去探索计算的未来吧。

捧个钱场?