罗兰关于MATLAB的艺术

将想法转化为MATLAB

parfor课程

开始发布R2007b,在MATLAB中有多种方法来利用较新的硬件。在MATLAB中,您可以从使用多线程中受益,
这取决于你做的是什么计算。如果你有机会分布式计算工具箱,你有一组额外的可能性。

内容

问题设置

让我们计算不同大小的幻方矩阵的秩。每一个秩的计算都是独立的。

n = 400;ranksSingle = 0 (1, n);

因为我想比较一些速度,我有一个双核笔记本电脑,我将运行目前使用单处理器使用
新功能maxNumCompThreads

maxNumCompThreads (1);抽搐ranksSingle(ind) = rank(magic(ind));结束toc阴谋(1:n, ranksSingle“这”1: n, 1: n,“m——”
运行时间为22.641646秒。

放大,你可以看到一个模式与奇数顺序魔术方块有满秩。

轴([250 280 0 280])

因为每一个秩计算都是独立于其他的,我们可以将这些计算分配到很多
所有处理器同时运行。

并行版本

使用分布式计算工具箱,您可以使用多达4个本地工作人员的原型并行算法。这是什么
排序计算的算法。parMagic使用parfor,一个用于独立执行循环的新构造。它是MATLAB语言的一部分,但行为本质上
如常规的for循环,如果您没有访问分布式计算工具箱。

dbtypeparMagic
1 . parMagic(n) = parMagic(n);5 rank(ind) = rank(magic(ind));% last index可以是ind,而不是n-ind+1 6 end

运行并行算法并进行比较

让我们运行并行版本的算法parMagic仍然使用单个进程,并将结果与原始的for循环版本进行比较。

tic ranksSingle2 = parMagic(n);toc isequal (ranksSingle ranksSingle2)
运行时间为22.733663秒。ans = 1

本地并行运行

现在,让我们利用我笔记本电脑的两个核心,创建一个工作人员池,使用它来进行计算
matlabpool命令。

matlabpool当地的2tic ranksPar = parMagic(n);toc
要了解更多关于matlabpool、分布式数组和相关并行算法的功能和限制,请使用doc matlabpool。我们对您关于这些功能的反馈非常感兴趣。请发送到parallel_feedback@mathworks.com。向调度程序提交并行作业,等待它启动。连接到2个实验室的matlabpool会话。运行时间为13.836088秒。

比较

我们得到相同的答案了吗?

isequal (ranksSingle ranksPar)
ans = 1

事实上,我们做到了!挂钟的时间也加快了很多,虽然不是2的倍数。

让我把matlabpool来完成这个例子。

matlabpool关闭
向所有实验室发出停止信号…等待并行作业完成…执行并行作业清理…完成了。

当地工人

使用分布式计算工具箱,我可以使用多达4个本地工人。那么为什么我选择只用2呢?因为在双核上
机器,这说不通啊。但是,在没有池的情况下运行,然后使用大小为1、2和,
也许4可以帮助我确保我的算法准备好并行运行,也许接下来是一个更大的集群。另外做某事
需要MATLAB分布式计算引擎。

parfor和matlabpool

matlabpool在后台开始2个本地matlab工作者。parfor在当前的“常规”matlab中决定了如何进行除法parfor范围在2中matlabpool工人们进行计算时。要了解更多关于代码的约束parfor在循环中,我建议您阅读关于变量分类的文档部分。

您可以访问集群吗?

我想知道您是否可以访问集群。你能在代码中看到可以利用并行性的地方吗
你能接触到合适的硬件吗?请让我知道在这里

MATLAB®7.5发布

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。