How to process video in parallel?

조회 수: 2 (최근 30일)
Ilya Tcenov
Ilya Tcenov 2019년 8월 3일
댓글: Ilya Tcenov 2019년 8월 10일
Hello.
I need to read a video file (N frames long), process each adjucent pair of frames (to calculate a single output frame), and write the result as a video file (N-1 frames long). Processing time is important to me, so I am trying to do this in parallel.
I can't use a gpuArray() to pass a variable that was created using VideoReader() to the gpu (I get an error). It seems pointless to pass a pair of frames to the gpu and gather the result, as the transition of data back and forth takes longer than the calculation itself. Is there another way of using the gpu in my case?
I can use multiple workers (CPU), but the problem is that I cant write the result of a processed pair as a frame (using writeVideo() ), before the previous frame was writen. I need to make the worker wait if the previous frame wasn't writen yet. What will be the correct way of doing so?
Thank you.
  댓글 수: 2
Divya Gaddipati
Divya Gaddipati 2019년 8월 6일
Does your current output frame depend on the previous output frame?
Ilya Tcenov
Ilya Tcenov 2019년 8월 10일
편집: Ilya Tcenov 2019년 8월 10일
It doesn't.
Output(n) = function(Input(n),Input(n+1))

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

채택된 답변

Divya Gaddipati
Divya Gaddipati 2019년 8월 8일
One possible approach is by using spmd. You could define spmd in such a way that each worker will operate on a chunk of the input video, and then within spmd it is possible to force each worker to write the resultant data in the specified order. Something like this:
spmd
    myFrameIdxs = find(discretize(1:totalNumFrames, numlabs) == labindex);
% numlabs - Total number of workers operating in parallel on current job
    % read chunk of data
    myFrameData = readVideoData(videoFname, myFrameIdxs);
    % process chunk of data
    myOutput = processVideoFrames(myFrameData);
    % output chunks of data in sequence, one at a time.
    for writeIdx = 1:numlabs
        if labindex == writeIdx
            writeVideoData(outVideoFname, myOutput);
        end
    end
end
For more information on how to use these functions, refer to the following links:

추가 답변 (0개)

카테고리

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

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by