Motion Estimation on GPU

I am interested in accelerating video encoder (MPEG2 or H264) speed using GPU. I think motion estimation is a good candidate for this, but I got stuck at choosing a proper motion estimation algorithm, both accurate and suitable for GPU implementation at good speed. Cuda would be used for the implementation.

There is some literature regarding motion estimation implementation on GPU, most of them using gradient ME, or block ME (I only found full search results, the faster algorithms don’t seem to map very well to GPU architecture).

I would appreciate some hints to help me chose such an algorithm. the result should be faster then CPU implementation. (2 or 4 cores, using SSE2, SSE3, or even SSE4 later this year).

I was considering full search, 4SS, hierarchical, phase correlation, gradient, DCT domain ME.

I know also that NVidia GPUs have a video processor. Is it usable by programmers(through CUDA, DXVA, etc)?

Thanks for any info

Interesting subject… The faster algorithms might map to CUDA, even though they didn’t map to ealier GPUs. (as you can now use much more advanced data structures in memory, and do integer/bit arithmetic)

Several of Wen-mei Hwu’s students at UIUC have worked on accelerating motion estimation in a number of video encoders using CUDA. They had some success. I think their overall speedup was (of course) limited by Amdahl’s law to a few times faster, but the motion estimation component was a lot faster with CUDA.


John Stone

tachyon_john: cool, do you have any links or references concerning that?

I’m also interested in some references.

I think NVidia also has a video department. Maybe someone there could give some hints.

I’ll ask the people here at UIUC if they have code that they can make available to the general public. I know that they are planning to do so, but they have a couple of papers submitted and they may want to hold back until their work has been accepted for publication. In any case, I’ll mention this to them and see what they say.


John Stone

Ok, thanks. I’ll wait for an answer.

I am also interesting in exploring motion estimation on CUDA. This thread went quiet a few weeks ago, so I thought I would pop in a response and see if anything has come up.

well… waiting for an answer from john

There will be an optical flow example in the next SDK.

now, CUDA’s ver is 2.0. Is this example availabe in current SDK ?

And this topic’s information were not discussed at here ??