用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等语句;文章来源:https://www.toymoban.com/news/detail-436650.html
4.不能引入load global eval等特殊语句文章来源地址https://www.toymoban.com/news/detail-436650.html
到了这里,关于MATLAB并行加速方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!