O'Reilly logo

Multithreading for Visual Effects by James Reinders, Jeff Lait, Manuel Kraemer, Ronald Henderson, George ElKoura, Erwin Coumans, Martin Watt

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Chapter 3
The Presto Execution System: Designing for
Multithreading
George ElKoura
Pixar Animation Studios
3.1 Introduction . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . 48
3.1.1 A Note about Interactivity . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . 48
3.2 Presto . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . .. . . . . 49
3.2.1 Presto Objects . . . . . . .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . 50
3.2.2 Rigging in Presto . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. . . . 51
3.2.3 Animation in Presto . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. . . . . . 52
3.3 Presto’s Execution System .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . 52
3.3.1 Phases of Execution . . . . . . .. .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. . 53
3.3.1.1 Compilation .. .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. 53
3.3.1.2 Scheduling . . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . 54
3.3.1.3 Evaluation . . . . . . . .. . . . . . . . .. .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . 54
3.3.2 Engine Architecture . . . . . . . .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. 54
3.3.2.1 Network . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. 55
3.3.2.2 Schedulers .. . . . . . . . .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . 55
3.3.2.3 Data Managers . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . 56
3.3.2.4 Executors . . . . .. .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . 56
3.3.2.5 Engine Architecture and Multithreading . . . . . .. . . . . . . . . . 56
3.4 User Extensions . . . . . . . .. . . . . . . . .. .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . 57
3.4.1 Dependencies Declared a Priori .. .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . 57
3.4.2 Client Callbacks Are Static Functions . . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . 57
3.4.3 Presto Singletons Are Protected . . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . 58
3.4.4 Iterators . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. . . . . . . . . . .. . . 58
3.4.5 And Then There’s Python . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. .. . 58
3.4.5.1 Global Interpreter Lock . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . 58
3.4.5.2 Performance . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. .. . . . . . . . .. . 59
3.5 Memory Access Patterns . . . .. .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. . . . . . . . . 59
3.6 Flexibility to Experiment . . . . . .. . . . . . . . . . .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . 60
3.6.1 Modular Design . . . . . . . . . . .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . 60
3.6.2 Targeting Other Platforms . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. . . . . 60
3.7 Multithreading Strategies .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . . 61
3.7.1 Per-Node Multithreading .. . . . . . . . .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . 61
3.7.2 Per-Branch Multithreading . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. .. . 62
3.7.3 Per-Model Multithreading .. .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . . 62
3.7.4 Per-Frame Multithreading . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . 64
3.8 Background Execution . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . 64
3.8.1 User Interaction . . . . . . . .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . 65
3.8.2 Frame Scheduling . . . .. .. . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . .. .. . . . . . 65
47

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required