前言:之前在本博客上发过一些关于matlab并行计算的文章,也有不少网友加我讨论关于这方面的一些问题,比如matlab并行计算环境的建立,并行计算效果,数据传递等等,由于本人在研究生期间做论文的需要在这方面做过一些研究,但总体感觉也就是一些肤浅的应用,现已工作,已很少再用了,很多细节方面可能也记不清了,在这里将以前做的论文内容做一些整理,将分几个小节,对matlab并行计算做个一个简要的介绍,以期对一些初学者有所帮助,当然最主要的还是多看帮助文档及相关技术文章!有不当之处敬请各位网友指正,3.1 Matlab并行计算发展简介MATLAB技术语言和开发环境应用于各个不同的领域,如图像和信号处理、控制系统、财务建模和计算生物学。
MA TLAB通过专业领域特定的插件(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年代晚期MA TLAB的原作者,MathWorks 公司的共同创立者Cleve Moler曾亲自为英特尔HyperCube和Ardent电脑公司的Titan超级计算机开发过MATLAB。
Moler 1995年的一篇文章“Why there isn't a parallel MATLAB?[**]”中描述了在开了并行MA TLAB语言中有三个主要的障碍即:内存模式、计算粒度和市场形势。
MATLAB全局内存模式的多数并行系统的分布式模式意味着大数据矩阵在主机和并行机之间来回传输。
与语法解析和图形例程相比,那时MA TLAB只花了小部分的时间行例程上,这使得并行上的努力并不是很有吸引力。
最后一个障碍对于一个资源有限的组织来讲确实是一个现实,即没有足够多的MA TLAB用户将其用于并行机上,因此公司还是把注意力放在单个CPU的MA TLAB开发上。
然而这并不妨碍一些用户团体开发MA TLAB并行计算功能,如上面提到的一些实验室和超级计算中心等。
有几个因素使并行MATLAB工程在MathWorks公司内部变得很重要,首先MATALB 已经成长为支持大规模工程的领先工程技术计算环境;其次现今的微处理器可以有两个或四个内核,将来可能会更多甚至个人并行机,采用更复杂的分层存储结构,MA TLAB可以利用多处理器计算机或网络机群;最后是用户团体中要求全面成熟解决方案的呼声也越来越高[] Cleve Moler. Parallel MATLAB: Multiple Processors and Multi Cores, Th eMathWorks News&Notes 。
有三种途径可以用MATLAB来创建一个并行计算系统。
第一种途径是主要是把MATLAB或相似程序翻译为低层语言如C或FORTRAN,并用注解和其它机制从编译器中生成并行代码,如CONLAB和FALCON工程就是这样。
把MATLAB程序翻译为低层C或FORTRAN语言是个比较困难的问题,实际上MathWorks公司的MA TLAB编译软件就能转换生成C代码到生成包含MATLAB代码和库并支持各种语言特性的包装器。
第二种途径是在并行机是MA TLAB作为并行计算的一个“浏览器(browser)”而MA TLAB 本身并没有什么改变且MATLAB环境本来就不是运行上并行机上。
这种途径不能真正算是“并行MATLAB”解决方案而仅仅是一个用来接入一个门户启动并行应用程序的WEB浏览器,在Intel Hypercube和Ardent Titan超级计算机上最早的解决方案就是采用的这种方法。
最近的MIT的MATLAB*p工程和现在一个商用工程Star-P再次使用这种方法。
上面这两种方法由于有限语言和库支持,用户必须丢弃他们已有MATLAB代码或选择通过简化的系统提供的构造集来大量的重新实现,而在MathWorlks公司的最初调查中,已有MA TLAB代码的利用性被引为任何并行计算工具集的最重要的特性。
第三种途径是通过其它库来扩展MATLAB或修改语言本身。
MIT林肯国家实验室的MatlabMPI和pMATLAB工程及Connell大学的MutiMATLAB工程(MathWorks公司也参与其中)是这种方法运用得最成功的并广泛用于MATLAB并行计算库,其它的还有ParaM 和GAMMA工程、Parallel Toolbox for MA TLAB(采用PVM进行消息传递)和各种MPI工具箱MATLAB实现以及最近的Ohio超级计算中心的bcMPI(Blue Collar MPI)。
为了满足一套并行MATLAB工具的需要,MathWorls公司在2004年10月份引进并行计算工具箱(Parallel Computing Toolbox)和MA TLAB分布式计算服务器(Distributed Computing Server)(原来分别称为Distributed Computing Toolbox™ and MATLAB R Distributed Computing Engine™),属于第三种实现途径。
刚开始将MATLAB计算能力扩展至并行计算时,主要是针对易并行计算问题(embarrassingly parallel problem),这些问题通常具有的共同特点是,每一个步骤可以计算独立于所有其他的步骤,因此每一个步骤可以运行在一个单独的处理器,以实现更快的结果。
例如很多用户要求在公司电脑上简化运行蒙特卡罗(Monte Carlo)和参数扫描(parameter seep)模拟。
因为一些高级用户开始运用工具箱,因此必须结合其它语言特性,包括消息传递和对并行for循环、全局数组语义进行高度抽象。
隐含多线程计算是在单核或多处理器机器上进行并行计算的另一种方法。
公司的战略目标是将传统的MA TLAB优势扩展到机群环境,具有交互式功能、多平台支持,接近数学表达式的语言来表达思想的能力而抽象出不相关的细节,因此工具集的设计目标是:l 用户在机群上可以执行任意的MA TLAB代码和Simulink仿真模型。
l 用户可以用熟悉的MA TLAB语言来编写和执行所有的任务相关的MA TLAB并行程序l 用户可以运用一流的语言结构来表达并行思想。
他们无须对自己创建并行程序的编程模式作重大的改变,也不用担心特定的体系结构或处理线程、数据管理和同步等问题。
l 语言应该完全独立于资源分配。
同样的程序可以在单个处理器或数百个处理器上正常运行,并且可以根据资源适当扩展伸缩,在机群某节点缺失情况下依然能正常运行。
l 可编程性将一直超越其它问题,用户能够创建正确的,易于阅读、调试和维护的程序2005 年MathWorks公司发布到分布式计算工具箱(Distributed Computing Toolbox)的第一个版本,提供管理多个独立MATLAB作业的功能;2006年发布第二版,增加了MA TLAB 和MPI的绑定。
MATLAB代表“Matrix Laboratory”的意思,于是称一个MATLAB实例进程为“lab(or worker)”,并引入numlabs表示一个作业中开启的labs的个数。
从3.0版开始,增加了新的编程构造支持,使MA TLAB不仅仅解决易并行计算问题(Embarrassingly Parallel Problems)。
2008年发布4.0版(R2008a)及2009年2月发布了4.1版(R2009a),下表是各个并行计算工具箱各版本特性改变,使用时注意兼容性影响。
各版本特点及详情可查看Mathworks公司网站的Parallel Computing Toolbox™ Release Notes。
3.2 Matlab 并行计算工具箱及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 的函数,以及用于作业和任务管理的低级构造。