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!