parfeval evaluation is slow
    4 views (last 30 days)
  
       Show older comments
    
    Poul-Erik Hansen
 on 11 Apr 2025
  
    
    
    
    
    Commented: Walter Roberson
      
      
 on 15 Apr 2025
            Hi
I am using parfeval to calculate the eigenvalues of a matrix M with typical dimension of 1500x1500x100. The parfeval evaluations is slow since I read the output just after the evaluation of each matrix M(:,:,k) k=1,..,100. I want to store all the eigenvalues and eigenvectores in the variabel f and read the output after finishing the parfeval evaluation.
Current code:
eigMtr=complex(zeros(2*L,2*NumOfSlabs*L));
W=eigMtr;
W_1=complex(zeros(L,2*NumOfSlabs*L));W_2=W_1;
for k=1:NumOfSlabs
    f=parfeval(@eig,3,M(:,:,k));
    [Wt,Dt] = fetchOutputs(f);
    start=1+(k-1)*2*L;stop=2*k*L;
    eigMtr(1:2*L,start:stop)=sqrt(Dt);
    W1=Wt(1:L,:); 
    W2=Wt(L+1:2*L,:);
    W_1(:,start:stop)=W1;
    W_2(:,start:stop)=W2;
    W(1:L,start:stop)=W2;
    W(L+1:2*L,start:stop)=W1; 
end
I want to do something like this
for k=1:NumOfSlabs
    f=parfeval(@eig,3,M(:,:,k));
end
for k=1:NumOfSlabs
    [idx,Wt,Dt] = fetchNext(f)
    start=1+(k-1)*2*L;stop=2*k*L;
    eigMtr(1:2*L,start:stop)=sqrt(Dt);
    W1=Wt(1:L,:); 
    W2=Wt(L+1:2*L,:);
    W_1(:,start:stop)=W1;
    W_2(:,start:stop)=W2;
    W(1:L,start:stop)=W2;
    W(L+1:2*L,start:stop)=W1; 
end
Thanks for your help
Poul-Erik
0 Comments
Accepted Answer
  Walter Roberson
      
      
 on 11 Apr 2025
        Note the correction to the number of output arguements parameter in the parfeval() call
f = cell(NumOfSlabs, 1);
for k=1:NumOfSlabs
    f{k} = parfeval(@eig,2,M(:,:,k));
end
wait(f{1});
for k=1:NumOfSlabs
    [Wt,Dt] = fetchOutputs(f{k});
    start=1+(k-1)*2*L; stop=2*k*L;
    eigMtr(1:2*L,start:stop)=sqrt(Dt);
    W1=Wt(1:L,:); 
    W2=Wt(L+1:2*L,:);
    W_1(:,start:stop)=W1;
    W_2(:,start:stop)=W2;
    W(1:L,start:stop)=W2;
    W(L+1:2*L,start:stop)=W1; 
end
8 Comments
  Edric Ellis
    
      
 on 15 Apr 2025
				Ah, actually, the Parallel Computing Toolbox page for parfeval already does have examples showing arrays https://uk.mathworks.com/help/parallel-computing/parallel.pool.parfeval.html . @Walter Roberson were you looking at the page in the MATLAB doc? https://uk.mathworks.com/help/matlab/ref/parfeval.html . 
  Walter Roberson
      
      
 on 15 Apr 2025
				More Answers (1)
  Steven Lord
    
      
 on 11 Apr 2025
        Have you compared the time of your parfeval call to the time required for a call to the pageeig function?
See Also
Categories
				Find more on Loops and Conditional Statements in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


