Showing posts with label parallelism. Show all posts
Showing posts with label parallelism. Show all posts

Wednesday, November 11, 2009

"Parallel Futures of a Game Engine"

I held one of the keynotes at the Intel Dynamic Execution Environment Symposium today (what a lovely concise conference name!). It's an internal Intel conference but as I'm an external speaker, I'm able to make my slides public.

I called my talk "Parallel Futures of a Game Engine":

Game engines have long been in the forefront of taking advantage of the ever increasing parallel compute power of both CPUs and GPUs. This talk is about how the parallel compute is utilized in practice on multiple platforms today in the Frostbite game engine and how we think the parallel programming models, hardware and software in the industry should look like in the next 5 years to help us make the best games possible.


It was a good and healthy process, while preparing this talk, to gather up both my own and our collective thoughts and experiences that we've had over the last few years. In order to try to build up and present a reasonably coherent vision and idea, which I think I succeeded with.

The talk is a bit of collection of some old material together with some new thoughts and conclusions about parallel programming models.

If you have any comments, ideas or further thoughts I would love to hear them!
Add a comment here, send me a mail or contact me on twitter (@repi)


Thursday, January 15, 2009

The parallelism shift and C++'s memory model

Johan Torp (who now works at DICE) wrote this great master thesis (pdf) about programming for parallelism and the C++/C++0x memory model.

It is a great and exhaustive read of the topic at 134 pages. Recommended for programmers or researchers that are fully serious about parallelism and/or interested in the changes & improvements C++0x brings to the field.

Abstract:

The first part of the thesis is an overview of the paradigmatic shift to parallelism that is currently taking place. It explains why processors need to become parallel, how they might function and which types of parallelism there are. Given that information, it explains why threads and locks is not a suitable programming model and how threading is being improved and used to extract parallel performance. It also covers the problems that await new parallel programming models and how they might work. The final chapter surveys the landscape of existing parallel software and hardware projects and relates them to the overview. The overview is intended for programmers and architects of desktop and embedded systems.

The second part explains how to use C++'s upcoming memory model and atomic API. It also relates the memory model to classical de nitions of distributed computing in an attempt to bridge the gap in terminology between the research literature and C++. An implementation of hazard pointers and a lock-free stack and queue are given as example C++0x code. This part is aimed at expert C++ developers and the research community.