July 2012

The full C++ and Beyond 2012 Schedule has been finalized, updated, and posted.

Download the schedule in PDF format here.

Also, just a reminder that tomorrow (Wednesday, August 1st) is the deadline to purchase your ticket – we have a few spots remaining.

I look forward to meeting you all in Asheville!



At the end of the Monday afternoon session, I will be making a special announcement related to Standard C++ on all platforms. Be there to hear the details, and to receive an extra perk that’s being reserved for C&B 2012 attendees only.

  • Note: We sometimes record sessions and make them freely available online via Channel 9, and we intend to do that again this year for some selected sessions. However, this session is for C&B attendees only and will not be recorded.

Registration is open until Wednesday and the event is pretty full but a few spaces are still available. I’m looking forward to seeing many of you there for a top-notch C++ conference full of fresh new current material – I’ve seen Andrei’s and Scott’s talk slides too, and I think this C&B is going to be the best one yet.

You’ll leave exhausted, but with a full brain and quite likely a big silly grin as you think about all the ways to use the material right away on your current project back home.

Regarding our panel on convincing your colleagues, it seems we aren’t the only ones who believe that the art of persuasion is important to software developers.  Check out Jeff Atwood’s recent blog post on this topic, “But You Did Not Persuade Me.”



I’ve been mulling over what to choose for my last session, and concluded I have a lot of interesting material on writing fast code. So I’m rolling my session “The Forgotten Parallelism” into a two-part talk on writing faster code.

I’m going to open with a section entitled The Art of Benchmarking. Many of us, me included, have been guilty of predicting or even estimating performance behavior of different constructs by using intuition. This shortcut is a natural reaction to the complexity of today’s computing architectures, and, just like many shortcuts taken in evaluating complex environments, is often difficult to generalize, misleading, or plain wrong.

As intuition is often useless, measuring is a vastly superior alternative. However, that approach has its own secret ingredients that are difficult to master. Too often code that’s supposed to benchmark some piece of code ends up measuring some irrelevant ancillary work (such as setting things up, looping, calling functions indirectly, or massaging and printing results). So benchmarking must systematically account for and compensate extraneous influences. Which brings us to choosing appropriate baselines. Good baselines are utterly important in measuring anything. It’s actually surprising how often benchmarks compare apples with oranges, or simply only show results for one brand of apples without providing reference points to assess whether one is better than the other.

So much about benchmarking. We’ll then dedicate some time to general approaches to speed optimization, with an emphasis on understanding the underlying dynamics (computation vs. data, straight-line code vs. control flow, semantics-preserving code transformation). And, as mentioned, “The Forgotten Parallelism” will become an integrated topic within this two-part session.

I should remind you all that registration is closing on August 1st. That’s next Wednesday! There are only a few seats left, so if you’ve considered joining, it’s time to make a decision.

See you soon, and happy coding. Well and happy benchmarking. Well and happy optimizing. And then happy benchmarking again. And… you catch my drift.

The registration deadline for C&B in Asheville is one week away: it’s this coming Wednesday, August 1.  At this moment, there are a few spots remaining, so there’s still space for you, but time is of the essence.  If you’ve been procrastinating, now is the time to register.

The registration page for C&B is here.

Scott, Andrei, Herb, and I look forward to seeing you in Asheville!


In 2010, C++ and Beyond‘s inaugural year, we delivered four hours of all-new technical presentations each day, plus an hour devoted to panel discussions and live Q&A.  That worked fine, but we felt we had more to say, so for 2011, we extended the time for technical presentations a bit.  That worked even better. For this year, we planned to follow the same schedule as last year, but the more we worked on our presentations, the more we realized that having a little more time would allow us to tell an even better technical story.  So we reworked the schedule again to give us additional time to cover the nuances of error resilience, the C++11 threading API, writing fast code, and the other topics we’ll address this year.  All told, C&B 2012 will devote more time than ever to all-new cutting-edge technical presentations: an increase of a bit more than 10%, compared to 2010.  And that’s not counting the panels and Q&A sessions!

The irony of the situation is that coming up with the kind of high-quality information people expect from C++ and Beyond is difficult, and each year, we worry that we won’t be able to pull it off.  Yet each year, we find that we have more to say than there is time available.  Why that’s the case, I don’t know, but I think it helps make each year’s C&B better than the previous year’s.


I wanted to give one last reminder that our special pricing for C++ and Beyond room rates at Grove Park Inn are only available through July 6 (today).

If you have been procrastinating on making hotel reservations, now is the time. We got a GREAT deal on the hotel rooms, so if you don’t make the reservations by today you may end up paying a lot more for your room.

The details on how to book your room are on the Venue Page.


We’re mulling over a lot of hot topics at C++ and Beyond 2012. Don’t forget we’re at almost 75% capacity so you hurry up and register now to secure you or your team a seat (and don’t forget the 10% discount for teams). Here’s a session I hope you’ll find informative. I sure learned a thing or two while working on it.

The Good

There’s been a lot of talk lately about multicore CPUs and how to use them effectively. In all this excitement, it’s often forgotten that each CPU is quite parallel in and of itself – it has multiple ALUs, superscalar execution, pipelining, and more—generally lots of dedicated, redundant hardware ready to support Instruction-Level Parallelism (ILP). Much of ILP detection and exploitation is happening automatically…

The Bad

…but the effectiveness of such mechanisms is heavily dependent on the high-level coding style. Code snippets of identical effect may actually exhibit very different performance profiles, and often it’s code that looks smaller, tighter, and more economical that’s the loser. We need to retrain some of our code reviewing taste buds if we care about performance.

The problem with wasting CPU-level parallelism is that its benefits are impossible to recover at a higher level. Losing ILP essentially means renouncing some valuable CPU real estate – that dark silicon will never light up. This problem affects multi-core and single-core processors alike (the latter being still in heavy use in embedded systems).

The Pretty

The good news is, there are things to do at high level to improve the utilization of CPUs’ ILP capabilities. This talk demonstrates with examples and numbers that certain styles of programming naturally lead to better ILP, which is readily exploited by the compiler and hardware to attain spectacular speed improvements. This all in spite of the code not initiating any specific parallel actions and looking generally not parallel at all.