Data-oriented design: Difference between revisions

Content deleted Content added
BG19bot (talk | contribs)
m WP:CHECKWIKI error fix. Section heading problem. Violates WP:MOSHEAD.
Line 1:
In [[computing]], '''Data oriented design''' (not to be confused with [[data-driven design]]) is a software optimisation approach motivated by [[cache coherency]], used in [[video game]] development (usually in the [[C programming language|C]] or [[C++ programming language]]s). The approach is to focus on the data layout, separating and sorting [[field (computing)|field]]s according to when they are needed, and to think about transformations of data. Proponents include [[Mike Acton]].
 
=== Motivation ===
 
 
These techniques became especially popular during the [[PS3]] and [[xbox 360]] console generation when the hazards of [[cache misses]] became especially pronounced, due to their use of [[in-order processor]]s and high clock speeds.<ref>{{cite web|title = data oriented design|url=http://www.dice.se/wp-content/uploads/2014/12/Introduction_to_Data-Oriented_Design.pdf}}</ref>. In modern systems (even with [[out of order execution]], [[main memory]] is as many as hundreds of [[clock cycle]]s away from the [[processing element]]s, consequently [[locality of reference]] issues dominate performance.
 
=== Contrast with OOP ===
 
 
The claim is that traditional [[object-oriented]] design principles result in poor data locality, especially if [[runtime polymorphism]] is used (which itself is especially problematic on certain processors). Although OOP does superficially seem to 'organise code around data', the practice is quite different. OOP is actually about organising [[source code]] around [[data types]], rather than making the grouping of individual fields and arrays convenient for access by specific functions. It also frequently hides layout details under [[abstraction layer]]s, whilst a data-oriented programmer wants to think about this first and foremost.
 
=== Other languages ===
 
 
The experimental [[Jonathan Blow#JAI language|JAI programming language]] being developed by [[Jonathan Blow]] has explicit support for data oriented design, whilst eschewing the traditional OOP paradigm. This is facilitated by being able to transparently move fields between [[Record (computer science)|record]]s without extensive source code changes to functions using them (or without extensive boilerplate to enable this), and by adding direct support for [[SoA]] data layout.
Line 17 ⟶ 20:
{{stub}}
 
=== See also ===
 
 
* [[CPU cache]]