[theora-dev] Multi-Thread Theora Encoder

Felipe Portavales Goldstein portavales at gmail.com
Tue Oct 2 14:51:10 PDT 2007


I'm happy to announce I developed a Multi-Threaded version of the
Theora encoder. I changed the Motion Vector Search part of the
algorithm to be executed in parallel.

I've chosen the Motion search part after a careful set of profilings
that shown that the Motion Vector Search is responsible by 70% of
CPU-time on average and up to 95% of CPU-time in some cases. I also
have chosen this part because it is easier to parallelize.

Running this multi-thread version I've got:

 - On a dual core machine :
    * Average of 28% of speed-up on the running time
    * up to 38% of speed-up (the best case of my set of tests)

 - On a quad core machine:
   * Average of 36% of speed-up on the running time
   * up to 58% of speed-up (the best case of my set of tests)

As you can see it does not scale very well (yet), because a part of
the source codame is still sequential and run in a sequential manner
after the initial parallel part (the motion search). It is not like a
double buffer or a pipeline (there is some data dependencies that
makes it difficult).

This multi-threaded version will be converted to a port of the Theora
encoder to the IBM CELL processor.

I am working on this project in my free time during my undergrad
course. So, the development can be slow.
If someone wants to contribute, please send me an email.

The source code used was the libtheora 1.0alpha8, but I think that my
patch can be easily applied to the current libtheora 1.0beta1.

I will clean-up the source code and maybe I could upload to the Theora SVN.
Or send the patch to somebody.


Felipe Portavales Goldstein <portavales at gmail>
Undergraduate Student - IC-UNICAMP
Computer Systems Laboratory

More information about the theora-dev mailing list