From BlenderWiki

Jump to: navigation, search

Google Summer of Code: Threaded Dependency Graph

General info

Short description. This project is about improving dependency graph in terms of supporting objects update from multiple threads for multiple purposes (for example, being able to have the same object up-to-date for the viewport and render).

For artists this means faster scene playback and no conflicts between viewport and render threads.

During this project following improvements and changes will be done to the code (bigger milestones are listed):

  • Make all object-data related areas (such as curves and metaballs) thread-safe
  • Make scene objects update multi-threaded
  • Separate data from state, so viewport and render doesn't run into conflict

Here are some links to pages with more detailed info:

Project Breakdown

Project itself is rather huge, but the list of changes above is actually pretty much nice breakdown and each element from that list defines nice milestone of the project.

Further document is split into separate pages, each of which describes design proposal, implementation details and status of the target.

Work Breakdown

  • Making data and code safe for threading:
    • done
        Make metaballs safe for threading.
    • done
        Make curves code safe for threading.
    • done
        Make other objects' data safe threading.
    • done
        Make modifier stack safe for threading.
  • Scheduler:
    • done
        Implement (or re-use/integrate existing ones) task scheduler.
    • done
        Switch from sequent object-by-object handle_update to task-based scheduled updates.
    • done
        Solve dupli-groups duplications.
    • done
        Look into nice balanced load.
    • to do
        Support granular update.
  • Rendering:
    • done
        Support locked interface while rendering.
    • in progress Inprogress25.jpg 10%
        Solve viewport/render conflicts.
  • Other
    • done
        Reshuffle deform weights calculation in shapekeys to solve significant slowdown when doing threaded update.
    • done
        Make lock-free guarded allocator with small memory overhead.

Results

Here're results of project development from users perspective.