相关疑难解决方法(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秒.parforfor它替换需要0.01秒.

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

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

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

parallel-processing optimization matlab parfor

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

SPMD vs. Parfor

我是关于matlab并行计算的新手.我有一个创建分类器(SVM)的函数,我想用几个数据集测试它.我有一个2核工作站,所以我想并行运行测试.有人可以解释我之间的区别:

 dataset_array={dataset1, dataset2}
 matlabpool open 2
 spmd
      my_function(dataset(labindex));
 end
Run Code Online (Sandbox Code Playgroud)

 dataset_array={dataset1, dataset2}
 matlabpool open 2
 parfor i:1=2
      my_function(dataset(i));
 end
Run Code Online (Sandbox Code Playgroud)

parallel-processing matlab classification

6
推荐指数
1
解决办法
1万
查看次数

与三角数的因式分解平行

三角形数字的序列是通过将自然数相加而生成的。因此,第7 三角数将是1+2+3+4+5+6+7 = 28。前十个术语为:1, 3, 6, 10, 15, 21, 28, 36, 45, 55。前四个三角形中包含的因子是:

1: 1
3: 1, 3
6: 1, 2, 3, 6
10: 1, 2, 5, 10
Run Code Online (Sandbox Code Playgroud)

我们看到这6是第一个具有四个除数的三角形。

为了找到第一个三角数超过500的除数,我编写了以下代码:

1: 1
3: 1, 3
6: 1, 2, 3, 6
10: 1, 2, 5, 10
Run Code Online (Sandbox Code Playgroud)

我想使用parfor而不是for在外循环上加快此代码的速度。但是,我得到了错误:

错误:变量s1可能旨在作为归约变量,但实际上是未初始化的临时变量。

请参见MATLAB中的Parallel for Loops,“拟为归约变量的临时变量”。

如何并行化此代码?

parallel-processing performance matlab factors parfor

1
推荐指数
1
解决办法
77
查看次数