博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Matlab parfor-loop并行运算
阅读量:5264 次
发布时间:2019-06-14

本文共 1428 字,大约阅读时间需要 4 分钟。

Matlab中的并行运算常用的有 parfor-loop代替for-loop加速计算,这里parfor就是parallel的意思。

client把任务分配给多个workers,在一个循环中同时运行,等所有workers运行完返回结果,然后对结果进行整合。
一个迭代就是指执行一次循环体。每一个worker独立地按照一定的次序迭代。

官方原图:

官方原图
parfor 把for循环中的迭代分成多个部分同时运行。这里有两个问题:
(1)什么样的任务能够拆分并行运行?
(2)怎么拆分?
(3)怎么把for-loop改写成parfor-loop

关于第一个问题:什么样的任务能够拆分并行运行?

每一个迭代是独立的,就是说上一个循环的结果对下一个循环的结果没有影响。下面给出的例子就不行,在计算b(i1)b(i−1)时要用到上一次迭代的结果a(i1)a(i−1).

ticntasks = 200;A = 500;a = zeros(ntasks);for i = 1:ntasks     a(m) = max(abs(eig(rand(A))));    if i > 2    b(i) = a(i)+a(i-1);    endendtoc

改成parfor时出错

ticntasks = 200;A = 500;a = zeros(ntasks);for i = 1:ntasks     a(i) = max(abs(eig(rand(A))));    if i > 2    b(i) = a(i)+a(i-1);    endendtoc

error

关于第二个问题:怎么拆分?

这里介绍parfor这个函数的参数

parfor loopVar = initVal:endVal; statements; endparfor (loopVar = initVal:endVal,M); statements; end

这里M指定多少个worker,一般系统默认把可以使用的都用上。

loopVar,initVal,endVal与for循环一样的。

endVal 可以理解为把整个任务分为几个部分去运行,endVal 可以大于电脑的核数或者说worker。
所以这个函数并没有说明是怎么拆分数据的。
官方的说法:Loop iterations are executed in parallel in a nondeterministic order.
可以理解为随机拆分执行吗?

关于第三个问题:怎么把for-loop改写成parfor-loop

ticn = 200;A = 500;a = zeros(n);for i = 1:n    a(i) = max(abs(eig(rand(A))));endtoc
ticn = 200;A = 500;a = zeros(n);parfor i = 1:n    a(i) = max(abs(eig(rand(A))));endtoc

time

查看给每一个worker分配的数据:

ticticBytes(gcp);n = 200;A = 500;a = zeros(n);parfor i = 1:n    a(i) = max(abs(eig(rand(A))));endtocBytes(gcp)toc

massages


参考:

转载于:https://www.cnblogs.com/siucaan/p/9623184.html

你可能感兴趣的文章
springboot + mybatis
查看>>
awk 统计
查看>>
CSS min-height 属性
查看>>
SDN第一次作业
查看>>
模板设计模式的应用
查看>>
【井字游戏】做一款回忆童年的游戏
查看>>
数据结构(二):栈
查看>>
实训第五天
查看>>
平台维护流程
查看>>
SQL (FMDB)
查看>>
2012暑期川西旅游之总结
查看>>
Linux发行版的排行
查看>>
宾得镜头大全与发展史
查看>>
spread+wackamole打造全新高可用+负载均衡
查看>>
Xcode 快捷键及代码格式化
查看>>
12010 解密QQ号(队列)
查看>>
Docker简明教程(以安装wget程序为例)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
daydayup2 codeforces143C
查看>>