Matlab 并行计算工具箱的使用Matlab并行工具箱的产生一方面给大规模的数据分析带来了巨大的效益,另一方面且引入了分布式计算,借助matlab自身携带的MDCE,可以实现单机多核并行运行或者是同一个局域网络中的多台处理器组成的机群的并行运行。
个人以为后者是前者的拓展,并行计算的最初目的是为了解决串行计算速度不能满足某些复杂运算而产生的技术,能够借助较低配置的处理,协同工作处理同一个程序,但是他们之间是并不会交互的,仅仅是有核心主机—client进行大任务的分解,而后将它们分配给各个处理器,由处理器共同完成。
所以说并行计算的实质还是主从结构的分布式计算。
这里体现了数量的优势,同一个程序串行运行可能需要40个小时,但是若是由10台处理器同时跑,则有望将计算时间降低到接近4个小时的水平。
而且这十台处理器可以是一个多个多核CPU组成,例如一个8核心CPU和1个2核心CPU。
也可以是由5个2核心CPU组成,形式灵活。
而分布式计算在并行计算的基础上有功能上的扩展,一个很重要的方面就体现在,上述的十个处理器之间可以进行交互式通讯这是基于MPI(message passing interface)实现的,这对于大规模的分布式控制系统是很有需要的,也就是说,各个处理器之间要实现数据的实时传递,有时是共享某些信息,有时是lab1需要lab2的某些信息。
相对于单纯的并行计算来说,后者将交互式通讯扩展到了labs之间,而不仅仅是lab和client之间。
Matlab 并行计算工具箱中的函数有:1.Parfor (FOR循环的并行计算);函数1:matlabpool其作用是开启matlab并行计算池,单独的命令会以默认的配置开启并行计算环境。
函数2:parforFor循环的并行计算替代关键词,需要注意的是,parfor不能像for一样嵌套。
但是外部的parfor内部可以嵌套for循环。
函数3:batch 用于在worker上运行matlab脚本或者是matlab函数。
例如:batch(‘script.m’) 语句会根据默认并行配置文件定义的集群将script脚本文件运行在worker上。
2.批处理函数1:batch,其语法有:j = batch('aScript')j = batch(myCluster,'aScript')j = batch(fcn,N,{x1, ..., xn})j = batch(myCluster,fcn,N,{x1,...,xn})j = batch(...,'p1',v1,'p2',v2,...)其中的变量:J The batch job object.'aScript'The script of MATLAB code to be evaluated by the MATLAB pool job.myClusterCluster object representing cluster compute resources.fcnFunction handle or string of function name to be evaluated by the MATLAB pool job.N The number of output arguments from the evaluated function. {x1, ..., xn}Cell array of input arguments to the function.p1, p2Object properties or other arguments to control job behavior.v1, v2Initial values for corresponding object properties or arguments.3.利用GPU计算(这一部分暂时略过)4.分布式数组和SPMD函数1:distributed分布式数组利用matlab计算池中所有worker的内存来存储数组。
如此以来,就可以创建或者是操作对于一个机器无法存储的大型数组。
函数2:gather 回收所有的分布式数组数据到当前工作空间。
例如:x = gather(D);函数3:spmd (Single Program Multiple Data)其使用方式一般情况下为:spmd<statement>end.当程序语句被放置在<statement>部分时,matlab会将程序语句在几个matlab worker中同时运行,并行计算。
函数4:composite创建一个复合对象。
对于在workers上运行spmd<statement>语句中的变量,在client端都可以通过构造函数获取变量值,当spmd<statement>语句运行时,会自动生成复合构造函数,也可以利用composite函数自行创建一个。
例如对于,复合构造变量C:C{1} 表示变量C在worker 1上的值;C{2} 表示变量C在worker 2上的值;函数5:codistributed 用复制方式创建一个codistributed 数组。
一个codistributed数组被分割为多个片段分别分布在不同lab的工作空间中。
这种情况适用于每一个lab都要用到某一个大型数组的一个部分,这样提供了lab在访问这些数据的便利。
一个codistributed数组和一个distributed数组之间差别很小,体现在其视角的不同。
前者用于在一个lab上存取一个数组而后者则支持在client上存取一个数组。
其语法:C = codistributed(X) distributes a replicated X using the default codistributor. X mustbe a replicated array, that is, it must have the same value on all workers. Size(C) is thesame as size(X).C = codistributed(X, codist) distributes a replicated X using the codistributor codist.For information on constructing codistributor objects, see the reference pages forcodistributor1d and codistributor2dbc.C = codistributed(X, codist, lab) distributes a local array X that resides on the workeridentified by lab, using the codistributor codist. Local array X must be defined on allworkers, but only the value from lab is used to construct C. size(C) is the same as size(X).C = codistributed(C1, codist) where the input array C1 is already a codistributedarray, redistributes the array C1 according to the distribution scheme defined bycodistributor codist. This is the same as calling C = redistribute(C1, codist). If thespecified distribution scheme is that same as that already in effect, then the result is the same as the input.函数6:redistribute 将一个codistributed数组从新按照其他分配规则进行重新分布。
语法:redistribute(D1,CODISTR),将分布式数组D1按照CODISTR重新分配在labs中的分布方式。
函数7:getLocalPart 获取一个分布式数组的本地部分,语法:L = getLocalPart(D)返回分布式数组D的本地部分,其格式取决于D的具体分配方案。
函数8:globalIndices 根据分布式数组在各个lab中的分配方案获取本地部分的全局索引。
(如何使用还不清晰)5.集群配置文件和计算规模函数1:parcluster 根据集群配置文件建立一个集群。
其语法:C = parcluster;返回一个集群对象。
该对象是由默认的集群配置文件确定;C = parcluster(profile);返回一个集群对象,该对象是由profile确定。
函数2:parallel.defaultClusterProfile该函数获取或者设置默认的并行计算集群配置文件。
语法:p = parallel.defaultClusterProfile,返回当前默认集群配置文件名oldprofile = parallel.defaultClusterPro) 设置newprofile为默认配置文件,返回旧的配置文件名。
可以通过saveProfile或者saveAsProfile来修改一个集群对象。
函数3:parallel.importProfile 导入集群配置文件。
语法:pro = parallel.importPro).导入由确定的配置文件,而后返回导入的配置文件名。
配置文件名后缀是.mat。
需要注意的是,凡是导入的配置文件,在以后的matlab操作中都是有效的,不必重复导入。
函数4:pctconfig 配置一个并行计算工具箱会话。
语法有:Pctconfig(‘p1’,’v1’,…):设置client端的配置属性P1的值为V1;Config = pctconfig(‘p1’,’v1’,…):返回一个结构体赋给config,结构体的字段名对应属性名称,字段值则对应属性值。
Config = pctconfig();没有任何输入,以结构体形式返回当前所有属性以及属性值。
6.详细的作业和任务控制a)作业和任务的建立函数1:createJob 在集群上建立作业,其语法:obj = createJob(cluster),为确定的cluster建立独立作业,作业所需要的数据存放在本地,由cluster的JobStorageLocation属性确定。