最近用到matlab做测试和数据处理,想到是否可以多线程处理问题,于是测试了一matlab的并行处理效果。
测试环境,联想E480 , 8250U,4核8线程@1.6G~3.4G,内存8G@DDR24000,256G SSD,winddows 10, matlab 2014a .
借用一个大家做过的测试程序:
tic
for i=1:10000
for j=1:10000
a(i,j)=i*j;
end
end
toc
这个消耗间大概600S;
修改为并行4核效果有明显提高,需要大概60S;
matlabpool local 4;
%parallel program
tic
parfor i=1:10000
for j=1:10000
x(i,j)=i*j;
end
end
toc
matlabpool close
再做了一点修改,在执行计算前,增加了内存空间预分配处理:
x=zeros(10000);
tic
for i=1:10000
for j=1:10000
x(i,j)=i*j;
end
end
toc
这个计算只需要大概5S打开资源管理观察CPU计算过程中的工作状况,发现8个core都在参与运算。
通过这个测试发现,我们不需要考虑是否多核分配,系统已经处理得很好了。内存分配较耗费时间,我们优化好比较花时间的这部分code就可以了。