2

Matlabで並列計算ツールボックスを使用したいのですが、これについての知識を得るために多くのことを検索しました。parforforループの比較に関する一般的なクエリを見ました。parformatlabpool/parpool

ここで最終的なコードをまとめましたが、それでも遅すぎて、その理由がわかりませんでした。Mathsworkがこの問題を十分に文書化していないのは奇妙です。特にPCTを開始するための提案、parforおよび条件Batch Processingを開始および停止することによる提案、pool操作に関する十分な労働者の数

私のコード:

matlabpool open
tic ; parfor i=1:4, disp(['myid is ' num2str(labindex) '; i = ' num2str(i)]),end 
toc;
tic ; for i=1:4, disp(['myid is ' num2str(labindex) '; i = ' num2str(i)]),end 
toc;
matlabpool close
Starting matlabpool using the 'local' profile ... connected to 2 workers.
myid is 1; i = 2
myid is 1; i = 1
myid is 1; i = 3
myid is 1; i = 4
Elapsed time is 2.974505 seconds.
myid is 1; i = 1
myid is 1; i = 2
myid is 1; i = 3
myid is 1; i = 4
Elapsed time is 0.010254 seconds.
Sending a stop signal to all the workers ... stopped.

編集1:

ネストされたループの線形化も確認しましたが、チェックしましたが、通常のforループと比較して遅いです

tic;
for a=1:4
    for b=1:5
        f(a)=sum(a,b);
    end
end
toc;
tic;
iterations=[5,4];
for ix=1:prod(iterations)
    [b,a]=ind2sub(iterations,ix);
    f(a)=sum(a,b);
end
toc;
Elapsed time is 0.013108 seconds.
Elapsed time is 0.017800 seconds.

編集2:

並行して実行したい私のコード。

parfor ii = 1:1000
   p{ii,1}= [2 5 4; 5 4 6;]; %suppose very big matrix
   pp{ii,1}=p{ii,1}*2;
   for jj = 1:100
      p1{jj,1} = p{ii}* pp{ii};
      p2{jj} = p{ii}* pp{ii}*p1{jj};
      p3{jj} = p{ii}* pp{ii}*p1{jj}*p2{ii};
   end
   Data(ii).data=([pp(ii,:),p1{:,1},p2,p3;])' ; %#'
   Data(ii).label=cellfun(@(x) ['label' num2str(ii)] , num2cell(1:length(pp)+length(p1)+length(p2)+length(p3))', 'UniformOutput', false);
end
4

1 に答える 1