论文部分内容阅读
当我们建好硬件环境,怎样利用它完成我们的计算需求就成为一个重要议题。针对并行计算,我们需要采用全新的编程模型,以便充分利用高性能计算机的全部性能。
并行计算编程模型
为了简化并行程序的设计,需要采用合适的并行编程模型。目前两种最重要的并行编程模型是数据并行和消息传递。数据并行编程模型的编程级别较高,编程相对简单,但只适用于解决数据并行问题;消息传递编程模型的编程级别较低,编程相对复杂,却有着更加广泛的应用范围。
数据并行指的是将相同的操作同时作用于不同的数据,从而提高问题求解速度。数据并行技术很早就被应用于向量计算机。长期的实践表明,该技术可以高效地解决大部分科学与工程计算问题。数据并行模型是一种较高层次的并行计算模型,它提供给程序员一个全局的地址空间。通常这类模型所采用的语言本身就提供有并行执行的语义,因而程序员只需要简单地指明执行什么样的并行操作和并行操作的对象,就实现了数据并行的编程。
数据并行模型虽然可以解决许多科学与工程计算问题,但对于非数值计算类问题,如果仍通过数据并行的方式来进行,则难以取得较高的效率。目前,数据并行模型面临的主要问题是如何实现高效的编译。只有具备了高效的编译器后,数据并行程序才可以在共享内存和分布式内存的并行计算机上取得高效率,才可能提高并行程序设计的效率和可移植性,从而进一步推广数据并行程序设计技术。
在消息传递模型中,各个并行执行的任务之间通过传递消息来交换信息,协调步伐,控制执行。消息传递一般是基于分布式内存的,但同样也适应于共享内存的并行计算机。消息传递模型为程序员提供了更加灵活的控制手段和表达形式,一些用数据并行模型很难表达的并行算法,采用消息传递模型则可以很容易地实现。机动灵活和控制手段的多样化,是消息传递模型能提供很高执行效率的重要原因。
消息传递模型为程序员提供了尽可能大的灵活性,但同时也将各个并行任务之间复杂的信息交换及协调控制交给了程序员,从而在一定程度上加重了程序员的负担。尽管如此,消息传递模型的基本通信模式仍然是简单和清楚的,目前大量并行程序采用的都是消息传递并行编程模型。
并行算法基本原则
并行算法是并行计算的基础,与实现技术相结合,为高效率使用并行计算机提供解决方案。其基本原则如下:
可扩展性 并行算法是否随处理机个数增加而能够线性或近似线性的加速,这是评价一个并行算法是否有效的重要标志之一。
粗粒度 通常情况下,粒度越大越好。这是因为在每个处理机中有很多需要计算的工作任务,如此可以充分发挥多处理机的作用。并行加速比对细粒度问题一般情况下是不会很高的,这也是为什么并行计算需要求解大规模问题的原因所在。
减少通信 一个高效率的并行算法,通信是至关重要的。提高性能的关键是减少通信量和通信次数。其中通信次数通常情况下是决定因素。
优化性能 一个算法是否有效,不仅依赖于理论分析的结果,也和在实现的过程中采用的技术息息相关。性能主要看单处理机能够发挥计算能力的百分比,然后是并行效率。
常见并行算法
解決并行计算问题,可以采用的算法种类不少,但是经常被使用的算法有以下几种:
区域分解算法 是将区域进行分解的一种方法,早期应用于求解椭圆型偏微分方程。区域分解按照划分方式可分为非重叠的区域分解和重叠的区域分解。
功能分解算法 是将不同功能组成的问题,按照其功能进行分解的一种手段,其目的是逐一解决不同功能的问题,从而获得整个问题的解。
流水线算法 流水线技术是并行计算中一个非常有效的、常用的手段,根据计算的依赖和递推关系制定多任务流水线流程。
分而治之算法 根据计算流程进行分解和整合,分而治之方法在并行计算中起着举足轻重的作用。
同步并行算法 所有计算单元下一步计算需要等待上一次的计算全部完成,串行算法并行化中大部分使用此种算法。
异步并行算法 进行数据交换不需要严格确定在某一时刻,每个处理机按照预定的计算任务持续执行,但通常需要在一定的时候必须进行一次数据交换,以保证算法的正确性。
并行编程模式
并行编程模式主要有如下的三种类型:
主从模式(Master-Slave) 有一个主进程,其他为从进程。在这种模式中,主进程一般负责整个并行程序的数据控制,从进程负责对数据的处理和计算任务,当然,主进程也可以参与对数据的处理和计算。一般情况下,从进程之间不发生数据交换,数据的交换过程是通过主进程来完成的。
对称模式(SPMD) 在这种编程模式中,没有哪个进程是主进程,每个进程的地位是相同的。然而,在并行实现过程中,我们总是要在这些进程中选择一个进行输入输出的进程,它扮演的角色和主进程类似。
多程序模式(MPMD) 在每个处理机上执行的程序可能是不同的,在某些处理机上可能执行相同的程序。
并行程序的实现技术
进程控制 对称模式(SPMD)并行计算中每个处理机上执行的是相同的程序,对于每个进程来说,需要知道自己是属于哪个进程,从而来确定该进程需要完成的任务。进程控制是并行程序的重要组成部分,所有的数据处理和交换过程都离不开进程标识,是在实现过程中必须时刻要牢记的。
数据交换 在SPMD模式中,数据交换是其主要特征。进程之间的协同工作、信息沟通等都离不开数据交换。如何合理地实现数据交换,是提高并行计算程序性能的关键之一。对于一个给定的并行计算方法,为了高效率的实现,需要仔细分析数据依赖关系,尽可能减少不必要的数据交换,同时也要尽最大努力使数据交换在最少的次数内完成。
面向对象化 建立自己的通讯库,使程序具有更加直观的可读性。比如说,在处理机中要进行矩阵传输,那就需要定制一个子程序来完成这项任务。
链 接:并行计算体系结构
目前,主要的并行计算体系结构主要有以下四种:
1.对称多处理(SMP)。它由处理单元、高速缓存、总线或交叉开关、共享内存以及I/O等组成。
2.分布式共享存储多处理(DSM)。它较好地改善了SMP的可扩展能力,是目前高性能计算机的主流发展方向之一。
3.大规模并行处理(MPP)。它是并行计算机发展过程中的主力,现在已经发展到由上万个处理机构成一个系统。
4.集群(Cluster)。Linux平台的集群系统己成为最流行的高性能计算平台,在高性能计算机中占有越来越大的比重,系统规模可从单机、少数几台联网的微机直到包括上千个结点的大规模并行系统,既可作为廉价的并行程序调试环境,也可设计成真正的高性能计算机。
链 接:刀片:并行架构发展新趋势
最近几年,刀片服务器得到快速发展。刀片服务器是指在标准高度的机架式机箱内可插装多个卡式的服务器单元,实现高可用和高密度。每块“刀片”实际上就是一块系统主板。它们可以通过板载硬盘启动自己的操作系统,类似于一个个独立的服务器。
在这种状态下,每块母板运行自己的系统,服务于指定的不同用户群,相互之间没有关联。不过,管理员可以使用系统软件将这些母板集合成一个服务器集群。集群里所有的母板都可以连接起来提供高速的网络环境,并同时共享资源,为相同的用户群服务。在集群中插入新的“刀片”,就可以提高整体性能。而由于每块“刀片”都是热插拔的,所以,系统可以轻松地进行替换,并且将维护时间减少到最小。
刀片服务器不仅在设计上具有低功耗、空间小、单机售价低等特点,同时它还继承发扬了传统服务器的一些功能,比如热插拔和冗余电源等,满足了密集计算环境对服务器性能的需求。此外,有些产品还可以通过内置的负载均衡技术,有效地提高服务器的稳定性和核心网络性能。
并行计算编程模型
为了简化并行程序的设计,需要采用合适的并行编程模型。目前两种最重要的并行编程模型是数据并行和消息传递。数据并行编程模型的编程级别较高,编程相对简单,但只适用于解决数据并行问题;消息传递编程模型的编程级别较低,编程相对复杂,却有着更加广泛的应用范围。
数据并行指的是将相同的操作同时作用于不同的数据,从而提高问题求解速度。数据并行技术很早就被应用于向量计算机。长期的实践表明,该技术可以高效地解决大部分科学与工程计算问题。数据并行模型是一种较高层次的并行计算模型,它提供给程序员一个全局的地址空间。通常这类模型所采用的语言本身就提供有并行执行的语义,因而程序员只需要简单地指明执行什么样的并行操作和并行操作的对象,就实现了数据并行的编程。
数据并行模型虽然可以解决许多科学与工程计算问题,但对于非数值计算类问题,如果仍通过数据并行的方式来进行,则难以取得较高的效率。目前,数据并行模型面临的主要问题是如何实现高效的编译。只有具备了高效的编译器后,数据并行程序才可以在共享内存和分布式内存的并行计算机上取得高效率,才可能提高并行程序设计的效率和可移植性,从而进一步推广数据并行程序设计技术。
在消息传递模型中,各个并行执行的任务之间通过传递消息来交换信息,协调步伐,控制执行。消息传递一般是基于分布式内存的,但同样也适应于共享内存的并行计算机。消息传递模型为程序员提供了更加灵活的控制手段和表达形式,一些用数据并行模型很难表达的并行算法,采用消息传递模型则可以很容易地实现。机动灵活和控制手段的多样化,是消息传递模型能提供很高执行效率的重要原因。
消息传递模型为程序员提供了尽可能大的灵活性,但同时也将各个并行任务之间复杂的信息交换及协调控制交给了程序员,从而在一定程度上加重了程序员的负担。尽管如此,消息传递模型的基本通信模式仍然是简单和清楚的,目前大量并行程序采用的都是消息传递并行编程模型。
并行算法基本原则
并行算法是并行计算的基础,与实现技术相结合,为高效率使用并行计算机提供解决方案。其基本原则如下:
可扩展性 并行算法是否随处理机个数增加而能够线性或近似线性的加速,这是评价一个并行算法是否有效的重要标志之一。
粗粒度 通常情况下,粒度越大越好。这是因为在每个处理机中有很多需要计算的工作任务,如此可以充分发挥多处理机的作用。并行加速比对细粒度问题一般情况下是不会很高的,这也是为什么并行计算需要求解大规模问题的原因所在。
减少通信 一个高效率的并行算法,通信是至关重要的。提高性能的关键是减少通信量和通信次数。其中通信次数通常情况下是决定因素。
优化性能 一个算法是否有效,不仅依赖于理论分析的结果,也和在实现的过程中采用的技术息息相关。性能主要看单处理机能够发挥计算能力的百分比,然后是并行效率。
常见并行算法
解決并行计算问题,可以采用的算法种类不少,但是经常被使用的算法有以下几种:
区域分解算法 是将区域进行分解的一种方法,早期应用于求解椭圆型偏微分方程。区域分解按照划分方式可分为非重叠的区域分解和重叠的区域分解。
功能分解算法 是将不同功能组成的问题,按照其功能进行分解的一种手段,其目的是逐一解决不同功能的问题,从而获得整个问题的解。
流水线算法 流水线技术是并行计算中一个非常有效的、常用的手段,根据计算的依赖和递推关系制定多任务流水线流程。
分而治之算法 根据计算流程进行分解和整合,分而治之方法在并行计算中起着举足轻重的作用。
同步并行算法 所有计算单元下一步计算需要等待上一次的计算全部完成,串行算法并行化中大部分使用此种算法。
异步并行算法 进行数据交换不需要严格确定在某一时刻,每个处理机按照预定的计算任务持续执行,但通常需要在一定的时候必须进行一次数据交换,以保证算法的正确性。
并行编程模式
并行编程模式主要有如下的三种类型:
主从模式(Master-Slave) 有一个主进程,其他为从进程。在这种模式中,主进程一般负责整个并行程序的数据控制,从进程负责对数据的处理和计算任务,当然,主进程也可以参与对数据的处理和计算。一般情况下,从进程之间不发生数据交换,数据的交换过程是通过主进程来完成的。
对称模式(SPMD) 在这种编程模式中,没有哪个进程是主进程,每个进程的地位是相同的。然而,在并行实现过程中,我们总是要在这些进程中选择一个进行输入输出的进程,它扮演的角色和主进程类似。
多程序模式(MPMD) 在每个处理机上执行的程序可能是不同的,在某些处理机上可能执行相同的程序。
并行程序的实现技术
进程控制 对称模式(SPMD)并行计算中每个处理机上执行的是相同的程序,对于每个进程来说,需要知道自己是属于哪个进程,从而来确定该进程需要完成的任务。进程控制是并行程序的重要组成部分,所有的数据处理和交换过程都离不开进程标识,是在实现过程中必须时刻要牢记的。
数据交换 在SPMD模式中,数据交换是其主要特征。进程之间的协同工作、信息沟通等都离不开数据交换。如何合理地实现数据交换,是提高并行计算程序性能的关键之一。对于一个给定的并行计算方法,为了高效率的实现,需要仔细分析数据依赖关系,尽可能减少不必要的数据交换,同时也要尽最大努力使数据交换在最少的次数内完成。
面向对象化 建立自己的通讯库,使程序具有更加直观的可读性。比如说,在处理机中要进行矩阵传输,那就需要定制一个子程序来完成这项任务。
链 接:并行计算体系结构
目前,主要的并行计算体系结构主要有以下四种:
1.对称多处理(SMP)。它由处理单元、高速缓存、总线或交叉开关、共享内存以及I/O等组成。
2.分布式共享存储多处理(DSM)。它较好地改善了SMP的可扩展能力,是目前高性能计算机的主流发展方向之一。
3.大规模并行处理(MPP)。它是并行计算机发展过程中的主力,现在已经发展到由上万个处理机构成一个系统。
4.集群(Cluster)。Linux平台的集群系统己成为最流行的高性能计算平台,在高性能计算机中占有越来越大的比重,系统规模可从单机、少数几台联网的微机直到包括上千个结点的大规模并行系统,既可作为廉价的并行程序调试环境,也可设计成真正的高性能计算机。
链 接:刀片:并行架构发展新趋势
最近几年,刀片服务器得到快速发展。刀片服务器是指在标准高度的机架式机箱内可插装多个卡式的服务器单元,实现高可用和高密度。每块“刀片”实际上就是一块系统主板。它们可以通过板载硬盘启动自己的操作系统,类似于一个个独立的服务器。
在这种状态下,每块母板运行自己的系统,服务于指定的不同用户群,相互之间没有关联。不过,管理员可以使用系统软件将这些母板集合成一个服务器集群。集群里所有的母板都可以连接起来提供高速的网络环境,并同时共享资源,为相同的用户群服务。在集群中插入新的“刀片”,就可以提高整体性能。而由于每块“刀片”都是热插拔的,所以,系统可以轻松地进行替换,并且将维护时间减少到最小。
刀片服务器不仅在设计上具有低功耗、空间小、单机售价低等特点,同时它还继承发扬了传统服务器的一些功能,比如热插拔和冗余电源等,满足了密集计算环境对服务器性能的需求。此外,有些产品还可以通过内置的负载均衡技术,有效地提高服务器的稳定性和核心网络性能。