[FFmpeg-devel] [PATCH] Runtime detection for the number of processors/cores

Alexander Strange astrange
Wed May 21 23:45:46 CEST 2008

On May 21, 2008, at 4:07 PM, Roman Shaposhnik wrote:

> On Wed, 2008-05-21 at 11:24 +0100, M?ns Rullg?rd wrote:
>> Philipp Meinen wrote:
>>> Hello FFmpeg Team
>>> The attached patch is an attempt to allow runtime detection for the
>>> number of online processors/cores instead of having to specify the
>>> number of threads. The idea is to type:
>>>    ffmpeg -threads 0 ....
>>> to use as many threads as processors/cores are online.
>>> I guess cmdutils.c/h is not the right file to place the new
>>> detection function. To which file should this function belong?
>>> Comments welcome :)
>> This is the wrong way to go about it.  The number of processors in  
>> the
>> machine is not interesting, the number of processors we're running on
>> is.  On Linux, this information can be found from  
>> sched_get_affinity().
>> Other systems have other methods.
> This is a reasonable generic statement, but the nice thing about
> FFmpeg's approach to multithreading is that it sort of self-schedules.
> IOW, even if you create more (far more!) threads than you have actual
> execution units (could be CPUs, could be cores or could even be
> virtual threads -- think Hype-R-Threading) the only overhead is
> at the start-up phase. Thus, using _sysconf(_SC_NPROCESSORS_ONLN)
> seems quite reasonable of a compromise.
> On a related note: I still don't quite understand why MPEG based
> codecs don't allow for higher degree of parallelism. Unlike DV codec
> which I've just tested on a nice Maramba box (2 CPUs, 16 cores,
> 128 execution units) and it scaled pretty much linearly to the
> # of cores, the MPEG based ones just refused to go higher than 4.

They only scale to the number of slices in a frame, and then only to  
the first 8 of those, I think. Adding slices is the only way to  
guarantee parallelism in a codec like this, but it always hurts  
compressibility,, which is much more important.
I'm working on it - for intra codecs frame-threading works perfectly  
so far, but for all the other codecs with backreferences I ran into  
some trouble with the buffer API. That shouldn't take too long to get  
around, though, and then I can get on with reading mpegvideo.

More information about the ffmpeg-devel mailing list