matlab下的并行循环

举报
叶安义 发表于 2023/12/25 08:40:15 2023/12/25
【摘要】 我们知道,matlab 更适合的处理对象是矩阵,而不是大规模的循环运算。当有时不得不使用 for 循环时,如果提高 for 循环的执行效率呢。这就是 parfor 的用武之地了,既然是并行运算,就是一次可以执行多次 iterations 处理(类似于操作系统的多线程作业),以加快循环的速度。与传统 for 循环最大的不同在于,parfor 执行迭代时并不按照一个确定的顺序(因此,需要求不同的...

我们知道,matlab 更适合的处理对象是矩阵,而不是大规模的循环运算。当有时不得不使用 for 循环时,如果提高 for 循环的执行效率呢。这就是 parfor 的用武之地了,既然是并行运算,就是一次可以执行多次 iterations 处理(类似于操作系统的多线程作业),以加快循环的速度。与传统 for 循环最大的不同在于,parfor 执行迭代时并不按照一个确定的顺序(因此,需要求不同的迭代之间,彼此独立,不存在 A(i) = A(i-1)/A(i+1) 的情况,)。

i=1:100000;
j=1:100000;
Y=0;
parfor i=1:100000
    for j=1:1:100000
        Y=Y+i+j;
    end    
end

parfor注意事项?

  • matlab默认是不能在parfor里面使用save函数的。因为matlab不知道要把工作区的哪个变量保存到内存中。但是有时候,你的实验里确实需要保存中间的结果,那么matlab还是有解决方案的:1)你可以将需要保存文件的操作放进另一个函数里进行操作,然后再当前的parfor循环体内调用这个函数parsave[1, 2](链接中有具体的代码参考)。2)你也可以不用save的操作,在需要保存的数据后断点,然后自己实现保存操作。
  • 用parfor循环的下标必须为连续的递增整数。
    ————————————————

图形化使用方法

简单步骤如下:

1.点击matlab最底下左边的正三角标号,选择“start parallel pool”(当然用其他方式开启也可以);

2.将符合条件的循环for改成parfor即可开始并行运算。

3.payfor不可循环嵌套

parfor要求循环中的数据没有上下依赖,每个循环之间相互独立,这样才能在多个处理器上运行并行任务。

% 读取数据
path1="C:\Users\32649\Desktop\nc\test\Brother\+0.1\differ_+0.1.nc";
nlat=double(ncread(path1,'lat')); %读取纬度变量,为二维数据省略meshgrid
nlon=double(ncread(path1,'lon')); %读取经度变量
pr=double(ncread(path1,'discharge')); %获取变量数据
[mlat,mlon]=meshgrid(nlat,nlon);
mkdir('img') %创建img子文件夹
par=parpool('local', 6); %设置6个处理器
% 展示
parfor day=1:size(pr,3) %展示第几层的数据,数据依赖于nc文件,层数代表时间`
    m_proj('miller','lon',[85 131],'lat',[18 38]); %设置投影方式,经纬度范围,经纬度范围可以提前在arcgis中查看(这里对应的经度:85-131;纬度:18-38m_contourf(mlon,mlat,pr(:,:,day),'linestyle','none'); 
    % colormap(flipud(m_colmap('hsv')));%设置颜色legend
    color=cbrewer2('div','RdBu',10,'linear');% 生成PuBu的配色方案的color矩阵,10就是把色带分为10colormap(color);%将color配色用于colormap
    hold on
    m_coast('line','Color', [.5 .5 .5]);% 只保留轮廓线
    % m_grid('linestyle','none','box','fancy','tickdir','out','LineWidth',0.5); %设置网格
    m_grid %设置网格
    colorbar;
    % set(gca,'CLim',[-60,20]) %指定颜色范围,这里是-6020
    title(['time: ', num2str(day)]) %设置标题
    hold off
    saveas(gcf, ['img\', num2str(day), '.jpg'])
end

参考文章:Matlab并行计算(新手)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。