Intel Go Parallel
Intel
Getting Started Concurrent Programming Community And Opinion Tools and Tips Advanced Concepts Go Parallel RSS Feed
 Print Print

Mission: Impossible No More
Results from the front lines of parallel programming show a promising new shift in attitudes towards concurrency: Developers are increasingly aware of the importance of maximizing multi-core performance, and they see the value of abstractions in helping them get there. 

Read Alexa Weber Morales' counter to this article.

I have some interesting data from the front lines of parallel programming to share.

It is common wisdom that parallel programming is hard. I'm an optimist who does not believe it has to be that way, but also a realist who agrees that it requires change which is slow in coming.

I have spent hours reading and hearing pitches on the advances needed to programming languages to make them more suitable for parallel programming. I divide such conversations into two categories: one, high level abstractions that actually make parallel programming easier, and two, critical and essential low level tweaks that make it possible to build the former. I love both types of discussions, but any time I'm in discussions of the work to do in category two, I walk out wondering if there is any hope at all to make progress on category one in our lifetimes.

Fortunately, I have real data that we are making considerable real-world progress. I say fortunately because it helps me survive category-two meetings.

Last year, we did a survey of projects we believe are among the movers and shakers in software development. It includes hundreds of applications and companies around the globe.

We asked two questions:

  1. If you added parallelism to your serial application, how did you do it?
  2. If you didn't add parallelism to a serial application—why not?

 

If you added parallelism to your application, how did you do it?

Remembering my strong contention that we need "high level abstractions that actually make parallel programming easier", I cringe when I see the answer to parallelism being raw threads (pthreads, Windows threads, Boost threads, Java threads, etc.).

A pleasant surprise was that only 50% of projects we surveyed still went that route. The other 50% found a higher-level abstraction, as follows:

  • 19% Intel Threaded performance libraries (MKL or IPP)
  • 17% OpenMP
  • 6% Threading Building Blocks
  • 3% Threaded libraries (other than ones from Intel)

Using threaded libraries, OpenMP and Threading Building Blocks are exactly the higher-level programming models I see as most available and usable today. Developers appear to agree.

These higher-level programming models let a programmer focus more on writing code and less on the low-level details of the hardware. At the same time, they tend to show excellent results on scaling and make debugging the application bearable. Use of raw threads makes scaling and debugging a larger challenge and one demanding expertise, time and patience. Even when you have the expertise, the time and patience can be most difficult to manage.

I'm excited to see developers up to 50% abstraction usage. This is much higher than what we believe to have been the case only a few years ago. And I expect the trend will continue, much like the trend to leave assembly-language programming behind started decades ago and ended in the 1990s when even gamers and operating system developers abandoned any significant amount of assemble language coding. Higher-level programming languages are more portable and debuggable than assembler. And so it is with parallel programming as well.

If you didn't add parallelism to a serial application, why not?

For those not using parallelism yet, a surprisingly small 27% were willing to say they don't yet think adding parallel programming is needed. The other responses were:

  • 55% No time to fit adding concurrency into project schedules
  • 14% Concurrency is too technically difficult
  • 5% Other or unsure

At the very least, the majority of development teams now find it unfashionable to say they won't be adding parallelism. My more direct experience tells me that developers are serious about adding use of parallelism, but it is now one of many things on their wish list for development that has to compete with other features and ideas. So adding parallelism is now elevated to a planning issue. Of course, we still need the abstractions so that when things are planned they can be done!

These trends are interesting—and put all the more pressure on tool vendors to be up to the task to support the move to parallel programming.


   
James Reinders is a senior engineer and is currently the director of business development and marketing for Intel's Software Development Products and serves as the chief evangelist and spokesperson. He has been a leader in the creation of Intel's Software Products including product plans, support, technical marketing, marketing and business development. Reinders' is also the author of Intel Press book titled 'VTune Performance Analyzer Essentials' and contributor to the new book 'Multi-Core Programming.'
Submit article to:
Ever wonder why we don't hear more from threading practitioners about how they managed to grok concurrency? Perhaps it's because they're too busy enjoying the performance increases. They won't say it's easy, but the Vegas Pro developers at Sony Creative Software are understandably proud of their growing expertise in threading and OpenMP. »
While threading can be a challenge, new software development tools help simplify the process by identifying thread correctness issues and performance opportunities. We present a methodology that has been used to successfully thread many applications and discuss tools that can assist in developing multi-threaded applications. »
This paper describes the performance analysis phase of the threading methodology we presented in our previous paper, "Best Practices for Developing and Optimizing Threaded Applications." »
Understanding Dual Processors, Hyper-Threading Technology, and Multi-Core Systems
Multi-Threading in a Java Environment
» More Personalized Content
Getting Started (94)
Concurrent Programming (110)
Community and Opinion (50)
Tools and Tips (86)
Advanced Concepts (60)
What concurrency info do you need right now?
(Choose your top answer.)
An introduction
Threading basics
Advanced parallelism concepts
Optimization tools and techniques

View Results
Past Votes