Session Name: | Multithreading the Entire Destiny Engine |
Speaker(s): | Barry Genova |
Company Name(s): | Bungie |
Track / Format: | Programming |
Overview: | Modern console architectures have heterogeneous, multi-core computation architectures differing vastly in performance and memory characteristics. As a result, game engines' multithreading architectures have moved away from system-level thread parallelism to fine-grained task and data parallelism to optimally take advantage of all available resources. Bungie's new game Destiny is a fast-paced shared-world shooter that demands a low-latency action gameplay experience. We have taken traditional job-based multithreading techniques to the next level, turning almost every part of our engine into a job graph, with only limited use of thread-based pre-emption. To do this, we have developed several novel techniques, such as splitting our main game loop into special strings of jobs which we call "job fibers." We will present our resource tracking system that allows rigorous validation multithreaded data lifecycles. This system verifies at runtime that all data accesses (reads, writes, creations and destructions) are valid and occur at safe times within the frame. We will show our entirely job-based frame structure, and delve into examples of both system-level pipelining and data parallelism. |