Herb Sutter, Software architect at Microsoft and C++ guru, has posted his slides (PDF) from OGDC, a game development conference. His talk was on the challenge programming for concurrency. If you’re not familiar with the subject, the earlier article The Free Lunch is Over is a great starting point.
The free lunch is the assumption that faster processor speeds will fix our slow applications. It’s now well-known that chipmakers are running into the wall in terms of speed, but getting very good at providing multiple processors. The secret of faster or smarter software is to take advantage of those multiple processors with concurrent programming.
A few highlights from the slides:
- Sutter says that manycore processors are improving rapidly: “Intel could build 100-Pentium chips today if they wanted to.”
- He observes that the issue is largely solved on the server, but not on the client
- Locking is inadequate as a way of managing shared state. In particular, it breaks composability
- He favours transactional memory to reduce but not eliminate dependency on locks: “Version memory ‘like a database.’ Automatic concurrency control, rollback and retry for competing transactions”
Finally, Sutter says:
The concurrency sea change impacts the entire software stack: Tools, languages, libraries, runtimes, operating systems. No programming language can ignore it and remain relevant.
My comment: we’ve seen threading get a little easier in programming languages like C# and Java, thanks to wrapper classes, and in C++ OpenMP can work magic, but what is the radical language innovation that will make concurrency achievable for mortals?
I remember reading about an operating system called TAOS, 15-odd years ago. It was written by a few Brits and could run on virtually any architecture, and was designed for massively parallel hardware.
Like most computing innovations dreamt up in this country it eventually fell by the wayside. I mean, we even invented public key encryption at GCHQ before RSA did, but we failed to exploit that as well. Ho hum.
Trackback: Parallel LINQ