如何利用多核电脑实现Matlab的并行运算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用多核电脑实现Matlab的并行运算相关的知识,希望对你有一定的参考价值。

Matlab并行运算
目前,新购置的电脑大部分都是多核的了,使用Matlab进行大量计算时如何有效利用多核呢?Matlab目前版本已经比较好的支持多核并行运算了。是用的Matlab版本是R2007b。电脑是双核的。

先简单试试:
>> matlabpool local 2
Submitted parallel job to the scheduler, waiting for it to start.
Connected to a matlabpool session with 2 labs.
显示正在进行多核配置,然后,提示连接到2个“实验室”(labs)。我这也理解的:本地虚拟出2台可以运行matlab的工作站,这样用分布式计算工具箱可以进行并行计算(matlabpool这个命令好像是在并行计算工具箱里的)。
>> testParallel
Elapsed time is 7.750534 seconds.
这里运行testParallel函数,已经开辟了2个labs,为了进行多核并行运算,testParallel中,要用parfor代替原来的for循环。
在运行这个时,观察windows任务管理器,可以发现一共有3个MATLAB.exe进程。其中一个占内存较多的,应该是主控的,他基本不干活,只负责分配,进行计算时他的cpu占用率只有1~2%,剩下两个进程专门用来计算的,跑起来各占cpu 49%左右。看上去还是每个matlab进程单核运算,但是一下开2个进程,所以能把cpu用满。当运行完testParallel后,三个进程的cpu都立刻降为1%左右了。
>> matlabpool close
Sending a stop signal to all the labs...
Waiting for parallel job to finish...
Performing parallel job cleanup...
Done.
当要关闭开辟的2个labs时,使用matlabpool close关闭即可。

代码及使用时间对比如下表:

function testParallel
%非并行
% matlabpool local 2
tic
total=10^5;
for (i=1:total)
ss(i)=inSum;
end
plot(ss);
toc
% matlabpool close
function [s]=inSum
x=abs(round(normrnd(50,40,1,1000)));
s=sum(x);

function testParallel
%并行
matlabpool local 2
tic
total=10^5;
parfor (i=1:total)
ss(i)=inSum;
end
plot(ss);
toc
matlabpool close
function [s]=inSum
x=abs(round(normrnd(50,40,1,1000)));
s=sum(x);
Elapsed time is 70.471469 seconds.Elapsed time is 7.750534 seconds.
70.471469/7.750534 = 9.0925,并行与否的时间比竟然是9倍,足以表明,在Matlab中使用多核并行运算给我们带来很多好处。
参考技术A 启动并行运算功能。比如说原来我们循环是for end,你启动并行运算功能,用parfor end,你的运算任务就会使用你电脑的多个核来计算了。如果运算量不大就没必要用了,节省那点时间还不够分配任务用的。什么?电脑没有多核?那这两个选项没啥用。本回答被提问者采纳

以上是关于如何利用多核电脑实现Matlab的并行运算的主要内容,如果未能解决你的问题,请参考以下文章

intel fortran如何实现单机多核并行运算

SQL Server调优系列基础篇(并行运算总结)

Python多线程常用包对比

我的matlab运行程序比较慢,怎么提高核心利用率和内存利用率?核心8个,内存40G。使用率非常低

怎么让apache利用多核CPU进行并发的问

小技巧matlab中进行并行运算仿真加快仿真速度