Parallel Programming: The Path from Multicore to Manycore

Intel Software Evangelist James Reinders writes that the best way to avoid panic in the coming wave of manycore systems is to think parallel.

Parallel programming is easy to understand and utilize when the work to be done is completely independent. It’s the interaction between concurrent tasks of an application that are challenging and therefore require a plan for managing sharing between concurrent tasks. The seemingly most fundamental sharing is simple sharing of data via shared memory, and yet nothing gives rise to more challenges in concurrent programming. All parallel computer designs struggle to offer some relief, varying from simple to exotic solutions, but in all cases the best results come from reduced sharing and the worst from unnecessary and frequent fine-grained sharing of data.

Nothing is more fundamental to parallel programming than understanding both sharing and scaling as well as the general relationship between them. Understanding sharing and how to manage it is the key to parallel programming — less is better.

Resource Links:

Latest Video

Industry Perspectives

"Exascale computers are going to deliver only one or two per cent of their theoretical peak performance when they run real applications; and both the people paying for, and the people using, such machines need to have realistic expectations about just how low a percentage of the peak performance they will obtain." [Read More...]