Data-Oriented Design@Neku42max.klyga@gmail.com
UnreasonedOOD
PROGRAMDATADATA
Good code follows good data, not the other way around.
class Bot{Vector3 position;…float mod;…float aimDirection;…voidUpdateAim(Vector3 target)    {        aimDirection = Vector3.DotProduct(position, target) * mod;    }}
class Bot{Vector3 position;…float mod;…float aimDirection;…voidUpdateAim(Vector3 target)    {        aimDirection = Vector3.DotProduct(position, target) * mod;    }}Icache-miss
class Bot{Vector3 position;…float mod;…float aimDirection;…voidUpdateAim(Vector3 target)    {        aimDirection = Vector3.DotProduct(position, target) * mod;    }}Icache-missdata-miss
class Bot{Vector3 position;…float mod;…float aimDirection;…voidUpdateAim(Vector3 target)    {        aimDirection = Vector3.DotProduct(position, target) * mod;    }}UNUSEDIcache-missdata-miss
………………
Array of StructuresStructure of Arraysclass Bot{Vector3 position;…float mod;…float aimDirection;…}List<Bot> bots;class Bots{List<Vector3> positions;…List<float> mods;…List<float> aimDirections;…}
class Bot{…	voidUpdateAim(Vector3 target)    {        aimDirection = Vector3.DotProduct(position, target) * mod;    }}class Bots{…	    staticvoidUpdateAims(List<float> aimDirections,List<Vector3> positions, List<float> mods, List<Vector3> targets)    {        for (uint i = 0; i < aimDirections.Count; ++i)aimDirections[i] = Vector3.DotProduct(positions[i], targets[i]) * mods[i];    }}
Know the data!Think! Think! Think!
It’s all about memoryOptimize for data not code
It’s all about memoryOptimize for data not codeMost code is mostly bound to memory access
It’s all about memoryOptimize for data not codeMost code is mostly bound to memory accessNot everything needs to be an object
Data-Oriented Design:Better performance
Data-Oriented Design:Better performanceOften simpler code
Data-Oriented Design:Better performanceOften simpler codeMore parallelizable code
Questions?
http://slidesha.re/hKF9er

Data oriented design