Content deleted Content added
m WP:CHECKWIKI error fix. Section heading problem. Violates WP:MOSHEAD. |
m WP:CHECKWIKI error fix for #03. Missing Reflist. Do general fixes if a problem exists. - |
||
Line 3:
== 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>
▲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.
{{stub}}▼
== See also ==
* [[CPU cache]]
Line 28 ⟶ 20:
* [[video game development]]
==References==
{{Reflist}}
[[Category:Computing]]
▲{{stub}}
|