필터 지우기
필터 지우기

Vectorize loop to speed up

조회 수: 2 (최근 30일)
Kamran
Kamran 2022년 5월 16일
댓글: Kamran 2022년 5월 20일
Hi,
This segment of code takes 13 seconds to run and as it runs hundreds of times it needs to be drastically speed optimized. Wonder if it can be done. Parallelizing the loop doesn't seem to help much.
Parameters are:
tau is a cell array of 384 each a matrix of 202 x 202 double elements.
FFT is a cell array of 384 each a vector of 5000 double elements.
omega is a vector of doubles of length 5000.
the outer loop 'flow' to 'fhigh' is 1:1:150
Converting cell arrays to arrays helps only slightly.
Thanks in advance.
P=zeros(size(tau{1}));
for k=flow:fhigh
F=zeros(size(tau{1}));
for j=1:nchan
F=F+FFT{j}(k)*exp(i*omega(k)*tau{j});
end
F=F.*conj(F);
P=P+F;
end
  댓글 수: 5
Jan
Jan 2022년 5월 18일
@Kamran: Ich would really try it, but hesitate to invent some input data, because in my opinion, it is your turn to provide them.
FFT{j}(k) has some costs, which can be avoided, but exp(i*omega(k)*tau{j}) is most likely the bottleneck.
Kamran
Kamran 2022년 5월 20일
Sorry for the late answer. Need to generate some data first. Get back later.

댓글을 달려면 로그인하십시오.

답변 (2개)

Matt J
Matt J 2022년 5월 16일
편집: Matt J 2022년 5월 16일
Fcell=cellfun(@(x)x(:),FFT,'uni',0);
Fmat=cell2mat(Fcell(:)');
Tau=cellfun(@(x)x(:)',tau,'uni',0);
Tmat=cell2mat(Tau(:));
P=0;
for k=flow:fhigh
F=abs( Fmat(k,:)*exp((1i*omega(k)).*Taumat) ).^2;
P=P+F;
end
P=reshape(P, size(tau{1}) );
  댓글 수: 2
Kamran
Kamran 2022년 5월 16일
Thanks. But it is almost the same. Still 13 seconds. Perhaps I should make a mex in C.
Matt J
Matt J 2022년 5월 16일
편집: Matt J 2022년 5월 16일
You might try again with a parfor-loop, but with the simplified loop implementation above. In this form, it might be easier for parfor to slice.

댓글을 달려면 로그인하십시오.


Matt J
Matt J 2022년 5월 16일
편집: Matt J 2022년 5월 16일
The operations look like IFFTs, though possibly you have irregular time and frequency sampling. Even so, you should possibly consider a compromise where you take the IFFT with pre- and post-interpolation to get the sampling that you need.
  댓글 수: 1
Kamran
Kamran 2022년 5월 16일
Yes, the sampling is irregular so I have to do it this way. Thanks for the help.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by