MATLAB 并行计算 parfor 用法及注意事项

这篇具有很好参考价值的文章主要介绍了MATLAB 并行计算 parfor 用法及注意事项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在用MATLAB做工作空间计算,for循环次数较多,运算非常慢,同学说可以使用并行计算,于是尝试,大开眼界。

一、使用方法

参考文章:Matlab并行计算(新手)_a99h的博客-CSDN博客

在较新版本的matlab中,不需要使用p=parpool(n)来手动开启线程池,操作变得更简单。

1. 首先,设置线程数量

(注:MATLAB 2023a已经不需要设置线程数量了,这一步可以直接跳过)

在任务管理器中查看cpu的线程数量:

按 ctrl+shift+esc 打开任务管理器,点击性能 -> cpu

matlab并行,matlab,开发语言

 在折线图那里右键将图形更改为逻辑处理器,就可以看到cpu每个线程的利用率;我的电脑是12核20线程,因此有20个小窗。记住这个线程数。

在MATLAB中点击主页 -> 预设 -> parallel computing Toobox, 调整parallel pool下面的数字,最大不能超过刚才在任务管理器里看到的最大线程数。如果给的太大,系统其他软件可能会卡死,所以别太大,克制一点。

matlab并行,matlab,开发语言

 matlab并行,matlab,开发语言

 这样,线程池的线程数量就设置好了。

2. 然后在代码中将 for 改为 parfor

例:

原代码:

a = randn([1,1000]);
for i = 1000
    a(i) = a(i)^2;
end

修改为 parfor:

a = randn([1,1000]);
parfor i = 1000
    a(i) = a(i)^2;
end

二、注意事项

注:parfor是并行计算,同时计算多个线程,因此不能在内部打断点调试,在里面输出变量时也不会在命令行显示。我在计算时使用了 try, 也可以使用pause(1)来定位出错的位置:当pause(1)生效时,pause(1)所在行之前的代码可以认为是没出错的。

parfor 的使用存在很多限制,下面一一说明。

parfor循环要求:

  1. 任务间必须独立
  2. 循环间次序独立

循环体的限制:

  1. 不能引入变量(eg.eval,load,global,etc.)
  2. 不能含有break或return声明
  3. 不能嵌套另外的parfor循环

1. 每次循环之间不可以有依赖于别的循环计算出的结果。

2. 交换循环的次序不影响每次循环的结果

针对以上两条,举例:使用10线程计算,则 i=1,2,3,...,10 的循环可能是同时进行的。若不独立,则会出现错误。

3. 不能使用全局变量,这是因为若某次循环中改变了全局变量的值,可能导致其他正在进行的线程的该变量值也发生变化从而引发混乱,因此禁用全局变量。

4. 亲测可以使用load, 只是load的结果要赋值给循环内新声明的变量,例:

    % 导入数据
    data_name = strcat('X:/data_1/data/',num2str(process_i));
    load_data = load(data_name);

5. 在使用并行计算时,可以认为循环内不在工作区内生成数据。因此,所有需要调用外部函数的命令都要将需要的变量传递给外部函数

6. parfor内不能使用save 保存变量,但是可以将save写到外部函数后调用,例如,我想保存工作区里的变量值,则可以创建新函数,在parfor里调用parsave即可:

function parsave(data_name, data)
    save(data_name, 'data');
end

7. parfor里画图是不会弹出图窗的,可以通过保存 fig (或jpg等格式)文件记录图窗:

    plot(x,y)    % 画图   
    fig_name = strcat('X:/data_1/figs/00_90_processed/',...
            num2str(process_i),'.fig');    %生成图像名称
    saveas(gcf,fig_name);    % 保存图像

8. parfor内部的for循环不能直接使用 j=j+1文章来源地址https://www.toymoban.com/news/detail-695606.html

% 下面的代码是不允许的
parfor i=1:10000
    for j = 1:200
        j=j+1;
    end
end

% 可以声明一个新的变量曲线救国
parfor i=1:10000
    for j = 1:200
        a = j;
        a=a+1;
    end
end

到了这里,关于MATLAB 并行计算 parfor 用法及注意事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是hive的高级分组聚合,它的用法和注意事项以及性能分析

    hive的高级分组聚合是指在聚合时使用GROUPING SETS、CUBE和ROLLUP的分组聚合。 高级分组聚合在很多数据库类SQL中都有出现,并非hive独有,这里只说明hive中的情况。 使用高级分组聚合不仅可以简化SQL语句,而且通常情况下会提升SQL语句的性能。 示例: Grouping sets的子句允许在一个

    2024年02月11日
    浏览(48)
  • 完全指南:mv命令用法、示例和注意事项 | Linux文件移动与重命名

    什么是 mv 命令? mv 命令是Linux和Unix系统中的一个常用命令,用于移动文件或重命名文件。它可以将文件从一个位置移动到另一个位置,也可以修改文件的名称。 mv 命令的作用和功能是什么? mv 命令主要有两个作用:移动文件和重命名文件。通过使用 mv 命令,您可以将文件

    2024年02月05日
    浏览(47)
  • Matlab转Python 画图pcolormesh的使用及一些注意事项

    今天想把matlab一段画图代码转为python,使用到了colormap,尝试了一下午,将结果以及一些注意事项记录下来,算作学习笔记了。 先上matlab原代码 结果如下: 注意: 在pcolormesh函数使用过后,就必须要设置xlim或者ylim,然后再使用colorbar的函数,否则设置ylim会导致语句无效,不

    2024年02月06日
    浏览(42)
  • Java对文件的写入和读取 (File类详解以及Input,OutputStream用法,注意事项)

    Java中,操作文件的类有很多, 核心的部分是File类,InputStream,OutputStream类 我们先来看看 File 类中的常见属性、构造方法和方法 属性 修饰符及类型 属性 说明 static String pathSeparator 依赖于系统的路径分隔符,String 类型的表示 static char pathSeparator 依赖于系统的路径分隔符,char 类型的

    2024年02月09日
    浏览(39)
  • @NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor的区别和@Data和@Builder的用法以及在idea中使用的注意事项

    1、区别         @NoArgsConstructor:注解在类上,为类提供一个无参的构造方法。         @AllArgsConstructor:注解在类上,为类提供一个全参的构造方法         @RequiredArgsConstructor:注解在类上,会生成构造方法(可能带参数也可能不带参数)。注意:@RequiredArgsConstr

    2024年04月26日
    浏览(38)
  • 第一次参加计算机会议报告注意事项以及心得

    接下来的会议注意事项分为:(1)参会前,(2)参会中,(3)参会后 参会前,一般被邀请参加会议的有两种情况,一种是中了paper的,另一种是投poster的。接下来主要是说中了paper的情况,应该准备些什么。 准备好演讲的 PPT , 并预汇报至熟练脱稿. 特别是PPT的逻辑需要特别

    2024年02月13日
    浏览(53)
  • 计算机二级C语言的注意事项及相应真题-5-程序修改

    给定程序modi1.c的主函数中,将a、b、c三个结点链成一个单向链表,并给各结点的数据域赋值,函数fun()的作用是:累加链表结点数据域中的数据作为函数值返回。 请改正函数fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改

    2024年02月21日
    浏览(37)
  • 学习Linux的注意事项(使用经验;目录作用;服务器注意事项)

    本篇分享学习Linux过程中的一些经验 Linux严格区分大小写 Linux中所有内容以文件形式保存 ,包括硬件,Linux是以管理文件的方式操作硬件 硬盘文件是 /dev/sd[a-p] 光盘文件是 /dev/sr0 等 对于设置需要写入文件,命令行的设置在重启之后就会失效,只有下入文件才可以保存下来 文

    2024年02月11日
    浏览(69)
  • 弱电线布线注意什么?弱电线布线的注意事项

    弱电 弱电一般是指直流电路或音频、视频线路、网络线路、电话线路,直流电压一般在36V以内。家用电器中的电话、电脑、电视机的信号输入(有线电视线路)、音响设备(输出端线路)等用电器均为弱电电气设备。 弱电线的种类如:电话线、网络线、有线电视线及音响线

    2024年02月07日
    浏览(44)
  • RabbitMQ开发注意事项

    在使用 RabbitMQ 进行消息队列的开发过程中,有一些注意事项需要牢记: 安全性:确保正确配置 RabbitMQ 实例的安全性。限制对 RabbitMQ 服务器的访问权限,并使用安全的认证机制(如用户名和密码)来保护连接。 错误处理:在消费者端,务必处理可能发生的异常或错误情况。

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包