『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

Matlab利用cpu的多核提高运算速度

Matlab利用cpu的多核提高运算速度
在使用Matlab进行大数据运算的时候,往往会遇到速度低下的问题,高版本的matlab是支持多核运算的,这里做了一个尝试。

       在使用Matlab进行大数据运算的时候,往往会遇到速度低下的问题,高版本的matlab是支持多核运算的,这里做了一个尝试。

 

       经过测试使用的MATLAB2010可以多核运行的。需要多核多线程跑的算法,在之前要让matlab在本地建立4个“实验室”(我的机器是4核,所以是4个)

 

>> matlabpool local 4

Starting matlabpool using the 'local' configuration ... connected to 4 labs.

       显示正在进行多核配置,一会说,连接到4个“实验室”。我理解就是在本地虚拟出4台可以运行matlab的工作站,这样用分布式计算工具箱可以进行并行计 算(matlabpool这个命令好像是在并行计算工具箱里的)。观察windows任务管理器,可以发现一共有5MATLAB.exe进程。其中一个 占内存较多的,我理解是主控的,他基本不干活,只负责分配,进行计算时他的cpu占用率只有1~2%,剩下四个进程专门用来计算的,跑起来各占cpu 25%左右。看上去还是每个matlab进程单核运算,但是一下开4个进程,所以能把cpu用满。

 

       如果后续还需要多核运算,就直接用parfor好了,不用每次都用matlabpool命令。那个配置一次就好。

       算完了,不再跑了,临退出时关闭配置就行。

 

>> matlabpool close

Sending a stop signal to all the labs ... stopped.

       测试过程

 

       下面是我一个M文件的程序,测测4核并行计算和单核计算的差距,很简单。

 

function testtime

runtimes = 1e9;

 

dummy1   = 0;

 

dummy2   = 0;

 

 

%matlabpool local 4

 

 

tic

 

%for x= 1:runtimes;

 

parfor x= 1:runtimes;

 

dummy1 = dummy1 + x;

 

dummy2 = 2 * x + 1;

 

end

 

toc

 

 

plot([1 2], [dummy1, dummy2]);

 

       第一次用普通for语句,单核跑,6.09

 

>> testtime

Elapsed time is 6.094267 seconds.

       第二次用parfor语句,4核跑,1.63

 

>> matlabpool local 4

Starting matlabpool using the 'local' configuration ... connected to 4 labs.

>> testtime

Elapsed time is 1.631350 seconds.

>> matlabpool close

       加速比 6.09 / 1.63 = 3.736,将近4倍(还有开销吧),还比较可观。

      京ICP备2025132830号-1 京公网安备 号