DATA-ORIENTED DESIGN The hardware will thank you.

If you wish to submit an article, please contact support@dataorienteddesign.com for details.


Lots of good resources linked from this site by Daniele Bartolini: Data Oriented Design Resources

Data-Oriented Design book (2018 version)- html with links

Data-Oriented Design book (2018 version) - PDF download (better images)

Data-Oriented Design book - 2018 paperback version (with extra chapters)

Chinese translation provided by KouZhe / Martin Cole

Data-Oriented Design book (2018 version)- html with links

Data-Oriented Design book (2018 version) - PDF download (better images)

FIRST PREV : PAGE 0 : NEXT LAST

Chinese Language Translation of DOD book by KouZhe 31/12/2022:16:16:10

The data-oriented design book has a translation to Chinese now available for free online. Many thanks to Martin Cole / KouZhe for the work done.

I can't produce a paperback copy of this content as I can't verify the contents, but if you would like to view it, the translator recommends you use the PDF version as LaTeX does not convert to HTML very easily in English, and even less so in Chinese.

See the sidebar for links to the HTML (not recommended) and the PDF (recommended)

Simplicity Matters by Rich Hickey 15/02/2021:15:03:10

Rich Hickey talks about Simplicity as an objectively measurable feature of a codebase. Insights on the cost of complexity and the true meaning of easy lead to a final set of conclusions mirroring many of the data-oriented design principles. https://www.youtube.com/watch?v=rI8tNMsozo0

Data Oriented Tech Stack talk by Mike Acton 23/09/2019:07:30:10

Mike Acton talks as WeAreDevelopers explaining why he took a position at Unity, and what the future holds for us when we build on a data-oriented tech stack. https://www.youtube.com/watch?v=u8B3j8rqYMw

Unity showing the power of data-oriented design 03/11/2018:14:30:10

Unity showed an amazing presentation in Los Angeles and during the Keynote, they showed the power of the data-oriented design approach to game development with a high performance demo running on an iPhone. https://youtu.be/alZ6wmwvck0?t=6434

Unity has been doing some amazing work over the last few years, and seeing the outcome of their efforts like this is gratifying to say the least. Data-oriented design has always been a good way to move towards performance and scalability, but having a live example running in a public presentation like this will hopefully bring more people on-board the movement as a whole. Thanks to all those who have supported this site over the years, and feel free to suggest any other articles to link to on this front page.

Data-oriented design - paperback release 03/10/2018:20:02:00

The paperback book is available now via Amazon here, or here if you're in the UK.

As promised, the online resource has also been updated. It is in a new folder here so that links to the old resource still work.

Unfortunately, but due to the scope of the changes in the official first edition, the layout of the chapters has changed. If you have linked to content and want to update your links to point to the new online book, a simple update of the name in your links will not suffice. You will need to hunt down the content you wish to link to in the new document.

Data-oriented design - new book plans 19/08/2018:22:52:03

The content in the new Data-oriented design book has seen big changes, and though it's important to keep information free, the running the site does cost something, so I plan on making it a full price book to bring in the funds to keep the site running.

Currently, the plan is to upload the new version of the site based book, and release the paperback for sale at the same time. The online version isn't quite as pretty as the hardcopy, as the Latex to HTML I use doesn't work perfectly, but at least this way, students, and those less well off, can get the same content albeit in a less beautiful form.

I've tried to get Latex to convert to epub, but I must have some configuration files wrong, as conversions always fail. So right now, the plan is that if I get enough sales of the paperback, I will consider hiring someone to make the kindle version available.

Data-oriented design - new book release soon. 15/07/2018:17:16:03

It's been a long time coming, but the book that was put up for free as you can see here, finally has a successor. A first true edition that attempts to fix many of the issues with the previous version, and also fix the problem of not being generally available.

Data-oriented design, the book, was first started in 2010, as a collection of e-mails and blog posts. It was worked on part time its whole life. Finally, the writer has had the time and space to work on the updated version long enough that it's now ready for review prior to final release.

If you wish to be one of the reviewers of the new version, please send an-email to support@dataorienteddesign.com to register your interest. Signups are over for now.

Proof PDF copies are likely to be available from the 20th of July. Final relase, physical book and epub or kindle versions are likely to be available nearer November.

Mike Acton's data-oriented design workshop write-up 03/07/2018:22:44:03

Mike Acton ran a master class during Game Connection in Paris, and Jeremy Laumon (Patagames) wrote up his experience. What's nice about this is that it talks about understanding the data much more than it talks about what most people tar data-oriented design with, such as cache miss scares and memory bandwidth issues. In the workshop, Mike forces the participants to shed themselves of assumptions time after time.

http://danglingpointers.com/post/mike-actons-dod-workshop-2015/

Intel on Memory Layout Transformations 11/05/2018:23:06:34

It's an old article, but Amanda writes about AoS vs SoA, and presents AoSoA as an alternative that could increase data locality at both axes of the data without adding a large cost to either.

https://software.intel.com/en-us/articles/memory-layout-transformations


Unity moving to a data-oriented approach 19/03/2018:07:10:32

Nice to see Unity taking data-oriented design seriously. The massive difference in CPU utilisation suggests a much better tasking framework than initially expected. See here

Deep Pipes and looking for instruction dependency 01/06/2017:22:01:05

I came across this article on writing a really really fast json parser here

There are a few links in there that take you on a great tour of optimisations if you can spare the time to follow them, including a lovely post about 50% improvement in speed in SQLITE.

Scott Meyers - CPU Caches and Why You care 28/02/2017:09:43:42

I was recently shown a video by Scott Meyers on CPU caches, and the first ten minutes alone seems to be a reasonable push for understanding that DOD affects all langauges, not just C++ or C.

Link to the video https://vimeo.com/97337258 here for your viewing pleasure

Syntactic sugar to simplify SoA 10/09/2015:12:03:50

Manipulating data in structure of arrays format can be unweildy for some, but this post talks about making things easier for you using some simple templating to replace the manual side of iteration through the arrays.

Read here C++ encapsulation for Data-Oriented Design: performance and learn about keeping your DOD SoA approach tidier.

x86 architecture as an abstraction 26/03/2015:10:53:02

It has become more obvious to people involved in optimisation that the x86 architecture is a difficult platform to understand at the core. This is partially because of the multitude of different CPUs out there that support the instruction set, each with their different timings, but also because of this latest breed of extraordinarily out of order CPUs. Knowing what's actually going to happen in an i7 has become a near impossible task.

Read Robert Graham's post on x86 is a high-level language and try to see why it's so very difficult to grok the flow of data in these chips, and also how it's very difficult to guess what will be the best performing algorithm without doing a lot of real world tests.

Why is GNU grep so fast? 06/03/2015:15:06:44

Nice read on why grep is quick. Some simple stuff, some awesome algorithm usage, and generally the kind of thing that you might want to keep in your head for if you come across a searching pattern that is similar to grep in any way.

http://lists.freebsd.org/pipermail/freebsd-current/2010-August/019310.html

The perils of alignment - or how to fully utilise the cache 18/02/2015:11:23:50

A really interesting article with real world data on the potential cache misuses issues of large, 2^ aligned structures. This is another reason to be ware of keeping data in large structures rather than separate arrays. It doesn't happen much by accident, but it's the kind of thing that gets done on purpose because there were reasons in GPUs to keep things aligned, and the cargo cult goes deep with these kinds of knowledge.
How Misaligning Data Can Increase Performance 12x by Reducing Cache Misses

A Data-Oriented Hash table 12/01/2015:19:40:10

I was skeptical at first, but the author appears to have tested his efforts with real hardware, which of course is a core tenet of DOD. Also this is not a post about a new invention, but a set of results from tests where the author replaces a hash table with alternatives. It's interesting to look at the different timings, but remember to test your code and not just follow blindly, as you may have overhead somewhere else that makes the slowest in these tests, suddenly the fastest.

data-oriented-hash-table

Unit tests, and why they don't work. 30/08/2014:10:55:40

Chose a paradigm that allows for the simplest, least complex, most provably correct code.

http://www.rbcs-us.com/documents/Segue.pdf

Optimising by fitness function 07/08/2014:09:59:32

Here's another example of premature optimisation:

Swap data for energy, and the demand oriented approach to fulfilment changes the function used to determine fitness. With energy, the demand over time was well known, but ignored by thousands of people installing expensive hardware.

Solar panels facing the wrong way

What ORMs have taught me: just learn SQL 05/08/2014:10:49:08

What ORMs have taught me

The Mature Optimization Handbook 21/11/2013:09:57:40

A lovely book on optimisation by Carlos Bueno (from facebook's performance team).

Find the book available for free download here

Data-Oriented design parallel project 13/11/2013:08:44:59

As reference material for the book, a github project has been started to show the development of a game in both the Object-Oriented and Data-Oriented approaches.

Expect slow updates right now as it only has one developer and they are in full time employment at a startup so spare time is scarce. However, if you wish to follow along, the project is hosted here on github for all to see.

In addition to the parallel game development, submissions from other developers would be appreciated, specifically any demo code that provides ways to build timings for the performance oriented points of the book. For example, any code that could be used to directly show the impact of bad pipelining, bad cache alignment, or even the effects of write combining. The only rule will be that it has to be simple, and able to run on many platforms. Single platform statistics aren't much use unless they are targetting current trending hardware like ARM based CPUs.

Data-Oriented design book 23/06/2013:20:32:14

Update: the book is now in live public beta. Check the right bar now for the link .
Time to see if there is an audience for the book.
If Richard Fabian gets more than 100 people commenting on his post then he has promised to upload and publish his work in progress book on Data-Oriented design to this very website.
If this happens, we will be replacing the signup link with the link to the full book which will be updated as it progresses towards a printable version.

Data-Parallel Decompression of Triangle Mesh Toplogy 31/05/2013:12:10:53

A lovely example of how continually looking at the data from one step to the next resulted in a drastic reduction in space usage while still maintaining a data-parallel solution to the problem of mesh decompression.
link

Component-architecture and Entity-systems development 04/03/2013:16:09:23

Even people with big brains have reservations about components, so to finish off the section on component oriented design in the upcoming data-oriented design book, I'd really like some negative experiences so they can be solved in a troubleshooting like section.

I've noticed that there are some points where people get things a bit wrong in implementing components, and it causes things to tie together badly. Once they've started coupling things together, they don't see any benefit to components, and it becomes a bad example and part of their opinion on components. This negative experience spreads around by word of mouth, and that's just as bad as gossip.

There are probably some guidelines or guiding principles that can be distilled from these negative experiences that might help when trying to ensure people don't get lost. Troubleshooting is a good match as there are likely a number of similar negative experiences that can all be solved in a similar way.

For example, in my experience the thing that trips people up most is expecting components to talk to each other for some reason, like they are objects that can message each other in some two directional way. But in practice, I've found that's not necessary.

So I think we need some examples of cases where it might seem like components don't work, or are inefficient, and follow them with how you diagnose what's wrong with those assumptions.

If you've had any bad experiences with components, they're probably going to be more beneficial than positive ones, as helping people out of messes is a lot more positive than just announcing how cool something is.

send any experiences to support@dataorienteddesign.com
Mastodon