MATLAB并行计算解决方案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MATLAB并行计算解决方案

作者:姚尚锋刘长江唐正华

来源:《计算机时代》2016年第09期

DOI:10.16644/33-1094/tp.2016.09.021

摘要:为了利用分布式和并行计算来解决高性能计算问题,本文介绍了利用MATHWORKS公司开发的并行计算工具箱在MATLAB中建模与开发分布式和并行应用的一些方法;包括并行for循环、批处理作业、分布式数组、单程序多数据(SPMD)结构等。用这些方法可将串行MATLAB应用程序转换为并行MATLAB应用程序,且几乎不需要修改代码和低级语言编写程序,从而提高了编程和程序运行的效率。用这些方法来执行模型,可以解决更大的问题,覆盖更多的仿真情景并减少桌面资源。

关键词:建模;仿真;并行计算; MATLAB

中图分类号:TP31 文献标志码:A 文章编号:1006-8228(2016)09-73-03

Parallel computing solutions with MATLAB

Yao Shangfeng, Liu Changjiang, Tang Zhenghua, Dai Di

(Simulation Training Center, Armored Force Institute, Bengbu, Anhui 233050, China)

Abstract: For the use of distributed and parallel computing to solve the problem of high-performance computing, this article describes the use of Parallel Computing Toolbox developed by MATHWORKS Company and some methods of parallel applications, including parallel for loop,batch jobs, distributed arrays, Single Program Multiple Data (SPMD) structure. by the methods, the serial MATLAB applications can be converted to parallel MATLAB applications,and almost no need to modify the code and program in low level languages, thereby increasing the efficiency of programming and operation. Use this method to perform model can solve bigger problems, cover more simulation scenarios and reduce the desktop resources.

Key words: modeling; simulation; parallel computing; MATLAB

0 引言

用户面临着用更少的时间建立复杂系统模型的需求,他们使用分布式和并行计算来解决高性能计算问题。MATHWORKS公司开发的并行计算工具箱(Parallel Computing Toolbox)[1-5]可以在MATLAB中建模和开发分布式和并行应用,并在多核处理器和多核计算机中执行,解决计算、数据密集型问题[2],而且并不离开即使的开发环境;无需更改代码,即可在计算机

集群上运行同一个应用程序(使用MATLAB Distributed Computing Server)。并行的MATLAB应用程序也可以作为可执行程序或共享库(用MATLAB Compiler构建)分发,这些可执行程序或共享库可以访问MATLAB。

1 并行for循环

并行for循环提供了一种在多个MATLAB worker(从客户会话中单独运行的MATLAB计算引擎)间分配任务的方式。使用该循环,可以将独立的循环迭代自动分配给多个MATLAB worker。例如,100次迭代的循环可以同时在20个MATLAB worker集群上运行,从而每个worker只执行五次迭代循环,整体上提高了循环的速度。并行for循环用关键字parfor代替关键字for。parfor结构管理着MATLAB客户端与worker之间的数据和代码传输。它会自动检测是否有worker,如果没有,则还原为串行方式。

下面给出如何将一个简单的for循环修改为一个并行的for循环[1,6]。这一循环没有很多的迭代,也不需要很长时间来执行,但可以应用相似的方法到更大的循环。对于这一简单的例子,我们可能不会注意到执行速度的增加,但对于更大的循环,执行速度的增加是相当可观的。

假设用for循环创建一个正弦波并绘制波形:

for i=1:1024

A(i)=sin(i*2*pi/1024);

end

plot(A)

为了将其修改为并行for循环代码,首先按以下方式打开MATLAB池,这样将保留三个本地worker运行循环迭代。

matlabpool open local 3

然后,使用parfor修改代码运行并行for循环:

parfor i=1:1024

A(i)=sin(i*2*pi/1024);

end

plot(A)

此循环中的惟一差别是关键字parfor代替了for。循环运行后,其结果与for循环没有任何区别。任务完成后,关闭MATLAB池并释放worker。

matlabpool close

2 批处理作业

当与MATLAB客户端交互会话工作时,可以卸载工作到一个运行批处理作业的MATLAB worker。执行此任务的命令是异步的,这意味着客户端MATLAB进程不会受阻,你能继续你的交互式会话,而MATLAB worker负责处理代码。MATLAB worker可以运行在同一台机器上,或者如果使用MATLAB分布式计算服务器,也可以运行在远程集群机器上[4]。

为了卸载工作从MATLAB客户端到一个worker,可以使用批处理命令。下面的示例使用上面介绍的for循环。

首先创建和编辑文件名为mywave的文件[6];文件内容如下。

for i=1:1024

A(i)=sin(i*2*pi/1024);

end

保存文件并关闭编辑器。然后,在MATLAB命令窗口使用批处理命令在一个单独的MATLAB worker中运行脚本。

job=batch('mywave')

批处理命令不阻止MATLAB,所以你必须等待作业完成,然后才能检索和查看它的结果。

wait(job)

“load”命令将worker工作空间的变量转移到客户端工作空间,在这里你可以查看结果。

load(job, 'A')

plot(A)

最后,当作业完成,删除其数据。

destroy(job)

相关文档
最新文档