Sunday, October 26, 2014

How Ubisoft develops games for Multicore at CppCon

Another presentation from CppCon, this time by Jeff Preshing who is a Technical Architect at Ubisoft Montreal

The talk is divided into two sections, and I found the first part nice to watch because there were some different patterns for concurrency that are particular to video games, and to see the approaches that are used for those situations was really interesting. Video games are cool application because they have strong time constraints (they have to push out a frame every 1/30 or 1/60 of a second), so they care about latency and scalability in multicore environments.

The presenter talks about a wait-free queue which, for the record, was created by Herlihy and Wing, as shown in The Art of Multiprocessor Programming, Fig 3.17

The second part is about C++11 atomics and it's not so interesting, better watch Herb Sutter talk on the subject. It is cool that they intend to use C++11 atomics because they develop for several different platforms (x86, PowerPC, ARM) which means that using these atomics makes their life easier in terms of writing portable code across these platforms.

There is also an interesting comment near the end by Michael Wong about std::memory_order_consume.

In the middle of the talk there is a question also from Michael Wong about relaxed atomics and whether they (the Ubisoft guys) use it for lock-free data structures, to which he answers no. Well, as it so happens, Andreia and I have discovered a lock-free linked list that uses relaxed atomics as we talked about on a previous post, and as far as I know, this is the only lock-free linked list using relaxed atomics currently in existence. Unfortunately, we only published a Java version, and the C++11 version will have to wait because we need to polish it a bit more.

Btw, if you don't know what they do at Ubisoft, one example is Assassin's Creed.

No comments:

Post a Comment