Matlab的parfor的使用条件

Matlab的parfor的使用条件 « 阅微堂 var duoshuoQuery = {"short_name":"zhiqiang","sso":{"login":"http:\/\/zhiqiang.org\/blog\/wp-login.php?action=duoshuo_login","logout":"http:\/\/zhiqiang.org\/blog\/wp-login.php?action=logout&_wpnonce=7821c15e3b"},"theme":"default","stylePatch":"wordpress\/"}; duoshuoQuery.sso.login += '&redirect_to=' + encodeURIComponent(window.location.href); duoshuoQuery.sso.logout += '&redirect_to=' + encodeURIComponent(window.location.href); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "//hm.baidu.com/hm.js?4aeb7949cc92dd0d749965d396a00d2f"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _speedMark = new Date();

Matlab的parfor的使用条件

作者:张志强, 发表于

parfor适用于

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

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

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

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

matlab parfor 变量分类示意图

matlab parfor 变量分类示意图

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.


上一篇:Matlab打开和关闭时自动执行的脚本2014年7月16日
Matlab在启动时会自动运行脚本startup.m。在这个脚本里可以自动修改当前目录,修改显示方式等等。比如 cd Z:/ format compact format short g 同样,Matlab在退

下一篇:使用Matlab的函数包实现命名空间2014年8月16日
在写Matlab程序时,函数的命名方式让人头疼。使用+mypack的方式可以创建函数包,实现函数命名空间。这种方式函数调用的开销为1秒钟10万次,比普通方式要慢20倍。



if (typeof DUOSHUO !== 'undefined') DUOSHUO.EmbedThread('.ds-thread');
    • 支持使用微薄、人人网和QQ的账户登陆进行评论。由各自网站直接认证,不会泄露你的密码。
    • 登陆后可选择分享评论到所绑定的社交网络,如微薄、人人和QQ空间。
    • 评论提交后无法修改。如需修改,请删除原评论再重新提交。
    • 评论支持LaTeX代码,行内公式请用\(a+b=c\),行间公式请用\[a+b=c\]。公式只支持英文字符。
    评论 2
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值