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发表
- 类别:
- 新功能