广州市乐趣网络有限公司
首页 | 联系方式 | 加入收藏 | 设为首页 | 手机站

产品目录

联系方式

联系人:业务部
电话: 00132-123456
邮箱:service@zhengfengdq.com

当前位置:首页 >> 新闻中心 >> 正文

Matlab并行计算示例(一)

字号:
摘要:Matlab并行计算示例(一)

使用Matlab实现算法较为简单,但是涉及for循环时,效率比不上C++。对于一个多核处理器,不开多核并行计算,实在是对不住Matlab自带的并行计算功能。parfor循环较为简单,但是它对for循环中的变量要求比较严格,稍有不慎就会出错(我深受其害)。使用Matlab Toolbox中的createJob/createTask可以实现多线程的并行计算,其功能与C++中CreateThread类似。这样的并行计算对函数中的变量要求就没有那么严格。

Matlab 2010和2014的调用函数略有差异,下面列出分别列出一个示例。

1、Matlab 2010

slave_num = 2;
jm = findResource;
jm.DataLocation = './cache';
if ~isempty(jm.jobs)
 destroy(jm.jobs)
end
if ~exist(jm.DataLocation, 'file')
 mkdir(jm.DataLocation)
end
sub_list = cell(2, 1);
sub_list{1} = [2, 1];
sub_list{2} = [3, 4];
job = createJob(jm, 'PathDependencies', {jm.DataLocation});
for i = 1:slave_num
 createTask(job, @min, 1, {sub_list(i)});
end
submit(job);
waitForState(job, 'finished');
destroy(job);

2、Matlab 2014

clear all,
close all,
clc,
slave_num = 2;
c = parcluster(); % Create cluster object
job = createJob(c);
sub_list = cell(2, 1);
sub_list{1} = [2, 1];
sub_list{2} = [3, 4];
for i = 1:slave_num
 createTask(job, @min, 1, {sub_list(i)});
end
submit(job);
wait(job);
out = fetchOutputs(job);

上面两个示例实现的是同一个功能,即并行计算两个向量的最小元素。开头和最后的对象声明和结果提取使用的函数不同,中间创建任务的函数基本相同。对较少的任务,并不能节省很多时间,有时反而会增加时间开销;但是当任务较多时,并行计算就会体现出它的优势,充分利用多核CPU。

Matlab 博大精深,createJob/createTask只是Matlab并行计算中很小的一部分,还有诸如:parfor, batch, spmd, 这些还没有仔细研究过,有时间需要进一步深入学习。


【参考文献】:

1、http://blog.csdn.net/abcjennifer/article/details/17610705

2、http://wenku.baidu.com/view/d2db68da6f1aff00bed51ecf.html

官方文档:

3、入门版

4、详细版