Execute functions and read input simultaneously in Matlab
이전 댓글 표시
I have an mp3 file which needs to go through different functions (blocks) in series. The input of each block is taken from the output of the previous block. Block C needs the longest time to process (eg. 10s). The problem is, instead of waiting the 10s, I wish to read another frame of mp3 while waiting the block C to finish its process. Any idea on the solution?

답변 (2개)
Walter Roberson
2018년 11월 3일
편집: Walter Roberson
2018년 11월 25일
If you have the parallel computing toolbox then you can use spmd.
framesize = 4096;
P = parpool(4);
spmd
if labindex == 1
end
end
spmd
if labindex == 1
afr = dsp.AudioFileReader(Filename, 'SamplesPerFrame', framesize);
while ~isDone(afr)
frame = step(afr);
labSend(frame, 2);
end
labSend([], 2)
release(afr)
elseif labindex == 2
while true
frame = labReceive(1);
if isempty(frame)
labSend([], 3)
break
end
Bres = BlockB(frame);
labSend(Bres, 3);
end
elseif labindex == 3
while true
Bres = labReceive(2);
if isempty(Bres)
labSend([], 4)
break
end
Cres = BlockC(Bres) ;
labSend(Cres, 4)
end
else
while true
Cres = labReceive(3);
if isempty(Cres)
break
end
Dres = BlockD(Cres) ;
end
end
댓글 수: 11
Star
2018년 11월 6일
Walter Roberson
2018년 11월 6일
I had the dsp initialization there but moved it and forgot to remove the step.
Star
2018년 11월 24일
편집: Walter Roberson
2018년 11월 25일
Walter Roberson
2018년 11월 25일
편집: Walter Roberson
2018년 11월 25일
labSend(DataToSend, 3)
And to receive it,
labReceive()
Star
2018년 12월 5일
Walter Roberson
2018년 12월 5일
what is size() of the item you labSend() ?
Star
2018년 12월 5일
Walter Roberson
2018년 12월 5일
you are sending a single row but receive into 4 rows. Are you wanting to copy the same one row to all four rows of the matrix ?
Star
2019년 2월 21일
Walter Roberson
2019년 2월 21일
No. Job scheduler is only needed if you are using the Distributed Computing Toolbox, which would be for running computing on a cluster. Job schedulers are not required for running only on the resources of the local computer.
Star Rats
2019년 4월 10일
Hi Walter, is your answer above considered as Task parallel (Embarrassingly Parallel) or Data parallel (Fine Grained Parallel) ?
Star
2018년 12월 5일
댓글 수: 2
Walter Roberson
2018년 12월 5일
What you labSend is indexed by row so you only send one row .
Star
2018년 12월 6일
카테고리
도움말 센터 및 File Exchange에서 Startup and Shutdown에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!