Kit Execution Orchestration#

Kit is like a highway without rules. Everyone is welcome to travel on it: sleek sedans, race cars, cyclist, trains, inline skaters, etc. Such a diverse set of travelers can lead to disaster on the road. The omni.kit.exec.core extension’s job is to rein in the chaos. This wrangling is done by orchestrating Kit’s execution pipeline such that travelers get to their destination quickly, collisions are avoided, and lane usage is maximized.

omni.kit.exec.core is essentially an integration layer that utilizes the OmniGraph Execution Framework to facilitate execution orchestration. It acts as an integration point between omni.graph.exec and the rest of the kit runtime, specifically the StageUpdate (a lot of the useful runtimes plug into, e.g., OmniGraph, PhysX, animation, etc.) as of today.

The extension introduces an execution controller which is essentially a wrapper around core omni.graph.exec functionality (i.e., a top-level ExecutionGraph and ExecutionContext) with extra utilities/safeties in place to manage certain high-level operations (execute, compile, etc.) in a thread- and recursion-safe fashion, all specialized towards the kit runtime. Under-the-hood, opaque units of work are described as nodes inside nested graphs of graphs, but that isn’t something that the controller is necessarily directly aware of. It structures and organizes execution flows, making it easier to understand and visualize task dependencies.

The extension is marked as non-reloadable, and it must be loaded at start time within kit, otherwise the StageUpdate of the app wont work.