Content deleted Content added
No edit summary |
No edit summary |
||
Line 6:
These techniques became especially popular during the [[PS3]] and [[xbox 360]] console generation when the hazards of [[cache misses]] became 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 cycles away from the [[processing element]]s, consequently [[locality of reference]] issues dominate performance.
=== Contrast with OOP ===
Line 14 ⟶ 11:
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 on the surface 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 layout of individual fields and arrays convenient for 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 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 objects without extensive source code changes to functions using them, and adding direct support for [[SoA]] data layout.
Line 24:
* [[AOS vs SOA]]
* [[memory access pattern]]
[[category:computing]]
|