资 源 简 介
通过阅读和学习,读者可以掌握基于多种平台(多核、多处理器、集群和GPU等),利用多项技术(Matlab并行计算工具箱、多线程MEX文件、OpenMP和GPU等),学习理解Matlab并行程序设计的原理、方法和技巧。《实战Matlab之并行程序设计》共分l0章:第1章为Matlab开发环境和程序设计基础;第2章为利用parfor对for循环进行并行;第3章为SPMD并行结构;第4章为其他Matlab并行结构;第5章为Matlab并行计算数据类型;第6章为Matlab通用并行程序设计;第7章为MDCE配置;第8章为创建多线程MEX文件;第9章为在Matlab中应用OpenMP进行并行计算;第10章 实战 Matlab2并行程序设计刘维编著光京貌航无头卷出版砝前言随着多核和集群技术的快速发展,并行程序设计成为提高数值计算效率的主流技术之一。目前,常用的小型并行计算平台可大致分为两类:一类是由多核和多处理器构建的单计算机平台;另一类是由多个计算机构成的集群( Cluster)系统。单个计算机上的多核或多CPU之间可以通过共享内存进行数据交互;多个计算机构成的集群通过网络进行数据通信。常用的并行计算技术包括多线程技术、基于共享内存的 OpenMP技术、基于集群系统的MPI技术等。但无论是基于多线程的并行计算技术,还是基于 OpenMP的并行计算技术,以及基于MPI的并行计算技术,都需要用户处理大量的与并行算法无关的技术细节。此外,这些并行计算技术本身并不提供高效的算法库,与数值计算的关联是松散的。Matlab已经成为数值计算领域的主流工具,它提供了大量高效的数值计算模块和丰富的数据显示模式,便于用户进行快速算法研究和科学建模仿真。因此,如果 Matlab支持多核、多处理器和集群并行计算的话,那么对于科学研究人员和工程师来说,无疑是一个新的福音。在 Matlab2009之后, Matlab推出了并行计算工具箱( Parallel Computing Toolbox,PCT)和并行计算服务( Distributed conputing Server,DCS),通过PCT和DCS用户可以实现基于多核平台、多处理器平台和集群平台的多种并行计算任务。利用PCT和DCS,用户无需关心多核、多处理器以及集群之间的底层数据通信,而是更多地将主要精力专注于并行算法的设计,同时可以充分利用 Matlab提供的数值计算模块和数据显示功能,高效便捷地完成并行计算任务PCT除了支持通用处理器构建的多核、多处理器和集群平台之外,还增加了对GPU( Graphics Processing Unit的支持。GPU最早主要应用在图形计算领域,近年来GPU在通用计算领域的发展迅速。在 Matlab中,可以通过PCTMEX文件等多种方式利用GPU完成数据处理功能在 Matlab中,并行程序开发与普通程序开发的差别很大,因此在开始应用Matlab并行计算功能之前,读者首先需要考虑以下几个问题实战 Matlab之并行程序设计(1)并行计算的平台平台是并行计算的载体,也是并行计算技术选择的最主要的依据。如果读者只有一个单核单处理器的计算机,那么最终用 Matlab并行计算很难带来任何计算效率上的提高。如果读者拥有一台多核或多处理器的计算机,那么采用 Matlab并行计算工具箱就可以满足一般的并行计算要求( Matlab2010b的并行计算工具箱最多可支持8个 worker,或者说可利用8个核的计算能力)。如果读者拥有多台计算机组成的集群,则需要利用PCT和DCS共同完成并行计算任务。如果读者拥有GPU处理器,则可以利用PCT、MEX文件等技术通过用GPU完成并行计算任务(2)并行计算的复杂程度Matlab并行计算工具箱为常用的并行计算问题提供了相对快捷和筒单的解决方案。比如,利用 parfor可以对for循环进行并行处理,利用SPMD可以对单个程序多组数据的情况进行并行处理,因此读者在分析待解决的并行计算问题时,应重点考虑待解决并行计算问题的复杂程度。如果并行计算问题可以直接采用 parfor或SPMD进行处理(或者可以分解为类似的问题),则应尽量选择Matlab并行计算工具箱内置的并行结构,这样可以大大提高用户解决问题的效率如果面临的并行计算问题比较复杂,则可以采用更为通用的解决方案(比如创建parallel job或 distributed job),甚至可以创建mex文件釆用多线程和 OpenMP并行技术(3)并行计算的数据通信问题并行计算的目的主要有两个,一是提高计算效率,二是提高计算机的利用率。提高计算效率比较容易理解,某个问题如果采用单个CPU计算需要10小时,那么采用10个CPU进行计算可能只需要1.5小时就可以完成。在有些情况下,即使单个CPU的计算效率可以满足需求,但是如果图形界面和计算模块放在一个CPU上执行,将会对图形界面的操作性产生影响,从而影响用户使用软件的体验此时,如果配置双CPU或多核的计算机,可以采用一个CPU或处理器核(下文统称处理单元)完成计算,另外一个处理单元完成图形界面显示或用户响应。这只是利用并行计算提高计算机利用率的一个例子。在实际应用中,并行计算不是总能带来令人满意的效果。在极端情况下,并行计算的效率反而会低于单处理单元的计算效率。因为并行计算本身也需要占用系统资源。在目前的处理体系中,多前言线程或多进程是并行计算的基础。虽然 Matlab并行计算工具箱已经隐藏了多线程或多进程操作,用户在程序设计的层面不用关心线程或进程操作,但是用户不能忽略并行计算带来的系统资源消耗。并行计算占用系统资源主要体现在两个方面:-是准备并行计算的必要操作,比如创建线程、创建进程、创建任务、并行计算启动前准备数据等;二是并行计算过程中各个并行任务之间的数据通信。并行计算运行之前准备引入的系统开销是一次性的,相对容易估算,但并行任务之间的数据通信需要引起特别的重视。在设计并行计算方案的时候,应尽量做到各并行任务之间的数据通信量最小化。特别是在冈络速度较慢的集群计算平台上,任务之间的数据通信问题往往是提高并行效率的主要瓶颈。上述三个问题也是本书重点讲解的三个问题。在并行计算平台方面,本书重点介绍了基于多核、多处理器、集群系统和GPU平台 Matlab并行计算程序的开发方法。根据并行计算的复杂度方面,本书由简入难,从 Matlab基本的并行结构逐步深入到 Matlab并行计算数据类型, Matlab通用并行程序设计, Matlab中应用多线程技术、 Matlab中应用 OpenMP基础和 Matlab中应用GPU并行处理技术等方面的内容。考虑到不同的计算平台和不同的并行计算技术涉及的数据通信问题差异较大,因而将数据通信问题的讲解和说明分散到各章节中进行说明。本书对基于 Matlab的并行计算程序设计的原理进行了深入的剖析,对基于Matlab的并行计算程序设计方法和技巧给出了详细的说明,并在各章节给出了大量实例。通过阅读和学习本书的内容,读者可以掌握基于多种平台(多核、多处理器、集群和GPU等),利用多项技术( Matlab并行计算工具箱、多线程MEX文件OpenMP和GPU等),完成 Matlab并行程序设计的原理、方法和技巧。全书共分10章,其中:第1章为 Matlab开发环境和程序设计基础;第2章为利用 parfor对for循环进行并行;第3章为SPMD并行结构;第4章为其他 Matlab并行结构;第5章为 Matlab并行计算数据类型;第6章为 Matlab通用并行程序设计;第7章为MDCE配置;第8章为创建多线程MEⅩ文件;第9章为在 Matlab中应用OpenMP进行并行计算;第10章为利用GPU并行执行 Matlab程序。附录共包括三个部分,其中:附录A为MEX文件基础知识;附录B为 Matlab并行计算配置项;附录C为 Matlab并行计算常用概念说明。本书的阅读对象包括大中专院校学生以及利用 Matlab开发并行程序的科学家和工程师。书中对 Matlab并行计算相关基础知识均进行了说明,因此读者可4实战 Matlab之并行程序设计以循序渐进地完成本书的阅读和学习。如果读者熟悉 Matlab语言和C/C 语言,将有助于理解和掌握本书的内容。本书是较早对 Matlab并行计算进行系统介绍的图书之一,书稿和书中实例虽经作者仔细斟酌和详细测试,但仍不免有错误或不足之处。如果读者阅读过程发现书中文字或内容存在不尽如人意之处,还望不吝指出。针对本书,北京航空航天大学出版社和Matlab中文论坛(htp:/www.iLoveMatlab.cn/)特别提供了读者与作者在线交流的平台(http://www.ilovematlab.cn/forum-212-1.html),我希望借助这个平合实现与广大读者面对面的交流,解决大家在阅读此书的过程中遇到的问题,分享彼此的学习经验,从而达到共同进步刘维2011年10月5日夜录第1章 Matlab开发环境和程序设计葚础…………………….11.1本章导读1.2 Matlab环境自···音鲁曲自非·鲁鲁會自节··自。·非曲自鲁非··自口着●非.鲁·●自。聊。日自。自喜鲁鲁。自。DD曲1.2.1命令行窗口…1.2.2代码编辑器…章·音非非··自·自·看·自非1.2.3工作空间窗口…1.2.4历史命令窗口235571.2.5利用 Matlab环境的界面操作●中朝鲁鲁。章●●。1.2.6 Matlab帮助………1.2.7代码输入提示…………………………………………………………………91.3 Matlab语言基础D鲁·中非·。101.3.1 Matlab脚本文件…1.3.2 Matlab运算符与表达式曹●■自备着■.自非息自鲁·要.鲁·自着鲁自妻●自D●·办鲁喜6。·.·垂d111.3.3 Matlab函数………………………1413.4 Matlab的向量运算●p,p血。■1.3.5 Matlab的程序控制191.3.6面向对象程序设计231.4 Matlab常用的数据类型··自重自鲁非即。鲁鲁量鲁鲁··自身鲁··春271.4.1数值阵列281.4.2字符阵列…301.4.3逻辑阵列…314.4元组阵列……………………………着垂。非321.4.5结构体阵列341.4.6函数句柄阵列…361.5 Matlab常用数据显示函数●。38figure窗381.5.2绘制曲线…391.5.3显示图像数据………………401.5.4显示三维曲面数据p鲁口·看。●·。,………40第2章利用 parfor对for循环进行并行432.1本章导读…432.2循环和并行43实战 Matlab之并行程序设计2.3for循环的并行性432.4 parfor关键字自看t自鲁鲁自·日非自自p自自曲442.5 Matlab client FH worker442.6利用 parfor并行for循环的基本原理442.7利用 parfor并行for循环的基本步骤452.8配置 Matlab并行计算池452.8.1 matlabpool命令452.8.2 matlabpool配置…472.9第一个 parfor程序及其与for循环的对比482. 10 parfor循环比for循环快多少?………………502.10.1不启动 matlabpool直接执行 parfor程序512.10.2打开 matlabpool………………512.11 parfor和for的不同…522.12数据通信的影响……………………………532.12.1数据通信较大的情况532.12.2 parfor和for的执行时间曲线………………………………………………………552.12.3数据通信影响较小的情况………………,··●非●自·即口·自鲁非…………………572.13函数句柄在 parfor并行程序分析中的应用602.14简约操作普p·●。·看q·。。番鲁·自。●。看。;自命。。看。·都自音看。·「曾·p看看直··…………612.14.1简约操作的基本概念及并行原理……………612.14.2简约操作并行效率分析···.自自鲁鲁自鼻妻音要自……622.14.3简约操作的执行顺序…662.14.4简约操作与简约变量的特征662.15 parfor循环中的主要变量类型2.15.1 parfor循环变量概述2.15.2循环变量…申●●鲁■·■番自命·杂··.2.15.3分段变量………∴……732.15.4广播变量…2.15.5临时变量■口■782.16 parfor程序设计需要考虑的其他问题812.16.1变量名称(函数优先)……812.16.2显式使用变量822.16.3 parfor中使用函数句柄…D看∴……………822.16.4在 parfor中调用递归函数832.16.5 parfor性能考虑……………………842.16.6 Matlab并行计算池中 worker的位置85第3章SPMD并行结构873.1本章导读…87目录3.2SPMD………8733SPMD的使用方法3.4 Matlab client与 Matlab lab数据交互……903.5 distributed或 codistributed数值阵列…933.5.1采用 distributed对象创建分布式阵列……943.5.2采用 codistributed对象创建分布式阵列973.6在SPMD中获取job、task、lab、 scheduler信息9837利用SPMD并行结构解决计算密集型问题∴……993.8利用SPMD并行结构解决数据密集型问题102第4章其他 Matlab并行结构1054.1本章导读………………………………………………………………………1054.2 for-drange……………………………1054.2.1 for-drange应用于分布式阵列···喜音暴垂自着音自·。自●……1054.2.2 for-drange应用于非分布式阵列…1074.3利用 pmode并行执行 Matlab程序…………………1084.3.1启动 pmode窗口···日···自····◆·····办···单日·自“··甲·态命。普4自·44命●··d。。……1084.3.2 pmode窗口界面………1094.3.3显示 pmode数据………………………………………………11043.4在集群中启动 pmode窗口看。●●普●曹…1104.3.5通过 pmode命令在各个lab和 Matlab client之间传输数据……………1114.4并行执行 Matlab函数●鲁春········鲁带争鲁鲁命●●·。非1134.4.1同步模式……………………………1134.4.2异步模式…号◆身音·普···昏音。。·鲁b·●17第5章 Matlab并行计算数据类型…………………………1185.1本章导读1185.2 Matlab并行计算数据类型……………1185.2.1同体变量……………………………………………………………1195.2.2异体变量曾自·自鲁·。鲁·看自音非自1195.2.3独有变量……………12052.4分布式变量……………………………………………………1215.3并行计算数据类型的转换方法1225.3.1将同体变量转换为其他变量…1235.3.2将异体变量转换为其他变量…………………………12453.3将独有变量转换为其他变量1245.3.4将分布式变量转换为其他变量12654 Matlab并行计算数据类型的应用12754.1 parallel job中应用并行计算数据类型·p··●看曹日·4·127