3.1Matlab并行计算发展简介
MATLAB技术语言和开发环境应用于各个不同的领域,如图像和信号处理、控制系统、财务建模和计算生物学。MATLAB通过专业领域特定的插件(add-ons)提供专业例程即工具箱(Toolbox),并为高性能库(Libraries)如BLAS(Basic Linear Algebra Subprograms,用于执行基本向量和矩阵操作的标准构造块的标准程序)、FFTW(Fast Fourier Transform in the West,快速傅里叶变换)和LAPACK(Linear
Algebra PACKage,线性代数程序包)提供简洁的用户界面,这些特点吸引了各领域专家,与使用低层语言如C语言相比可以使他们很快从各个不同方案反复设计到达功能设计。
计算机处理能力的进步使得利用多个处理器变得容易,无论是多核处理器,商业机或两者的结合,这就为像MATLAB一样的桌面应用软件寻理论机制开发这样的构架创造了需求。已经有一些试图生产基于MATLAB的并行编程的产品,其中最有名是麻省理工大学林肯实验室(MIT Lincoln Laboratory)的pMATLAB和MatlabMPI,康耐尔大学(Cornell University)的MutiMATLAB和俄亥俄超级计算中心(Ohio Supercomputing Center)的bcMPI。
MALAB初期版本就试图开发并行计算,80年代晚期MATLAB的原作者,MathWorks公司的共同创立者Cleve Moler曾亲自为英特尔HyperCube和Ardent 电脑公司的Titan超级计算机开发过MATLAB。Moler1995年的一篇文章“Why there isn't a parallel MATLAB?[**]”中描述了在开了并行MATLAB语言中有三
个主要的障碍即:内存模式、计算粒度和市场形势。MATLAB全局内存模式的多数并行系统的分布式模式意味着大数据矩阵在主机和并行机之间来回传输。与语法解析和图形例程相比,那时MATLAB只花了小部分的时间行例程上,这使得并行上的努力并不是很有吸引力。最后一个障碍对于一个资源有限的组织来讲确实是一个现实,即没有足够多的MATLAB用户将其用于并行机上,因此公司还是把注意力放在单个CPU的MATLAB开发上。然而这并不妨碍一些用户团体开发MATLAB并行计算功能,如上面提到的一些实验室和超级计算中心等。
有几个因素使并行MATLAB工程在MathWorks公司内部变得很重要,首先MATALB已经成长为支持大规模工程的领先工程技术计算环境;其次现今的微处理器可以有两个或四个内核,将来可能会更多甚至个人并行机,采用更复杂的分层存储结构,MATLAB可以利用多处理器计算机或网络机;最后是用户团体中要求全面成熟解决方案的呼声也越来越高[]Cleve Moler.Parallel MATLAB: Multiple Processors and Multi Cores,Th eMathWorks News&Notes。
有三种途径可以用MATLAB来创建一个并行计算系统。第一种途径是主要是把MATLAB或相似程序翻译为低层语言如C或FORTRAN,并用注解和其它机制从编译器中生成并行代码,如CONLAB和FALCON工程就是这样。把MATLAB程序翻译为低层C或FORTRAN语言是个比较困难的问题,实际上MathWorks公司的MATLAB编译软件就能转换生成C代码到生成包含MATLAB代码和库并支持各种语言特性的包装器。
第二种途径是在并行机是MATLAB作为并行计算的一个“浏览器(browser)”而MATLAB本身并没有什么改变且MATLAB环境本来就不是运行上并行机上。这种途径不能真正算是“并行MATLAB”解决方案而仅仅是一个用来接入一个门户启动并行应用程序的WEB浏览器,在Intel Hypercube和
Ardent Titan超级计算机上最早的解决方案就是采用的这种方法。最近的MIT的MATLAB*p工程和现在一个商用工程Star-P再次使用这种方法。
林肯简介上面这两种方法由于有限语言和库支持,用户必须丢弃他们已有MATLAB 代码或选择通过简化的系统提供的构造集来大量的重新实现,而在MathWorlks 公司的最初调查中,已有MATLAB代码的利用性被引为任何并行计算工具集的最重要的特性。
第三种途径是通过其它库来扩展MATLAB或修改语言本身。MIT林肯国家实验室的MatlabMPI和pMATLAB工程及Connell大学的MutiMATLAB工程(MathWorks公司也参与其中)是这种方法运用得最成功的并广泛用于MATLAB并行计算库,其它的还有ParaM和GAMMA工程、Parallel Toolbox for MATLAB(采用PVM进行消息传递)和各种MPI工具箱MATLAB实现以及最近的Ohio超级计算中心的bcMPI(Blue Collar MPI)。
为了满足一套并行MATLAB工具的需要,MathWorls公司在2004年10月份引进并行计算工具箱(Parallel Computing Toolbox)和MATLAB分布式计算服务器(Distributed Computing Server)(原来分别称为D
istributed Computing Toolbox™and MATLAB R Distributed Computing Engine™),属于第三种实现途径。刚开始将MATLAB计算能力扩展至并行计算时,主要是针对易并行计算问题(embarrassingly parallel problem),这些问题通常具有的共同特点是,每一个步骤可以计算独立于所有其他的步骤,因此每一个步骤可以运行在一个单独的处理器,以实现更快的结果。例如很多用户要求在公司电脑上简化运行蒙特卡罗(Monte Carlo)和参数扫描(parameter seep)模拟。因为一些高级用户开始运用工具箱,因此必须结合其它语言特性,包括消息传递和对并行for循环、全局数组语义进行高度抽象。隐含多线程计算是在单核或多处理器机器上进行并行计算的另一种方法。
公司的战略目标是将传统的MATLAB优势扩展到机环境,具有交互式功能、多平台支持,接近数学表达式的语言来表达思想的能力而抽象出不相关的细节,因此工具集的设计目标是:
l用户在机上可以执行任意的MATLAB代码和Simulink仿真模型。
l用户可以用熟悉的MATLAB语言来编写和执行所有的任务相关的MATLAB并行程序
l用户可以运用一流的语言结构来表达并行思想。他们无须对自己创建并行程序的编程模式作重大的改变,也不用担心特定的体系结构或处理线
程、数据管理和同步等问题。
l语言应该完全独立于资源分配。同样的程序可以在单个处理器或数百个处理器上正常运行,并且可以根据资源适当扩展伸缩,在机某节点缺失
情况下依然能正常运行。
l可编程性将一直超越其它问题,用户能够创建正确的,易于阅读、调试和维护的程序
2005年MathWorks公司发布到分布式计算工具箱(Distributed Computing Toolbox)的第一个版本,提供管理多个独立MATLAB作业的功能;2006年发布第二版,增加了MATLAB和MPI的绑定。MATLAB代表“Matrix Laboratory”的意思,于是称一个MATLAB实例进程为“lab(or worker)”,并引入numlabs 表示一个作业中开启的labs的个数。从3.0版开始,增加了新的编程构造支持,使MATLAB不仅仅解决易并行计算问题(Embarrassingly Parallel Problems)。2008年发布4.0版(R2008a)及2009年2月发布了4.1版(R2009a),下表是各个并行计算工具箱各版本特性改变,使用时注意兼容性影响。各版本特点及详
情可查看Mathworks的Parallel Computing Toolbox™Release Notes。
3.2Matlab并行计算工具箱及MDCE介绍
3.2.1并行计算工具箱(Parallel Computing Toolbox)
并行计算工具箱(Parallel Computing Toolbox)可以在多处理器计算环境中使用MATLAB和Simulink解决计算、数据密集型问题。使用工具箱可以解决通过装配多个处理器包含几个单独工作单位或单个大型计算的问题。这些处理器可以驻留在一个多处理器计算机上,或者,当工具箱配合MATLAB分布式计算引擎(MATLAB Distributed Computing Engine(Server),简称MDCE)时,驻留在计算机集上。
使用Parallel Computing Toolbox开发并行应用程序。利用该工具箱,应用程序能够在包含多达四个本地worker的桌面建立原型(4.1版R2009a可以多达八个本地worker),并且,通过MATLAB Distributed Computing Server(MATLAB 分布式计算服务器),可以扩展应用程序,将其应用到一个集上的多台计算机,如图3-2所示。
利用并行计算工具箱(Parallel Computing Toolbox),可在多核和多处理器计算机上使用MATLAB和Simulink来解决计算问题和数据密集型问题。并行处理结构包括并行for循环和代码块、分布式数组、并行数值算法,以及消息传递函数等,并以较高的级别在MATLAB中执行任务及数据并行算法,而无需为
特定的硬件和网络架构编写程序。这样,将串行MATLAB应用程序转换为并行MATLAB应用程序,便几乎不需要修改代码,且不需要使用低级语言编写程序。此外,还可以在各种批处理环境中交互运行或脱机运行应用程序。
该工具箱提供高级构造,如并行回路、并行算法、基于MPI的函数,以及用于作业和任务管理的低级构造。并行命令窗口为用户提供熟悉的用于开发并行应用程序MATLAB交互式环境。也能够在批处理环境中脱机执行分布式和并行应用程序。
用户可以使用工具箱在单个多核或多处理器桌面上执行应用程序。无需更改代码,即可在计算机集上运行同一个应用程序(使用MATLAB Distributed Computing Server)。并行的MATLAB应用程序可以作为可执行程序或共享库(用MATLAB Compiler构建)分发,这些可执行程序或共享库可以访问MATLAB Distributed Computing Server。
主要功能
l支持数据并行和任务并行的应用程序开发
l可使用parfor(并行for循环)和spmd(单程序多数据)注释代码段,用于执行数据并行和任务并行的算法
l高级别的结构,如分布式数组、并行算法,以及消息传递函数,可在多个处理器上处理大型的数据集
l可在一个多核桌面上本地运行四个worker(至R2009a,4.1版可达8个)l与MATLAB Distributed Computing Server集成,可用于使用调度程序或任意数量worker的基于集的应用程序
l提供交互模式和批量执行模式
1.在MATLAB中编写并行应用程序
Parallel Computing Toolbox(并行计算工具箱)提供了多种高级编程结构,利用此工具箱,可对串行MATLAB代码进行转换,使之在数个worker(独立于MATLAB客户端运行的MATLAB计算引擎)上并行运行。这些worker既可在桌面上运行(工具箱在桌面上可本地运行多达四个worker),也可在集上运行(使用MATLAB Distributed Computing Server)。这样的结构可降低在MATLAB客户端与worker之间、以及各worker之间管理计算与数据的协调与分发的复杂性,从而简化并行代码开发。此外,可使用关键词,例如parfor (并行for循环)和spmd(单程序多数据)语句来注释MATLAB代码,从而可以探究算法的各个区段所提供的任务和数据并行机制。
MATLAB池(Pool)和并行命令窗口(pmode)支持交互执行,这样,在设置耗时较长的运行或脱机任务前,可以先测试应用程序的某些区段。即使没有worker,这些结构仍能够运作,这样,只需维护单个代码版本,即可确保串行执行和并行执行。
2.执行任务并行的算法
通过将Monte Carlo仿真和其他粗粒度或密集并行问题组织为独立的任务(工作单元),即可实现其并行化。工具箱中的并行for循环提供了一种在多个MATLAB worker间分配任务的方式。使用该循环,可以将独立的循环迭代自动分配给多个MATLAB worker。parfor结构管理着MATLAB客户端会话与worker之间的数据和代码传输。它会自动检测是否有worker,如果没有,则会还原为串行方式。