Content deleted Content added
Jerryobject (talk | contribs) WP:LINKs: updates, adds, fix-cut WP:NOPIPEs. Full terms define before WP:ABBReviations. Proper noun > MOS:CAPS. Small WP:EoS WP:COPYEDITs. |
Jerryobject (talk | contribs) m Cut needless carriage returns: in paragraphs, between items. |
||
Line 1:
In [[computing]], '''data oriented design''' (not the same as [[data-driven design]]) is a [[program optimization]] approach motivated by [[cache coherency]], used in [[video game]] development (usually in the programming languages [[C (programming language)|C]] or [[C++]]).<ref>{{cite web|title = Data-oriented design|url=http://www.dice.se/wp-content/uploads/2014/12/Introduction_to_Data-Oriented_Design.pdf}}</ref> The approach is to focus on the data layout, separating and sorting [[field (computing)|fields]] according to when they are needed, and to think about transformations of data. Proponents include Mike Acton.<ref>{{cite web|title=CppCon 2014: Mike Acton "Data-Oriented Design and C++"|url=https://www.youtube.com/watch?v=rX0ItVEVjHc}}</ref>
== Motives ==
These methods became especially popular during the [[seventh generation of video game consoles]] which included [[PlayStation 3]] (PS3) and [[Xbox 360]], when the hazards of [[cache misses]] became especially pronounced, due to their use of [[in-order processor]]s with high clock speeds and deep [[Pipeline (computing)|pipelines]] (some of the software issues were similar to those encountered on the [[Itanium]], requiring unrolling for upfront scheduling). 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, requiring improvement of [[memory access pattern]]s to fix. [[Game console]]s often have relatively weak [[central processing unit]]s (CPUs) to devote more power and transistor budget to the [[graphics processing unit]]s (GPUs). Thus, it is critical that CPU side code is efficient to avoid [[Von Neumann architecture#Von Neumann bottleneck|Von Neumann bottlenecking]].
== Contrast with object-orientation ==
The claim is that traditional [[object-oriented programming]] (OOP) design principles result in poor data locality, more so if runtime polymorphism ([[dynamic dispatch]]) is used (which is especially problematic on some processors<ref>{{cite web|title=What's wrong with Object-Oriented Design? Where's the harm in it?|url=http://www.dataorienteddesign.com/dodmain/node17.html}}describes the problems with virtual function calls, e.g., i-cache misses</ref>).<ref>{{cite web|title=Data-oriented design - why you might be shooting yourself in the foot with OOP|url=http://gamesfromwithin.com/data-oriented-design}}</ref> Although OOP does superficially seem to ''organise code around data'', the practice is quite different. OOP is actually about organising [[source code]] around [[data type]]s, rather than physically grouping individual fields and arrays in a format efficient for access by specific functions. It also often hides layout details under [[abstraction layer]]s, while a data-oriented programmer wants to consider this first and foremost.▼
▲Although OOP does superficially seem to ''organise code around data'', the practice is quite different. OOP is actually about organising [[source code]] around [[data type]]s, rather than physically grouping individual fields and arrays in a format efficient for access by specific functions. It also often hides layout details under [[abstraction layer]]s, while a data-oriented programmer wants to consider this first and foremost.
== Other languages ==
The experimental programming language [[Jonathan Blow#JAI language|JAI]] being developed by [[Jonathan Blow]] has explicit support for data-oriented design, while eschewing the traditional OOP paradigm. This is facilitated by being able to transparently move fields between [[Record (computer science)|records]] without extensive source code changes to functions using them (or without extensive [[boilerplate code]] to enable this), and by adding direct support for ''[[AOS and SOA#Structure of arrays|structure of arrays]]'' (SoA) data layout.<ref>{{cite web|title=Data-oriented demo:SOA,composition|url=https://www.youtube.com/watch?v=ZHqFrNyLlpA}}Demonstration of data-oriented and SOA features in the JAI language, also explaining the motives.</ref>▼
▲The experimental programming language [[Jonathan Blow#JAI language|JAI]] being developed by [[Jonathan Blow]] has explicit support for data-oriented design, while eschewing the traditional OOP paradigm. This is facilitated by being able to transparently move fields between [[Record (computer science)|records]] without extensive source code changes to functions using them (or without extensive [[boilerplate code]] to enable this), and by adding direct support for ''[[AOS and SOA#Structure of arrays|structure of arrays]]'' (SoA) data layout.
== See also ==
* [[CPU cache]]
* [[AOS and SOA]]
|