这么神奇吗 Matlab的并行计算 get!

最近帮一个胖友写几句matlab代码,里面涉及到比较大的数组乘法,基本上一轮下来,耗时60min; 由于他需要不断地改变某一个值,然后跑多次,我当然不允许这个时间白白浪费掉鸭。了解到matlab也有并行计算,因为实验室是做GPU的并行计算,而MATLAB是采用CPU做计算,本着一个学习的态度,写一篇博客详细记录一下,以防万一,某一天老板突然Q我做这个事情。

回归正题

首先查看一下你的电脑CPU的核心数量,单核就算了;
任务管理器->性能->CPU
在这里插入图片描述
可以看到,我的内核数量是:4,就是说,最多可以开4个core ;

MAC看这里

MATLAB端的操作:

clc;clear;close;
    %开启并行环境
	poolobj = gcp('nocreate');% If no pool,  create new one.
	if isempty(poolobj)
	    poolsize = 0;
	    CoreNum=2; %设定机器CPU核心数量
	    parpool(CoreNum);
	else
	    poolsize = poolobj.NumWorkers;
	    disp('Parallel Already initialized'); %说明并行环境已经启动。
	end
	%关闭并行环境
	% delete (gcp('nocreate'));

进行一个简单的test

分别用并行和串行计算1000*10000次乘法

clc;clear;close;
%开启并行环境
poolobj = gcp('nocreate');% If no pool,  create new one.
if isempty(poolobj)
    poolsize = 0;
    CoreNum=2; %设定机器CPU核心数量
    parpool(CoreNum);
else
    poolsize = poolobj.NumWorkers;
    disp('Parallel Already initialized'); %说明并行环境已经启动。
end
%关闭并行环境
% delete (gcp('nocreate'));

%Test
%并行算1000*10000次乘法
a=[];
tic
parfor i=1:1000
    for j=1:10000
        a(i,j)=i*j;        
    end
%     disp(i)
end
toc
%串行算1000*10000次乘法
b=[];
tic
for k=1:1000
    for m=1:10000
        b(k,m)=k*m;
    end
end
toc

在这里插入图片描述
可以看出,并行使用0.5ms,而串行使用4.7ms,差不多节省9倍的时间


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值