相关疑难解决方法(0)

使用parfor节省时间和内存?

prova.mat在MATLAB中考虑以下列方式获得

for w=1:100
    for p=1:9    
        A{p}=randn(100,1); 
    end
    baseA_.A=A;

    eval(['baseA.A' num2str(w) '= baseA_;'])

end

save(sprintf('prova.mat'),'-v7.3', 'baseA')
Run Code Online (Sandbox Code Playgroud)

为了了解我的数据中的实际维度,1x9 cellin A1由以下9数组组成:904x5, 913x5, 1722x5, 4136x5, 9180x5, 3174x5, 5970x5, 4455x5, 340068x5.另一个Aj有类似的构成.

请考虑以下代码

clear all
load prova
tic
parfor w=1:100
       indA=sprintf('A%d', w);
       Aarr=baseA.(indA).A;
       Boot=[];
       for p=1:9
           C=randn(100,1).*Aarr{p};
           Boot=[Boot; C];  
       end
       D{w}=Boot;
end
toc
Run Code Online (Sandbox Code Playgroud)

如果我在我的Macbook Pro中parfor使用4本地工作人员运行循环,则需要1.2秒.parfor用for它替换需要0.01秒.

根据我的实际数据,时间差为31秒对7秒[矩阵的创建C也更复杂].

如果已正确理解问题是计算机必须发送baseA给每个本地工作人员,这需要时间和内存.

您能否提出一个能够parfor比方便更方便的解决方案for?我认为保存所有单元格baseA是一种通过在开始时加载一次来节省时间的方法,但也许我错了.

parallel-processing optimization matlab parfor

18
推荐指数
2
解决办法
2212
查看次数