MATLAB并行加速方法

用MATLAB运行计算任务时,有时会遇到程序中有很多重复计算部分,多次循环中,每一次的计算之间无相互依赖(即后一次的计算不需要使用到前一次的计算结果),可能仅改变了输入参数,这时候如果串行计算效率十分低下,因此我们希望能够使用多线程进行加速。本文给大家介绍一种简易MATLAB加速方法。

1.Parallel Computing Toolbox简介

Parallel Computing Toolbox是一个matlab自2011版开始提供的工具箱,用于提供交互式的并行计算功能。

Parallel Computing Toolbox可以在多处理器计算环境中使用 MATLAB 和 Simulink 解决计算、数据密集型问题。使用工具箱可以解决通过装配多个处理器包含几个单独工作单位或单个大型计算的问题。

利用并行计算工具箱(Parallel Computing Toolbox),可在多核和多处理器计算机上使用 MATLAB 和 Simulink 来解决计算问题和数据密集型问题。并行处理结构包括并行 for 循环和代码块、分布式数组、并行数值算法,以及消息传递函数等,并以较高的级别在 MATLAB 中执行任务及数据并行算法,而无需为特定的硬件和网络架构编写程序。这样,将串行 MATLAB 应用程序转换为 并行 MATLAB 应用程序,便几乎不需要修改代码,且不需要使用低级语言编写程序。

2.使用方法

此方法只需要简单修改程序即可完成并行计算。通过脚本测试,可以有效提升运算速度。

首先我们需要安装Parallel Computing Toolbox工具箱。

2.1 并行参数设置

可以通过在matlab中输入以下指令查看电脑可以最大支持几个线程

N = maxNumCompThreads

 2.2 测试脚本

然后通过以下两段简单测试代码,即可明白如何使用。

第一段是正常的for循环运行,随机产生两个1000*1000的随机矩阵,然后进行对应元素相乘。

tic
for i=1:10000
    a1=rand(1000,1000);
    a2=rand(1000,1000);
    a3=a1.*a2;
end
toc

第二段代码则是采用本方法进行并行加速,首先声明poolSize=8表示进程池中将开8个进程对计算任务进行并行加速,然后通过parpool('local',poolSize);创建进程池,然后将需要加速的for循环代码段改成parfor,最后程序执行完,不要忘记delete(gcp('nocreate'))关闭进程池,否则下次运行程序会出现问题。

clc
clear
poolSize = 8
 
p=parpool('local',poolSize);
tic
parfor i=1:10000
    a1=rand(1000,1000);
    a2=rand(1000,1000);
    a3=a1.*a2;
end
toc
delete(p);

 2.3 结果分析

打开任务管理器我们可以看到8个cpu同时在执行计算任务。从最后的计算结果我们可看到,两段代码同样for循环10000次,通过本方法加速后的程序只需要40s即可执行完毕,而普通的程序则需要156s,速度提升了近4倍。

注意:最新几个版本的Matlab已经将并行处理的工具包 parallel pool自动打开,我们只需要要将程序中的for改为parfor即可实现并行化处理。


 

3.并行计算工具箱使用注意事项

1.计算任务之间和循环之间需要独立

并行处理的计算操作需要是相互独立的,例如不能并行计算结果有先后依赖的。

2.不能嵌套parfor循环(可以一个用for,一个用parfor,或者通过矩阵运算减少for的嵌套次数)

3.不能含有break或者return等语句;

4.不能引入load global eval等特殊语句

  • 9
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能优化_数据分析_AI算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值