What is your "parallel" style?
Well, starting from where I left last, parallel computing is a complex business but then the computing industry is working to simplify this daunting task. There is a rich variety of solutions already in the shelves today - near-Auto Parallelizers, Accelerators, a wide collection of libraries and other high level abstractions. There are also the traditional low level support and programming languages that offer rich customizations and optimizations. This post gives a neat classification of various tools and programming abstractions in GPU Computing.
So it's really the need, as is the case for any decision, that drives the style of the parallel code. You could do it all yourself by custom coding or achieve parallelism by using some automatic means. You could be building a completely fresh parallel program or perhaps converting an existing serial program to a parallel one. The diagram below sort of puts some structure to help you decide your program style:
I have only listed the most popular methods available today that caters to 2 different objectives. It is quite possible that the need is to achieve high performance by fine tuning the code to work very well on a particular parallel hardware. This will require intimate knowledge of the target hardware. This, as shown in the digram, is the Custom Parallelization path that, if done correctly, can yield high performance. This path will be opted by a mature, parallel computing programmer. Such a style will be most suitable for core scientific applications and frameworks or libraries, where it will essential to achieve the highest performance possible on a given hardware. On the other hand, it is possible that the intent is to achieve parallelization rapidly and a reasonable application performance is acceptable. This, as shown in the diagram, is Rapid Parallelization that yields accelerated parallelization with perhaps reasonable performance. The performance optimization is left to the software aid or accelerator used. I have categorized the available software accelerators, programming languages, libraries and other utilities that can help achieve, both, custom parallelization and rapid parallelization objectives.
HPC is a fertile ground for research and I am sure that there are going to be rapid advancements in the next few years. Every vendor is aiming to make parallel programming simpler and this will spur HPC adoption greatly, especially in the enterprise world. At Infosys research too, we are building tools that will smoothen the steep learning curve of parallel computing and accelerate conversion of sequential applications to their parallel couterparts. We are also working on the software engineering aspects of building new HPC applications.
Hmm, I have already said too much. Just like the TV Sitcoms, that leave the audience each day with enough anticipation to watch the next episode, I will end this with this whiff of our work. In the meantime, you could think about what is your parallel programming style.