基于MATLAB的高性能计算方法研究.docx
- 文档编号:28741800
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:32
- 大小:293.46KB
基于MATLAB的高性能计算方法研究.docx
《基于MATLAB的高性能计算方法研究.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的高性能计算方法研究.docx(32页珍藏版)》请在冰豆网上搜索。
基于MATLAB的高性能计算方法研究
基于MATLAB的高性能计算方法研究
摘要
MATLAB语言和开发环境应用于各个不同的领域,如图像和信号处理、控制系统、财务建模和计算生物学。
计算机处理能力的进步使得利用多个处理器变得容易,无论是多核处理器,商业机群或两者的结合。
MATLAB可以利用多处理器计算机或网络机群来解决数据密集型和计算密集型问题。
本文介绍了MATLAB的并行环境以及在MATLAB并行环境下提高计算性能,重点针对两个方面:
1、矩阵相乘2、k-means的聚类算法。
针对这两方面,分别在串行和并行的环境下进行时间的测定。
并行采用了MPI消息传递的方式。
最终分析加速的效果,总结不同并行算法的特点。
关键词:
MATLAB,并行计算,MPI
ABSTRACT
MATLABlanguageanddevelopmentenvironmentisusedinvariousfields,suchasimageandsignalprocessing,controlsystems,financialmodelingandcomputationalbiology.Advancementincomputerprocessingpowermakestheuseofmultipleprocessorseasier,whetheritismulti-coreprocessors,commercialfleet,oracombination.MATLABcantakeadvantageofmulti-processorcomputeroranetworkclustertosolvedata-intensiveandcompute-intensiveproblems.
ThisarticlehasdescribedaparallelenvironmentofMATLABandtheimprovementofcomputingperformanceintheMATLABparallelenvironment.Focusingontwoaspects:
1.matrixmultiplication,2,.k-meansclusteringalgorithm.Forthesetwoareas,respectivelyinserialandparallelenvironments,Ihavedeterminatedthetime.IusetheMPImessagepassinginparallelcomputing.FinallyIhaveanalysedtheeffectsofaccelerationandsummarizedthedifferentcharacteristicsofparallelalgorithms.
Keywords:
MATLAB,parallelcumputingMPI
目录
第一章绪论1
1.1并行计算的研究背景1
1.2并行计算的国内外现状2
1.3本文的主要工作和内容安排3
第二章并行计算基础5
2.1概述5
2.1.1并行计算机硬件5
2.1.2并行算法的性能度量5
2.1.3并行算法的基本原则6
2.1.4并行编程模式6
2.2MATLAB并行环境7
2.2.1MatlabDCT简介7
2.2.2工作原理8
2.3π的并行算法13
2.3.1基本原理13
2.3.2加速比研究14
第三章基于MATLAB的并行算法应用研究17
3.1并行矩阵相乘17
3.1.1概述17
3.1.2并行矩阵乘法原理17
3.1.3并行矩阵相乘实验结果分析19
3.1.4矩阵并行相乘小结22
3.2聚类k-means算法的并行研究23
3.2.1聚类简介23
3.2.2基于质心的技术:
K—means方法24
3.2.3串行算法25
3.2.4并行k-means算法26
第四章总结与展望31
致谢33
参考文献34
第一章绪论
1.1并行计算的研究背景
计算机技术的迅猛发展以及网络的普及,使人们有更多机会使用便捷的方法与外界进行信息交流。
可是,数据大量的涌入,增加了我们获取有用信息的难度。
如何从大量的数据中获取有价值的信息,采用传统的数据库技术已显得无能为力。
数据的迅速增加与数据的分析处理方法滞后的矛盾越来越大,人们希望能够在对已有的大量数据分析的基础上进行科学研究、商业决策或企业管理。
工程师和科学家们面临着用更少的时间建立复杂系统模型的需求,他们使用分布式和并行计算来解决高性能计算的问题。
这些分布式的环境由多处理器和多核计算机来实现。
因此并行计算应运而生。
Mathworks公司开发的分布式计算工具箱可以在多处理器计算环境中使用MATLAB和Simulink解决计算、数据密集型问题。
可以使用该工具箱解决通过装配多个处理器包含几个单独工作单位或单个大型计算的问题。
这些处理器可以驻留在一个多处理器计算机上,或者,当工具箱配合MATLAB分布式计算引擎时,驻留在计算机集群上。
该工具箱提供高级构造,如并行算法、基于MPI的函数,以及用于作业和任务管理的低级构造。
并行命令窗口提供熟悉的用于开发并行应用程序的MATLAB交互式环境。
也能够在批处理环境中脱机执行分布式和并行应用程序。
ParallelComputingToolbox(并行计算工具箱)提供了多种高级编程结构,利用此工具箱,可对串行MATLAB代码进行转换,使之在数个worker(独立于MATLAB客户端运行的MATLAB计算引擎)上并行运行。
这些worker既可在桌面上运行(工具箱在桌面上可本地运行多达八个worker),也可在集群上运行。
这样的结构可降低在MATLAB客户端与worker之间、以及各worker之间管理计算与数据的协调与分发的复杂性,从而简化并行代码开发。
并行计算是相对于串行计算来说的。
所谓并行计算可分为时间上的并行和空间上的并行。
时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。
并行计算是同时使用多种计算资源解决计算问题的过程,为执行并行计算,计算资源应包括一台配有多处理机(并行处理)的计算机、一个与网络相连的计算机专有编号,或者两者结合使用。
并行计算的主要目的是快速解决大型且复杂的计算问题。
此外还包括:
利用非本地资源,节约成本——使用多个“廉价”计算资源取代大型计算机,同时克服单个计算机上存在的存储器限制。
并行计算的主要目的是快速解决大型且复杂的计算问题。
并行计算的优点是具有巨大的数值计算和数据处理能力,能够被广泛地应用于国民经济、国防建设和科技发展中具有深远影响的重大课题,如石油勘探、地震预测和预报、气候模拟和大范围天气预报、新型武器设计、核武器系统的研究模拟、航空航天飞行器、卫星图像处理、天体和地球科学、实时电影动画系统及虚拟现实系统等等[1]。
随着计算在科学研究和实际应用中发挥越来越大的作用,人们对计算已经产生了依赖,将数值模拟作为许多决策的依据。
现在人们已经习惯将计算作为科学研究的第三种手段,和传统的科学研究的理论方法和实验方法并列。
并行计算机随着微处理芯片的发展,已经进入了一个新时代。
目前并行计算机的性能已经达到百万亿次,千万亿次的并行计算机正在规划之中。
1.2并行计算的国内外现状
并行计算是一门还没有发展成熟的学科,虽然人们已经总结出了相当多的经验,但是远远不及串行算法那样丰富。
并行算法设计中最常用的的方法是PCAM方法,即划分,通信,组合,映射。
首先划分,就是将一个问题平均划分成若干份,并让各个处理器去同时执行;通信阶段,就是要分析执行过程中所要交换的数据和任务的协调情况,而组合则是要求将较小的问题组合到一起以提高性能和减少任务开销,映射则是要将任务分配到每一个处理器上[1]。
总之,并行算法还需要相当多完善的地方。
并行算法与串行算法最大的不同之处在于,并行算法不仅要考虑问题本身,而且还要考虑所使用的并行模型,网络连接等等。
2009年10月29日,随着第一台国产千万亿次超级计算机在湖南长沙亮相,作为算盘这一古老计算器的发明者,中国拥有了历史上计算速度最快的工具。
2010年,国防科学技术大学在“天河一号”的基础上,对加速节点进行了扩充与升级,新的“天河一号A”系统已经完成了安装部署,其实测运算能力从上一代的每秒563.1万亿次倍增至2507万亿次,成为当时世界上最快的超级计算机!
对于我国而言,由于缺少高性能并行计算方面的必要知识。
相对于串行算法而言,并行算法有很多不成熟的领域。
如何并行化现有的科学与工程计算程序以及研制高性能的并行应用软件,使之能高效率地运行于并行机,如何快速培养并行计算相关的人才,提高科研人员的并行机应用水平,这些问题解决的好坏直接决定了并行计算在科研与工程应用中发挥的作用[2]。
1.3本文的主要工作和内容安排
本文将在第二章中重点介绍MATLAB并行化的基本概念、并行环境的配置以及以一个简单的实例来具体介绍在串行和并行下的加速分析。
第三章中将重点介绍本次毕业设计的主要工作:
在并行的环境下对矩阵相乘和k-means聚类的加速比进行研究,主要是MPI消息传递方式来进行并行计算。
小结:
本章节主要从并行计算的研究背景、选题意义、国内外现状几个方面阐述了并行计算研究的大概情况,使读者对并行算法有一个初步的认识。
第二章并行计算基础
2.1概述
2.1.1并行计算机硬件
并行计算科学中主要研究的是空间上的并行问题。
从程序和算法设计人员的角度来看,并行计算又可分为数据并行和任务并行。
一般来说,因为数据并行主要是将一个大任务化解成相同的各个子任务,比任务并行要容易处理。
空间上的并行导致了两类并行机的产生,按照Flynn的说法分为:
单指令流多数据流(SIMD)和多指令流多数据流(MIMD)。
我们常用的串行机也叫做单指令流单数据流(SISD)。
MIMD类的机器又可分为以下常见的五类:
并行向量处理机(PVP)、对称多处理机(SMP)、大规模并行处理机(MPP)、工作站机群(COW)、分布式共享存储处理机(DSM)[3]。
2.1.2并行算法的性能度量
加速比公式
Sp=T1/Tp(2-1)
Sp是加速比,T1是单处理器下的运行时间,Tp是在有P个处理器并行系统中的运行时间。
当Sp=P时,也被称为线性加速比(linearspeedup)
如果T1是在单处理器环境中效率最高的算法下的运行时间(即最适合单处理器的算法),则此加速比被称为绝对加速比(absolutespeedup)。
如果T1是在单处理器环境中还用和并行系统中一样的算法,则此加速比被称为相对加速比(relativespeedup)。
同样,我们可求得另一个用于衡量并行系统的标准-效率(efficiency),简写为Ep。
Ep=Sp/P(2-2)
P为并行计算机中处理器的个数
并行计算基本指标:
执行时间、工作负载、存储性能。
2.1.3并行算法的基本原则
并行算法是并行计算的基础,与实现技术相结合,为高效率使用并行计算机提供解决方案。
其基本原则如下:
可扩展性并行算法是否随处理机个数增加而能够线性或近似线性的加速,这是评价一个并行算法是否有效的重要标志之一。
粗粒度通常情况下,粒度越大越好。
这是因为在每个处理机中有很多需要计算的工作任务,如此可以充分发挥多处理机的作用。
并行加速比对细粒度问题一般情况下是不会很高的,这也是为什么并行计算需要求解大规模问题的原因所在。
减少通信一个高效率的并行算法,通信是至关重要的。
提高性能的关键是减少通信量和通信次数。
其中通信次数通常情况下是决定因素。
优化性能一个算法是否有效,不仅依赖于理论分析的结果,也和在实现的过程中采用的技术息息相关。
性能主要看单处理机能够发挥计算能力的百分比,然后是并行效率。
2.1.4并行编程模式
并行编程模式主要有如下的三种类型:
主从模式(Master-Slave)有一个主进程,其他为从进程。
在这种模式中,主进程一般负责整个并行程序的数据控制,从进程负责对数据的处理和计算任务,当然,主进程也可以参与对数据的处理和计算。
一般情况下,从进程之间不发生数据交换,数据的交换过程是通过主进程来完成的。
对称模式(SPMD)在这种编程模式中,没有哪个进程是主进程,每个进程的地位是相同的。
然而,在并行实现过程中,我们总是要在这些进程中选择一个进行输入输出的进程,它扮演的角色和主进程类似。
多程序模式(MPMD)在每个处理机上执行的程序可能是不同的,在某些处理机上可能执行相同的程序[4]。
2.2MATLAB并行环境
2.2.1MatlabDCT简介
DCT(TheDistributedComputingToolbox,分布式计算工具箱)和MDCE(theMatlabDistributedComputingEngin,Matlab分布式计算引擎)允许用户同时在电脑集群上执行不同的Matlab操作,从而到达在Matlab平台上加速的效果。
job是指用户在Matlab进程上需要执行的一组操作,这些操作量都很巨大。
task是指将一个job分解成的许多小片段,每个小片段称为一个task。
用户可以将job分解为一些相同的task,也可以将job分解为不同的task。
Matlab客户端(client)进程是指job和task所处的Matlab进程。
通常情况下,Matlab客户端就是用户运行Matlab的机器。
客户端通过使用DCT来定义和创建job和task。
MDCE是一个用来执行用户job的产品,这个产品执行用户创建的所有task并且将计算结果返回到客户端。
Jobmanager是MDCE的一部分,它负责调度job,分配task,以及接受计算结果。
worker是用来执行jobmanager所分配的task的计算结点。
如果这些计算结点之间可以通信,这称计算结点为lab。
一个Matlab计算引擎的建立通常包含许多worker,所有的这些worker可以同时执行task,以达到加速的目的。
通常,哪个worker执行哪个task并不重要。
每一个worker一次执行一个task,然后将结果返回给jobmanager。
jobmanager将job的所有task的计算结果再返回给客户端,工作过程见图2.1。
一个大规模的网络很可能包含许多jobmanager和许多客户端。
任何一个客户端都可以在任何一个jobmanager上创建,运行,并且访问job。
然而在同一时间,一个worker只能为一个jobmanager工作,见图2.2。
在使用MATLAB进行并行计算时,每一个作为worker的机器和作为jobmanager的机器必须启动theMatlabDistributedComputingEngineservice(MDCE服务)。
图2.1分布式计算进程之间的交互
图2.2多客户端,多JobManager的配置
2.2.2工作原理
(一)、概述
用户需要通过一系列步骤来创建和运行job。
创建job的每一步都在job对象的状态属性中有所体现,属性有pending,queued,running,finished。
图2.3说明了创建一个生命周期的步骤。
在jobmanager中,job按照其状态进行分类。
用户为了管理job使用的函数是,createJob,submit,和getAllOutArguments。
图2.3JOB工作状态
(二)、建立Job步骤
1Pending(挂起):
用户在客户端使用DCT中的createJob函数在scheduler上创建一个job。
这个job的第一个状态就是pending
2Queued(队列):
当用户在一个job上执行submit函数时,scheduler将job放入队列中,同时,job的状态变为queued。
scheduler按照job在队列中的顺序执行job。
当队列前面的job完成之后,队列中所有的job向前移。
用户能够使用promote函数和demote函数改变队列中job的顺序
3Running(运行):
当一个job到达队列的顶端时,scheduler将由该job分解出的task分配给worker来计算。
当worker数大于由job分解出的tash时,scheduler直接调用下一个job。
通过这种方式,可以同时执行多个job
4Finshed(完成):
当一个job的所有task都执行完毕后,这个job的转到finished状态。
这时,用户可以用getAllOutArguments函数返回job中所有task的计算结果
5Failed(失败):
task没有运行或者没有完成Job会处于failed状态
需要注意的是当一个job计算完成之后,即使用户清除了所有了客户端中所有的对象,job还是保留在jobmanager或DataLocation目录中。
jobmanager或scheduler会保存所有他所执行过的job,直到用户使用-clean选项重新启动了jobmanager使得jobmanager处于一个清空状态。
因此,只要用户没有用-clean选项重启jobmanager,用户就可以在另外一个客户端或者在一段时间之后依然得到该job的信息。
使用destroy函数可以永久的从jobmanager或scheduler中移除整个job。
(三)、DCT设置
configuration文档允许用户在文件中定义特定的参数和性质,然后在Matlab客户端按照M文件中的设置创建对象。
支持configuration使用的函数是有:
createJob
createParalleleJob
createTask
dfeval
dfevalasync
findResource
set
DCT包含这样一个文件:
Matlabroot\toolbox\distcomp\user\distcompUserConfig.m,编辑这个文档使得这个文档能够正确反映scheduler和用户想如何使用job。
该文档包含了被DCT支持的scheduler的每一种类型的configuration。
每一个configuration包含它所定义的每一个子函数的名称。
对于每一种configuration列出了用户可以更具对象设置的参数和属性。
当然用户也可以在MATLAB客户端中parallel菜单下Manageconfiguration中对相关项进行设置,具体设置如图2.4。
图2.4并行manager设置
使用schedulers
当使用findResource函数时,用户可以使用configuration来定义一个专门的scheduler。
例如:
此命令通过在distcompUserConfig,m中的jobmanagerconfiguration的设置来寻找scheduler。
该configuration的优点是用户可以在不改变Matlab应用代码的同时变更scheduler。
为了将不同的scheduler聚集在一起,distcompUserConfig,m中包含的configuration有jobmanager,ccs,lsf,mpiexec,和generic。
用户也可以将自己的congfiguration添加到distcompUserConfig,m文件中。
确定Job和Task的属性
用户在创建对象时,可以使用configuration来确定Job和Task的属性,或者在用户创建了对象之后应用一个configuration。
当将一个configuration应用到一个对象时,distcompUserConfug.m文件中该configuration部分定义的所有属性都应用到该对象上。
同时定义对象时‘Configuration’属性反映了用户使用configuration的名字。
用户一旦改变Job的任何属性,该Job的configuration属性将全部清空。
(四)、创建并行计算环境
寻找一个scheduler
jm=findResource('scheduler','type','jobmanager')
创建一个ParallelJob
job=createParallelJob(jm)
创建task
t=creareTask(jm,@fun,1,{val});
提交Job
submit(job)
返回结果
waitForState(job,'finished')
result=getAllOutputArguments(job)
删除对象
destroy(job)
clear(job)
clear(t)
(六)、MATLABMPI并行语法
lanSend:
向另一个lsb发送数据。
labSend(数据,目的地,标志),标志可以省略。
注意:
labSend中S必须是大写。
labReceive:
与labSend相对应,labReceive是从另外一个lab接收数据。
labReceive(来源,标志),其中标志必须与labSend中的标志一样才能正确接收。
labBarrier:
直到所有的lab都完成了操作后再执行下面的语句。
Example:
%Alllabsknowtheshareddatafilename
fname='c:
\data\datafile.mat';
%Lab1writessomedatatoafile,whichallotherlabswillread
iflabindex==1
data=randn(100,1);
save(fname,'data');
end
%Labswaituntilallhavereachedthebarrier-thisensuresthat
%nolabattemptstoloadthefileuntilithasbeenwritten
labBarrier;
load(fname);
labBroadcast:
是从所在lab广播数据到所有的lab,接受语句也有相似的形式。
Out_data=labBroadcast(root,in_data)是从root中广播数据到所有的lab,out_data=labBroadcast(root)是接收数据,格式需要按照上面的样式写,必须有赋值语句,root必须一致,否则会导致程序出错,无法收到数据。
labindex:
是当前lab的标号,MATLAB中是从1开始,而C的MPI是从0开始。
numlabs:
是所有lab的个数,它表示能参与计算的处理器个数。
表2.1DistributedJob和ParallelJob的区别
DistributedJob
ParallelJob
将Matlab进程称为worker,执行task时各个各个进程之间没有消息传递
将Mat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 性能 计算方法 研究