[Bf-committers] Compositor speedup proposal [1/2]

David erwin94 at gmx.net
Wed Jan 30 00:08:49 CET 2013


Hi,

thanks for taking a look at this. If I understand the problem correctly
the slowdown is mostly due to simple nodes not caching at all, that
means that for a fanout>1 on a socket the node has to be calculated
at least that many times. For simple nodes that is usually not a problem
until you string a lot of them together with multiple fanouts inbetween,
then it very quickly adds up. I would say breaking these execution groups
into pieces is likely to be most successful at points where nodes have
a large fanout; this should reduce the number of calculations significantly.
The longer I think about it the more I feel there is an interesting graph
theory problem/algorithm here that might help...

(Maybe this is all very obvious to you already, in which case
disregard my input and do what you think is best ;)

till then, David.


On Jan 29, 2013, at 12:08 PM, Jeroen Bakker wrote:
> This is a proposal to solve speed-issues of the compositor. It should 
> not be considered as the final solution, but should help the most common 
> issues.
> 
> Problem statement.
> The compositor works best when having a good mixture of simple and 
> complex nodes. If you have a lot of simple nodes the system is not able 
> to find a good balance when converting to execution groups (subprogram 
> that will be scheduled to a core of the CPU). It results in a few 
> execution groups with many simple operations and a small number of 
> buffers that store intermediate results. This slows down the system a 
> lot 
> [http://projects.blender.org/tracker/?func=detail&aid=33785&group_id=9&atid=498]. 
> A workaround for this slowdown was to add a complex node (that doesn't 
> do anything, like blur 0) in the setup.
> 
> First test shows that good result depends on the node tree setup and the 
> available memory of the system. We propose to split up execution groups 
> into smaller ones if they get too big. The split up will depend on two 
> variables:
> 1. amount of memory in the system (not free memory)
> 2. number of operations in an execution group
> 
> As this mechanism does a lot of guesses, the user should be able to 
> manually control the number of cuts.
> 
> During tests we saw the next results
> Used file: file attached to issue #33785
> Used system: Intel(R) Core(TM) i5 CPU M 580 @ 2.67GHz, with 8GB of 
> memory, ubuntu 12.04 64 bit:
>  - Baseline (no changes to code): 861MB, 47.49 seconds
>  - Limit execution group size to 10: 3424MB, 7.267 seconds
>  - Limit execution group size to 15: 3289MB, 7.607 seconds
>  - Limit execution group size to 20: 2884MB, 9.393 seconds
>  - Limit execution group size to 25: 2884MB, 11.987 seconds
> 
> Best regards,
> Jeroen & Monique
>  - At Mind -
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers



More information about the Bf-committers mailing list