Russell Hadley: The Route to C++ Code Optimization
- Posted: May 20, 2008 at 11:43 AM
- 36,260 Views
- 11 Comments
Loading User Information from Channel 9
Something went wrong getting user information from Channel 9
Loading User Information from MSDN
Something went wrong getting user information from MSDN
Loading Visual Studio Achievements
Something went wrong getting the Visual Studio Achievements
Right click “Save as…”
Comments have been closed since this content was published more than 30 days ago, but if you'd like to continue the conversation,
please create a new thread in our Forums,
or
Contact Us and let us know.
Follow the Discussion
Oops, something didn't work.
What does this mean?
Following an item on Channel 9 allows you to watch for new content and comments that you are interested in. You need to be signed in to Channel 9 to use this feature.What does this mean?
Following an item on Channel 9 allows you to watch for new content and comments that you are interested in and view them all on your notifications page.sign up for email notifications?
Excellent interview as always, it's great to see more of the C++ team.
I thought Charles read my mind here, as I was just thinking that it would be great to have some videos covering optimization.
If there were any more videos on this theme I would be interested to know about what C++ code is difficult to optimize and how we should best write C++ to give the optimizer the most help we can about the semantics of our code, perhaps covering __assume et al?
Thanks for another great In-Deep look into C++
Excluding cache factors, at what point can you know how many actual cycles or microseconds an operation takes? Is predicted performance always accurate? If not, what situations foul up predictions? Are there situations where performance is non-determinable?
Hi!
You bring up a good point. Because we generate code with this sequential translation approach there are times when some optimization transformations expose new opportunities. In general we call this the "Phase Ordering Problem". The traditional approach (what we do) is to re-run the transformations that are profitable when there's compiler throughput budget to do it. (of course we can't iterate forever in addition some of the problems won’t converge)
For the predicted cycles (and code size) of a particular instruction we typically start getting a rough idea at lower time when we select a machine opcode. This becomes more concrete through register allocation and becomes very concrete in compiler terms at encoding time. The compiler selected instruction has a processor defined cost in terms of machine resources (e.g. execution elements or slots in the out of order buffer) which are fixed but then data dependencies – is the input value available at the right time or schedule - and micro-architectural issues intrude. Finally as you say the cache trumps the other issues. I think it’s important to note here that we’re getting new machines all the time with different micro-architectures, in fact much more quickly than new compilers, and the compiler needs to try and make a single executable that gives good performance across a spectrum of machines. So some of the instruction performance characteristics are hard to know ahead of time. Of course we work closely with our partners to make sure that future machines provide good performance for Microsoft apps and tools output. Finally, with respect to predictability, if you know the machine, it’s micro-arch, the working set, and execution environment (OS and workload) theoretically you can predict exactly the performance (digital computer after all) but in actuality we model a “typical” case, maintain good engineering, and then do lots of benchmarking on real world scenarios to ensure the performance of our output code.
That's a good point. This is precisely why we created the Expert to Expert series. In this case, we wanted to reach as broad of a programmer audience as possible since C++ is only one programming language that gets compiled (the information here is not just relevant to C++ after all - note the conversation on what the .NET JIT does, etc).
I'm a generalist and we feel this is the best way to have deep, though broadly interesting, technical conversations.
You will see a C++ Expert to Expert interview on C9 in addition to the more broadly-scoped conversations.
Thanks,
C
Yay! This was an awesome interview btw, and I'd definitely like to see more of these going deep interviews in the near future.
Cheers
they called by "front end developer" the actual programmer (writing 3rd generation source code) ?!?
i believe that interviews like this one are not mean to help microsoft's image in any way (poor backend r&d guy would almost lough at the questions, poor guy...
anyway, you do what you gotta do, and we'll do what we gotta do 2!
???
Whatever....
C
Remove this comment
Remove this thread
close