parfor并行循环函数简析

parfor并行循环函数简析

觉得有用的话,欢迎一起讨论相互学习~

我的微博我的github我的B站

原文地址
http://blog.sina.com.cn/s/blog_76c76c190101c6d2.html

  • google中输入matlab parfor,你将得到足够多的资料来了解这是个什么东西,如果你耐心,建议去研究研究matlab 帮助中对parfor的说明。这里我只大概讲一下parfor。parfor就是paralle+for,也就是并行的for循环,怎么个并行法?我理解就是,matlab会弄出几个虚拟的小pc,一个算i=1:30部分循环,一个算i=50:80部分循环,再来一个算i=90:120部分循环,当然数字是我瞎编的,我是想说matlab将一个大循环分成小块,然后这些小块并行计算,最后再合在一起。

  • 这样,有一个问题,因为普通的循环是从i=1算到i=100,一个接一个算,如果下一次循环要依赖上一次循环怎么办?如果出现这种情况,那就不能用matlab的parfor了。用parfor的前提条件就是,循环的每次迭代独立,不相互依赖。举个简单的例子,计算1+2+3...+100就可以用parfor,但是如果计算斐波那契数列的前100个数字,那就不能用parfor了。

  • 首先我是做图像处理的,1000多个图像,如果直接算可能要算上1天,所以我想用matlab的并行。我们都知道数字图像可以看成矩阵,我们经常用for循环里面再加一个for循环来处理,但是parfor循环不能嵌套。那么原来的

for i=1:N

  for j=1:M

  end

end

就必须改成

parfor i=1:N

  for j=1:M

  end

end

或者

for i=1:N

  parfor j=1:M

  end

end

但是,这都不是最好的方法,因为如果循环的次数太少,并行就显现不出威力来,所以最好的方法是这样:

for k=1:M*N

  i=mod(k-1,M)+1    %行号

  j=floor((k-1)/M)+1     %列号

end
posted @ 2020-04-15 19:30  WUST许志伟  阅读(1450)  评论(0编辑  收藏  举报