matlabpool open 4;%打开四个线程
B=zeros(1,5);
parfor i=1:5
a=i;
B(1,i)=a;
end
matlabpool close
B
Libing Wang
师弟用过,比如对PCA 20次随机分割肯定能这么用,这样会提高CPU的利用效率,几个核同时用

一个使用parfor-loop的例子:
%example of parfor-loop %本地worker数通常等于cpu的核数
matlabpool
open local 2;
parfor
i=1:1024
A
(i) = sin(i*2*pi/1024);
end
plot(A);
matlabpool
close;

设机器的CPU核心数量是CoreNum双核机器的CoreNum2,依次类推。CoreNum以不等于核心数量,但是如果CoreNum小于核心数量则核心利用率没有最大化,如果CoreNum大于核心数量则效率反而可能下降(如何看计算机有几个核?Weiqiang说任务管理器->性能,看CPU使用记录有几个就是几个核)。因此单核机器就不要折腾并行计算了,否则速度还更慢。下面一段代码初始化Matlab并行计算环境:

%Initialize Matlab Parallel Computing Enviornment by Xaero | Macro2.cn

CoreNum=2; %设定机器CPU核心数量,我的机器是双核,所以CoreNum=2

if matlabpool('size')<=0 %判断并行计算环境是否已然启动

matlabpool('open','local',CoreNum); %若尚未启动,则启动并行环境

else

disp('Already initialized'); %说明并行环境已经启动。

end

运行成功后会出现如下语句:

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

成运行计算后可以将其关闭。关闭的命令很简单:

matlabpool close

另外一个问题就是并行代码做模拟的次数问题。我们要达到用非并行的代码做N此模拟所能得到结果的精确程度,在核心为CoreNum并行代码中,Parfor语句段中只要做N/CoreNum次即可达到。

read twice http://blog.sciencenet.cn/blog-419879-444784.html, no need to see again


但下面例子是可以的,parfor内部可以有for(parfor本身也不支持嵌套,将for j 改为parfor,两重parfar不行)

matlabpool open local 2;

parfor i=1:1024

A(i) = sin(i*2*pi/1024);

for j=1:10

B(i,j)=A(i)*j;

end

end

matlabpool close;

这段代码没有问题,不知我的Test_GLA_DLSR_FS_ServerVersion_outerParFor,没有r = zeros(length_d,1);就不行,提示rate can not be classified.Weiqiang讨论,他也没遇到这种错误,只是想办法用替代方法解决
解决方案:最内层的循环用parfor(Weiqiang说未必要这样);几个内层串行for,相互没有关联,可以一起parforparfor内部不能有clearsave,因为parfor内部有了clearsave,对应的clearsave会显示红色。This is with Dong Cao's help.
解决方案:Weiqiangparfor内部是可以有for循环的,他讲是可以有clearload的,封装成一个函数my_clear(随便什么函数名字都行)调用clear即可,load类似,但save不行。

错误实现
function my_load1(filename)
load(filename);
end
正确实现
function S = my_load(filename)
S = load(filename);
end

Weiqiang讨论,他也没说清楚原因。

function my_clear(name1)

clear name1;

    end

clear的用法有很多种,Weiqiang讲只能写死一种。

Test_GLA_DLSR_FS_ServerVersion_outerParFor

The client lost connection to lab 4. This might be due to network problems, or

the interactive matlabpool job might have errored.Weiqiang说这种问题没法解决,

是通讯问题
在本机程序没耗100%CPU和内存,到服务器上跑会不会快点,Weiqiang讲会快点,但快不了多少。他在du公司服务器速度也和lab服务器速度速度差不多,关键程序本身很慢,租服务器还是很慢。