并行计算
目前公开文献可查到比较早提出的定义是Gottlieb等人在1989年《高性能计算》一书中给出的。Gottlieb等认为:并行计算是一种计算类型,其中许多计算或计算过程的执行是同时执行的。
并行计算的目的是加快计算速度。我国学者张林波在其编写的教材《并行计算导论》中对并行计算进行了描述性定义:并行计算(parallel computing)是指,在并行机上,将一个应用分解成多个子任务,分配给不同的处理器,各个处理器之间相互协同,并行地执行子任务,从而达到加速求解速度,或者求解应用问题规模的目的。
如图1所示,通俗而言,并行计算是一种计算体系结构,其中多个处理器同时执行从一个较大的复杂问题中分解出来的多个、较小的计算任务。近年来并行计算已成为计算机体系结构中的主要范例,主要以多核处理器的形式出现。

1.1 并行计算的三个基本条件
根据并行计算的定义,并行计算必须具备三个基本条件:
(1)并行机。并行机至少包含两台或两台以上处理机,这些处理机通过互连网络相互连接,相互通信。
(2)应用问题必须具有并行度。也就是说,应用可以分解为多个子任务,这些子任务可以并行地执行。将一个应用分解为多个子任务的过程,称为并行算法的设计。
(3)并行编程。在并行机提供的并行编程环境上,具体实现并行算法,编制并行程序,并运行该程序,从而达到并行求解应用问题的目的。
1.2并行计算的四种形式
(1)位级并行(Bit-level parallelism):增加处理器字的大小,这减少了处理器必须执行的指令量,才能对大于字长的变量执行操作。
从1970年代超大规模集成(VLSI)计算机芯片制造技术问世到1986年左右,计算机体系结构的提速是由计算机字长加倍(即每个周期处理器可处理的信息量)推动的。增加字长会减少处理器必须执行的指令数量,以执行对大于字长的变量的操作。例如,如果一个8位处理器必须将两个16位整数相加,则处理器必须首先使用标准加法指令将每个整数中的8个低位位相加,然后使用加法器将8个高位位相加。一个8位处理器需要两条指令来完成一个操作,而一个16位处理器将能够用一条指令来完成操作。
从历史上看,4位微处理器先后被8位,16位,32位微处理器所取代。而32位处理器已经成为通用计算的标准已有二十年了。直到2000年代初期,随着x86-64体系结构的出现,64位处理器才开始逐步普遍应用。
(2)指令集并行(Instruction-level parallelism):本质上,计算机程序是由处理器执行的指令流。没有指令级并行性,处理器每个时钟周期只能发出少于一条指令(IPC<1)。这些处理器称为次标量处理器。这些指令可以重新排序并组合成组,然后在不更改程序结果的情况下并行执行。这称为指令级并行性。从1980年代中期到1990年代中期,指令级并行性的进步主导了计算机体系结构。即当指令之间不存在相关时,它们在流水线中是可以重叠起来并行执行。
(3)任务并行(Task parallelism):任务并行性是并行程序的一个特征,即“可以对相同或不同的数据集执行完全不同的计算”。这与数据并行性相反,数据并行性是对相同或不同的数据集执行相同的计算。任务并行性涉及将任务分解为子任务,然后将每个子任务分配给处理器以执行。然后,处理器将同时并经常协作地执行这些子任务。任务并行性通常不会随问题的规模而扩展。
(4)超字级并行(Superword-level):超字级并行性是一种基于循环展开和基本块矢量化的矢量化技术。它与循环矢量化算法的不同之处在于,它可以利用内联代码的并行性,例如操纵坐标,颜色通道或手动展开的循环。
1.3 并行计算与云计算、分布式计算的区别
(1)并行计算与云计算的区别:云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。
现阶段所说的云服务已经不单单是一种分布式计算,而是分布式计算、效用计算、负载均衡、并行计算、网络存储、热备份冗杂和虚拟化等计算机技术混合演进并跃升的结果(图2)。
云计算常与网格计算(分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机,常用来执行大型任务)、效用计算(IT资源的一种打包和计费方式,比如按照计算、存储分别计量费用,像传统的电力等公共设施一样)、自主计算(具有自我管理功能的计算机系统)相混淆。
因此,云计算不只是一个技术概念,而是一个商业服务计算产品的概念,在云计算的产品里面,包含了分布式计算和并行计算的具体计算方法。如果从从用户的角度看,并行计算是由单个用户完成的,分布式计算是由多个用户合作完成的,云计算是没有用户参与,而是交给网络另一端的服务器完成的。通俗而言,云计算是一种计算产品,而并行计算是一种计算类型。
(2)并行计算与分布式计算的区别:如表1所示,分布式系统共享一个软件框架,以横向提高可靠性和性能,该软件框架具有“并行计算”的特征。在并行计算中,所有处理器都可以访问共享内存,以在处理器之间共享信息。在分布式计算中,每个处理器都有自己的专用内存(分布式内存),因此数据通过处理器传输的消息共享。并行计算可以看作是分布式计算的特定、密切相关的类别,而分布式计算则可以看作是松散连接的并行计算。此外,一般而言,多处理器共享内存中的高性能并发计算使用并行算法,而大型分布式系统的协作使用分布式算法。
总体而言,并行计算与分布式计算之间的主要区别在于,并行计算允许多个处理器同时执行任务,而分布式计算则在多个计算机之间划分单个任务,以实现一个共同的目标。在一个计算机中,一个处理器执行一个任务又执行另一个任务并不是一种有效的方法。并行计算为该问题提供了解决方案,因为它允许多个处理器同时执行任务。现代计算机支持并行计算以提高系统性能。另一方面,分布式计算允许多台计算机相互通信并实现目标。所有这些计算机都通过网络传递消息来相互通信和协作。Facebook和Google等组织广泛使用分布式计算,以允许用户共享资源。
