matlab 多核并行编程

本文介绍了MATLAB中的并行计算工具箱,特别是parfor循环的使用。parfor允许在多核环境下并行执行循环任务,提高计算效率。文章详细讲解了parfor的原理,要求循环体之间相互独立,不相互依赖。此外,还讨论了parfor中的变量类型,如简约变量、切片变量、临时变量、广播变量等,并给出了配置worker和解决常见问题的建议。
摘要由CSDN通过智能技术生成

在使用matlab处理大数据,编程需要注意两个问题:并行运算和释放内存。matlab也提供了并行计算的功能,甚至能用GPU加速。并行计算工具箱,叫做parallel computing toolbox.它的使用方法,可以从matlab的帮助获得。
Parallel Computing Toolbox(并行计算工具箱)中加入了并行循环parfor-loops,对于每一步可以独立于其他步的循环,计算效率可以有较大幅度的提高。以前简单的for循环for-loop是顺序的(sequentially)执行每一步循环体(statement),parfor-loop是通过将各个循环体分配到不同的节点上进行并行计算。所以parfor的要求是循环体之间相互独立,结果各不影响,Matlab的编辑器会自动帮你检查循环体的结果是否影响
当你初始化一个matlab进程时,这个进程被称为Matlab Client,它起着和用户交互和调度的作用。在并行计算工具箱中,通过matlabpool可以打开多个matlab进程,这些进程被称为Matlab Worker。并行循环parfor-loop的各个循环就是随机的分配到这些Matlab Worker上进行同时的计算。最后再返回给Matlab Client. 在一个多核桌面上可以本地同时运行四个 worker ,如果与 MATLAB Distributed Computing Server 集成,就可以使用集群中任意数量的机器作为worker了。
parfor就是paralle+for,也就是并行的for循环,怎么个并行法?简单理解就是,matlab会弄出几个虚拟的小pc,比如一个算i=1:50部分循环,一个算i=51:90部分循环,再来一个算i=91:100部分循环,当然数字是瞎编的,这主要想说matlab将一个大循环分成小块,然后这些小块并行计算,最后再合在一起。这样有一个问题,因为普通的循环是从i=1算到i=100,一个接一个算,如果下一次循环要依赖上一次循环怎么办?如果出现这种情况,那就不能用matlab的parfor了。用parfor的前提条件就是,循环的每次迭代独立,不相互依赖。

parfor关键字的使用

(1). 由于for关键字引导的循环通常为串行运行,如果改为parfor则可以由多个worker以并行方式执行。
(2). parfor可以将n次循环分解为独立不相关的m部分,然后将各部分分别交给一个worker执行。
(3). 循环执行的结果应该与n次循环执行的顺序无关。

parfor中的变量类型

(1). 简约变量
一般parfor中各次循环对应的运算应该相互独立,但简约操作可以在多次循环内同时对一个变量操作。这种变量称为简约变量。例如下方代码中a就是简约变量。

a = 0;
for i = 1:1000
  a = a+i;
end

简约操作包括+ - * .* & | [,] [;] {,} {;} min max union intersect。
同一个parfor循环对简约变量的操作必须一致,即必须是同一种简约操作符。而且与操作符的相对位置也必须一致。
简约变量赋值表达式应该满足结合律和交换律。* [] {}底层有特殊处理保证结果的正确性。

(2). 切片变量
parfor中可能需要读取或写入parfor之外的矩阵,读取写入位置与循环变量相关。这样就需要向worker传输大量的数据。
矩阵如果被Matlab识别为切片变量,则数据可以分段传输到各worker,提高传输效率。
切片变量矩阵的大小是不可在parfor中改变的,且为了保证Matlab识别正确,每次循环中只能读取由同一个索引值索引的切片,如a[i] a[i+1]同时出现则a不被识别为切片变量。

(3). 临时变量
作用域局限于parfor内,parfor结束后不存在。不影响parfor之前声明的同名变量。

(4). 循环变量
如上例中的i,表示当前循环的id。

(5). 广播变量
在parfor之前赋值,在parfor内只进行读取操作。

(6). 各种变量区分的例子
下例中,parfor中的tmp是临时变量,parfor结束后tmp的值依然是5,不受临时变量的影响。
broadcast是广播变量,每次循环中的值不变。
redued是简约变量,Matlab对其的值将分段由各worker计算后送回主进程处理。
sliced为切片变量,数据传输有优化提升。
i为循环变量

tm
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值