matlab parfor不能用,Matlab 的 parfor 的使用条件

parfor适用于

大量的简单计算的循环。

大量或少量的复杂计算的循环。

不建议在少量的简单计算的循环中使用 parfor ,因为 parfor 本身有计算的损耗。

同时有很多情况不能使用 parfor ,此时 Matlab 会报错。那到底什么情况下可以用什么情况下不能用呢?这需要从 Matlab 的 parfor 循环机制讲起。Matlab 的 parfor 循环内的变量可分为五大类, parfor 对这五类变量有不同的处理方式。如果 Matlab 无法对 parfor 内的某变量进行归类,或者该变量不满足该类别变量的要求,就会导致出错,此时便不能使用 parfor。

具体而言, Matlab 的 parfor 循环内的变量可分为以下五类:

a5389ad078962cd2d3e7cafaed4b0a8b.png

1、Loop 变量,顾名思义无需多解释。一个限制是循环内不能对循环变量再次赋值:

parfor i = 1:n

i = i + 1; % not allowed

a(i) = i;

end

2、Sliced 变量,是指每个循环只访问该变量的特定位置,具体访问位置跟 Loop 变量有关。一个比较简单的理解方式是,循环访问变量的位置必须是「固定」「不重合」的。如果该变量是输出变量(即在循环内被赋值),访问还必须是「连续」的(此时只能是 Loop 变量再加固定的平移量)。该变量不能在循环内动态变换大小。因此有以下的可行以及不可行的情况:

parfor i = 1:n

x(i) = a(2*i*i); % allowed;

y(i+2) = a(i) + b(i+1); % allowed;

c(i+1) = c(i) + 1; % not allowed;

z(2*i) = i; % not allowed;

a(i) = []; % not allowed;

a(end+1) = i; % not allowed

end

3、Broadcast 变量,是指外部变量,且在循环内未被重新赋值。

4、Reduction 变量,该变量遍历所有循环,并且跟运行结果无关。Matlab 会自动识别该类变量,并正确输出结果。如下例所示, Matlab 会按正确顺序输出 x2 :

x2 = [];

n = 10;

parfor i = 1:n

x2 = [x2, i];

i,

end

有意思的是,上面这段代码里, i 并不一定按照 1 到 10 的顺序输出,但 x2 的结果却必然是 1 到 10。

5、temporary 变量,是指循环内的临时变量,且该变量不会通过 Loop 变量引用(否则该被归类到 Sliced 变量)。

Q. E. D.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值