I want to understand how CUDA can be used to deliver high definition video? Is this an embarssingly parallel problem? If not then what are the challanges in this case? Do we perform complete (MPEG) coding/decoding on GPUs, or do we need to rely upon the CPU heavily?
I don’t understand what you mean by “deliver” high-definition video. If you mean encoding/decoding compressed video streams, then yes, CUDA can help to some degree, but it is not “embarassingly parallel” like matrix multiplication (for example).
I am not an expert on Image or Video processing but I understand that it deals with millions of data …and fits well for SIMD, and in fact Graphics cards are designed top handle images and Video. So why not encoding decoding will get significant boost from CUDA. I mean why “CUDA will help to some degree” . In short WHY is not an Embarrassingly Parallel Problem?
Most modern video cards have fixed function hardware for video stream decoding. The shaders and texture hardware (which is what CUDA exposes) aren’t (for the most part) used for video streams.
As for why it isn’t embarrassingly parallel, the basic reason is that modern video codecs use both spatial and temporal compression, and the final value of any given pixel relies on both its neighbours within the same frame and the pixel value of both preceeding and following frames.