罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经退休,不会被更新。

parfor课程

开始发布R2007b有多种方法,利用MATLAB的新硬件。仅在MATLAB,你可以受益于使用多线程,
取决于你做什么类型的计算。如果你有访问权分布式计算工具箱,你有一个额外的可能性。

内容

问题设置

我们计算了各种大小的幻方矩阵的秩。每一个等级计算都是相互独立的。

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

因为我想比较一些速度,和我有一个双核笔记本电脑,现在我将竞选使用单一处理器使用
新功能maxNumCompThreads

maxNumCompThreads (1);抽搐印第安纳州= 1:n ranksSingle(印第安纳州)=排名(魔法(印第安纳州));结束toc阴谋(1:n, ranksSingle“这”1:n, 1: n,“m——”)
运行时间是22.641646秒。

放大,自营模式可以看到一个奇数阶魔术方块有满秩。

轴((250 280 0 280))

因为每个等级的计算是独立于他人,我们可以有很多的分布式计算
处理器。

并行版本

与分布式计算工具箱,您可以使用到4当地工人原型并行算法。这是什么
排名的计算算法。parMagic使用parfor新构建执行独立的通过一个循环。这是MATLAB语言的一部分,但行为本质上
就像一个普通的for循环如果你没有访问分布式计算工具箱。

dbtypeparMagic
1功能等级= parMagic (n) 2 3排名= 0 (1,n);4 parfor(印第安纳州= 1:n) 5等级排名(印第安纳州)=(魔法(印第安纳州));去年指数可能是印第安纳州%,不是n-ind 6 + 1

运行并行算法和比较

让我们运行算法的并行版本parMagic仍然使用单一过程和比较的结果与原来的for循环的版本。

抽搐ranksSingle2 = parMagic (n);toc isequal (ranksSingle ranksSingle2)
运行时间是22.733663秒。ans = 1

并行运行在本地

现在让我们利用两个核心在我的笔记本电脑,通过创建一个池的计算使用的工人
matlabpool命令。

matlabpool当地的2抽搐ranksPar = parMagic (n);toc
更多地了解matlabpool的功能和限制,分布式阵列,和相关的并行算法,使用doc matlabpool我们非常感兴趣你的反馈关于这些功能。请发送到parallel_feedback@mathworks.com。并行作业提交给调度器,等待开始。连接到一个matlabpool会话2实验室。运行时间是13.836088秒。

比较

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

isequal (ranksSingle ranksPar)
ans = 1

事实上,是我们做的!挂钟时间加快相当不错,虽然不是一个完整的2倍。

让我关闭matlabpool完成了的例子。

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

当地工人

与分布式计算工具箱,我可以使用4本地工人。为什么我选择使用2 ?因为在一个双核
机,只是没有很多意义。然而,运行没有游泳池,然后使用一个池的大小1也许,2,
也许4准备好帮助我确保算法并行运行,也许对于一个更大的集群。这样做的另外
分布式计算需要MATLAB引擎。

parfor和matlabpool

matlabpool在后台开始2当地matlab工人。parfor在当前“普通”matlab决定如何分配parfor范围在2matlabpool工人的工人进行了计算。更多地了解代码的约束,在一个工作parfor循环,我推荐你阅读文档的部分变量分类。

你有访问集群吗?

我想知道如果你有访问集群。你能看到的地方在您的代码中,可以利用一些并行如果
你能获得正确的硬件?请让我知道在这里

使用MATLAB®7.5发表

|
  • 打印
  • 发送电子邮件