Von meinem iPhone gesendet

Anfang der weitergeleiteten E‑Mail:

> Von: Daniel Oberhoff <danieloberh...@gmail.com>
> Datum: 26. November 2014 00:19:30 MEZ
> An: Reimar Döffinger <reimar.doeffin...@gmx.de>
> Kopie: "Daniel Oberhoff (Privat)" <danieloberh...@gmail.com>
> Betreff: Re: [FFmpeg-devel] pipeline multithreading
> 
> 
> 
> Von meinem iPhone gesendet
> 
>> Am 25.11.2014 um 21:37 schrieb Reimar Döffinger <reimar.doeffin...@gmx.de>:
>> 
>>> On 25.11.2014, at 21:27, "Daniel Oberhoff (Privat)" 
>>> <danieloberh...@gmail.com> wrote:
>>>> Am 25.11.2014 um 11:33 schrieb Reimar Döffinger <reimar.doeffin...@gmx.de>:
>>>> 
>>>> On 25.11.2014, at 10:01, Daniel Oberhoff <danieloberh...@gmail.com> wrote:
>>>>>>> Am 24.11.2014 um 17:16 schrieb Reimar Döffinger 
>>>>>>> <reimar.doeffin...@gmx.de>:
>>>>>>> 
>>>>>>> On Mon, Nov 24, 2014 at 12:35:58PM +0100, Daniel Oberhoff wrote:
>>>>>>> inout -> filter1 -> filter2 -> output
>>>>>>> 
>>>>>>> some threads processing frame n in the output (i.e. encoding), other 
>>>>>>> threads procesing frame n+1 in filter2, others processing frame n+2 in 
>>>>>>> filter1, and yet others processing frame n+3 decoding. This way 
>>>>>>> non-parallel filters can be sped up, and diminishing returns for too 
>>>>>>> much striping can be avoided. With modern cpus scaling easily up to 24 
>>>>>>> hardware threads I see this as neccessary to fully utilize the hardware.
>>>>>> 
>>>>>> Keep in mind the two things:
>>>>>> 1) It only works for cases where many filters are used, which is not
>>>>>> necessarily a common case
>>>>> 
>>>>> Also, not quite. Even just decode/encode had a pipeline depth of 2 (the 
>>>>> decoder could decode frame n+1 while the encoder encodes frame n). Every 
>>>>> filter deepens this more...
>>>> 
>>>> If you run encode and decode with multithreading, they already run in 
>>>> different threads.
>>>> So if you have only one filter, you should not have any gains at all from 
>>>> per-frame filter multithreading.
>>> 
>>> So you are saying if I have
>>> 
>>> decode->filter(1)->encode
>>> 
>>> I will have n(decode) + n(sclices) + n(encode) threads? Even here I think a 
>>> clever setup of data following threads would improve performance, but 
>>> probably not pressingly so.
>>> 
>>> Anyhow, frame multithreading within the filter graph would help us a lot, 
>>> so I guess my question shifts towards how hard it would be to implement, 
>>> and if I end up starting the endeavor if there is interest in merging this 
>>> work.
>> 
>> I am sure there is interest in principle, I just expect that it is quite 
>> some effort and not all that useful in the most common use-cases, which 
>> reduces chances of someone else working on it.
>> Of course in the case where filters only act on one single frame and 
>> independent of previous state an easy hack is possible (even purely 
>> application-side): just instantiate the same filter graph n times, each with 
>> its own thread, and push/pull round-robin.
>> However any more advanced filter (deshake, deinterlace, temporal denoise 
>> etc) will horribly break...
>> Also Stefano is the main avfilter maintainer, I don't really work on it at 
>> all, just commenting from the "sidelines".
> 
> Hmm, that clone hack sounds nasty. I don't believe locally temporally 
> dependent filters would break a (non-hacked) frame multithreading, since at 
> some point they have to produce a frame, which the next stage can work on, 
> albeit only after having consumed n frames, n being their range of dependency 
> (or even 1 if they are implemented recursively). Well, I will have a look at 
> the code...
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to