目录
一、并行算法分类
并行算法是给定并行模型的一种具体、明确的解决方法和步骤。根据不同的分类标准,可以进行多种不同分类:
1、按照运算的基本对象
分为数值并行算法(数值计算)和非数值并行算法(符号计算)。这两种算法并不是截然不同的,在数值计算的过程中会用到查找、匹配等非数值计算的成分,当然非数值计算中也会用到数值计算的方法,划分为何种类型的算法主要取决于主要的计算量和宏观的计算方法。
2、按照进程间的依赖关系
分为同步并行算法(步调一致)、异步并行算法(步调、进展互不相同)和纯并行算法(各部分间没有关系)。对于同步并行算法,任务的各个部分是同步向前推进的,有一个全局时钟来控制各部分的步伐;对于异步并行算法,各部分的步伐是互不相同的,它们根据计算过程的不同阶段决定等待、继续或终止;纯并行算法是最理想的情况,各部分之间可以尽可能快的向前推进,不需要任何同步或等待,但是这种问题比较少见。
3、按照并行计算任务大小
分为粗粒度并行算法(一个并行任务包含较长的程序段和较大的计算量)、细粒度并行算法(一个并行任务包含较短的程序段和较小的计算量)及介于两者之间的中粒度并行算法。一般来说,并行的粒度越小,优点是有可能开发更多的并行性,提高并行度。缺点是并行粒度越小,通信次数和通信量越多,这就增加了额外的开销,因此合适的并行粒度需要根据计算量、通信量、计算速度、通信速度进行综合,尽可能实现负载平衡,这样才会获得较高的效率。
二、并行算法设计
对于相同的并行计算模型,可以有多种不同的并行算法,由于并行算法设计的不同,可能对程序的执行效率有很大影响,不同算法可以有几倍、几十倍甚至上百倍的性能差异。
并行算法基本上是随着并行计算机方发展而发展的,本质上,不同的并行算法是根据问题类别的不同和并行计算机体系结构的特点产生的,一个好的并行算法要既能很好地匹配并行计算机硬件体系结构的特点,又能反映问题内在并行性。
对于SIMD并行计算机一般适合同步并行算法,而MIMD并行计算机则适合异步并行算法。对于SPMD和MPMD这些新流行起来的并行计算机,设计并行算法的思路和以前并行算法的思路有很大不同之处。这里针对机群系统,讲一下SPMD和MPMD并行算法的设计。
对于机群计算而言,一个非常重要的原则是“设法加大计算时间相对于通信时间的比重,减少通信次数甚至以计算换通信”。原因在于,对于机群系统,一次通信的开销要远大于一次计算的开销,因此要尽可能降低通信频次,或者将两次通信合并。基于同样的原因,机群计算的并行粒度不可能太小,因为这样会大幅增加通信开销。如果能够实现计算和通信的重叠,将会更大程度提高整个程序的执行效率。
所以对于机群计算,可以是数值或非数值计算,这些都不是影响性能的关键因素,也可以是同步、松同步或异步,但以同步和松同步为主,并行的粒度一般是大粒度或中粒度。一个好的算法一般按照如下模式:
上图没有考虑计算与通信的重叠,如果可以实现计算、通信重叠,将是更加理想的并行计算模式。
对于MPMD并行算法,各个并行部分一般是异步的,而不是像SPMD那样的同步或松同步,因此只要能够降低通信次数,增大计算相对于通信的比重,MPMD算法将取得较高效率。
三、小结
并行计算中算法对性能影响重大,并行算法设计也是并行程序的前提,好的并行算法能够将并行计算机和实际问题有机结合,既能够充分利用并行计算机结构的特点,也能够揭示问题内在的并行性。
下一节我们将开始“基本MPI并行程序设计”的介绍。