龙泉居士基于文档原创,转载请注明
Parallel Computing Toolbox是一个matlab2011开始提供的组件,用于提供交互式的并行计算功能
一、运用的场合
很多应用程序中包含多个重复的代码部分,这些代码可能有多次循环迭代,也可能只有少量的循环迭代,但他们只是重复次数与输入参数的区别,对于处理这样的数据,并行计算是一个理想的方法,并行循环的唯一限制是每个循环间没有相互的依赖关系
当然,对于相互依赖的程序代码,也有可以实现并行计算的技巧
对于MATLAB,你可以选择运行一个庞大的批处理程序,也可以选择将他们拆分成多个任务由多个远程的计算机并行地执行,那将会极大的增加运行效率
同时,如果要处理的数据过于庞大,并行计算的性能也将明显优于异步的计算与处理
二、并行计算方案简介
交互运行一个循环程序
在这个例子中,我们只是要学习怎么将一个简单的for循环程序变成一个并行执行的程序,for循环中处理的数据量以及for循环的迭代次数都是很小的,因此,很难在这个例子中体现出并行计算的效率优势
1、假设你的代码中包含下面一个显示正弦波形的for循环:
for i=1:1024
A(i) = sin(i*2*pi/1024);
end
plot(A)
2、为了能够使用matlab提供的交互式工具,你需要首先打开matlabpool,这个组件可以运行在你的本地计算机上,也可以运行在多个远程计算机上
matlabpool open local 3
3、在matlabpool上,通过使用parfor关键字,你可以将你的代码修改为并行运行的程序:
parfor i=1:1024
A(i) = sin(i*2*pi/1024);
end
plot(A)
4、当程序运行结束,我们要使用下面一条指令关闭matlabpool,并且释放被占用的处理器或
两段代码唯一的区别是将关键字由for变为了parfor,而两段代码的执行结果也是极其相似的
但是,因为这个程序中,每次循环迭代都只是参数不同,之间并没有依赖关系,因此,每次迭代并不一定运行于同一个处理器上,通过parfor关键字声明,每一个迭代可能在多个处理器或多个计算机上并行执行,但并没有任何保证执行顺序的技术,因此,A(900)可能在A(400)之前运行

运行一个批处理作业(batch job)
首先,先介绍一下matlab中的批处理作业的概念,使用批处理命令可以让matlab分担某个任务一段时间,下面是一个for循环的例子
1、首先使用下面的命令创建一个脚本
edit mywave
2、在 MATLAB Editor 中键入下面的代码,完成for循环显示函数
for i=1:1024
A(i) = sin(i*2*pi/1024);
end
3、保存并关闭 MATLAB Editor
4、在Matlab命令窗口中输入批处理命令来让脚本在单独的Matlab工作间中执行
job = batch('mywave')
5、batch命令不会阻塞matlab,所以你必须等待工作的完成然后去查看他的结果
wait(job)
6、使用load命令可以把工作间中的变量传输到客户端前
load(job, 'A')
plot(A)
7、工作完成后,要记得调用下面的命令清除数据
destroy(job)
上面的代码将matlab的工作间与客户端之间相分开,很大的提高了效率

运行一个交互的批处理作业(batch job)
下面的例子将上面的两个例子结合在一起,完成parfor的batch job
1、在MATLAB Editor中编辑你的脚本
edit mywave
2、如下修改你的脚本
parfor i=1:1024
A(i) = sin(i*2*pi/1024);
end
3、保存并退出MATLAB Editor
4、和前面一样,我们运行这个脚本,但是这一次我们要使用一个MATLAB pool 来运行这个脚本
job = batch('mywave', 'matlabpool', 3)
5、和之前一样,我们要去查看结果需要执行下面的代码
wait(job)
load(job, 'A')
plot(A)
6、工作完成后,要记得调用下面的命令清除数据
destroy(job)
上面的这段代码将一个批处理工作分给了三个不同的工作间来协作完成

本文介绍了如何使用MATLAB的Parallel Computing Toolbox进行并行计算,包括在交互模式下将简单for循环转换为parfor并行循环,以及如何设置批处理作业。通过parfor实现并行计算,提升处理大量数据或重复任务的效率,同时讲解了批处理作业的创建、结果获取和清理过程。
3万+

被折叠的 条评论
为什么被折叠?



