The projects tackled by the software development industry have grown in scale and complexity. Costs are increasing along with the number of developers. Power bills for distributed projects have reached the point where optimisations pay literal dividends. Over the last 10 years, a software development movement has gained traction, a movement founded in games development. The limited resources and complexity of the software and hardware needed to ship modern game titles demanded a different approach. Data-oriented design is inspired by high-performance computing techniques, database design, and functional programming values. It provides a practical methodology that reduces complexity while improving performance of both your development team and your product. Understand the goal, understand the data, understand the hardware, develop the solution. This book presents foundations and principles helping to build a deeper understanding of data-oriented design. It provides instruction on the thought processes involved when considering data as the primary detail of any project.
Author(s): Richard Fabian
Edition: 2
Publisher: Richard Fabian
Year: 2018
Language: English
Pages: 307
Data-Oriented Design
It's all about the data
Data is not the problem domain
Data and statistics
Data can change
How is data formed?
The framework
Conclusions and takeaways
Relational Databases
Complex state
The framework
Normalising your data
Normalisation
Operations
Summing up
Stream Processing
Why does database technology matter?
Existential Processing
Complexity
Debugging
Why use an if
Types of processing
Don't use booleans
Don't use enums quite as much
Prelude to polymorphism
Dynamic runtime polymorphism
Event handling
Component Based Objects
Components in the wild
Away from the hierarchy
Towards managers
There is no entity
Hierarchical Level of Detail
Existence
Mementos
JIT mementos
Alternative axes
Collective LOD
Searching
Indexes
Data-oriented Lookup
Finding low and high
Finding random
Sorting
Do you need to?
Maintaining
Sorting for your platform
Optimisations
When should we optimise?
Feedback
A strategy
Tables
Transforms
Spatial sets
Lazy evaluation
Necessity
Varying length sets
Joins as intersections
Data-driven techniques
Structs of arrays
Helping the compiler
Reducing order dependence
Reducing memory dependency
Write buffer awareness
Aliasing
Return value optimisation
Cache line utilisation
False sharing
Speculative execution awareness
Branch prediction
Don't get evicted
Auto vectorisation
Concurrency
Thread-safety
Inherently concurrent
Gateways
Finite State Machines
Tables as states
Implementing transitions
Condition tables as triggers
Double Buffering
In Practice
Data-manipulation
Game entities
Maintenance and reuse
Cosmic hierarchies
Debugging
Reusability
Reusable functions
Unit testing
Refactoring
What's wrong?
The harm
Mapping the problem
Internalised state
Instance oriented development
Hierarchical design vs change
Divisions of labour
Reusable generic code
Hardware
Sequential data
Deep pipes
Microcode
SIMD
Predictability
How it works
Sourcecode
The basics
Linked lists
Branch prediction
Cache size effect
False sharing
Hot, cold, access
Key lookup
Matrix transpose
Modifying memory
SIMD
Speculative waste
Finite State Machines