matlab中parfor函数
2016-01-05 10:57
337 查看
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了。
parfor就先解释到这里,其实它涉及到的东西远不止这些,而且感觉很令人纠结,如果你的C++很好,那就直接用C++吧!如果你还是想用matlab做并行,那就可以继续向下看看我的一些经验。
首先我是做图像处理的,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
要注意一点的是k是按照列来数的,也就是这样
1 4 7
2 5 8
3 6 9
所以,行号和列号别算错了。这样其他代码就可以不变了。
还需要注意的一点就是就是,如果对矩阵f的每个像素计算的点值要赋值给矩阵g。这个g要在循环外面声明好,而且要固定大小,在parfor循环里面最好也是向量,而非矩阵。计算完成后再用vec2mat函数转换为矩阵,这个函数之后,可能还需要个转置才能得到你需要的结果。
转自:http://blog.sina.com.cn/s/blog_76c76c190101c6d2.html
parfor就先解释到这里,其实它涉及到的东西远不止这些,而且感觉很令人纠结,如果你的C++很好,那就直接用C++吧!如果你还是想用matlab做并行,那就可以继续向下看看我的一些经验。
首先我是做图像处理的,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
要注意一点的是k是按照列来数的,也就是这样
1 4 7
2 5 8
3 6 9
所以,行号和列号别算错了。这样其他代码就可以不变了。
还需要注意的一点就是就是,如果对矩阵f的每个像素计算的点值要赋值给矩阵g。这个g要在循环外面声明好,而且要固定大小,在parfor循环里面最好也是向量,而非矩阵。计算完成后再用vec2mat函数转换为矩阵,这个函数之后,可能还需要个转置才能得到你需要的结果。
转自:http://blog.sina.com.cn/s/blog_76c76c190101c6d2.html
相关文章推荐
- 说说wavedec2函数
- matlab2013b调用cpp文件,mex,VS2013配置问题
- matlab2013b 安装教程
- "Gradient Domain Guided Image Filtering"论文中边缘权重函数matlab实现代码
- Matlab 原始txt分裂为新的txt文件
- matlab显示的图片,手动保存时四周有白边
- MatLab安装中出现的问题
- SIFT特征提取-应用篇
- Matlab除法结果取整
- Matlab直方图法去雾
- MATLAB调用c/c++ MATLAB c/c++混编
- matlab练习程序(碎片)
- Matlab lugui
- matlab中find函数的使用说明
- matlab中figure是什么意思
- matlab中的rand函数
- matlab中sort函数的用法
- matlab中repmat函数的用法
- MATLAB中多行注释的三种方法
- matlab plot函数画线,线型和颜色