Parallel programming for the masses?
Parallel programming for the masses -- why would you want that? Parallelism is primarily a means to an end – an approach that harnesses the power of many to solve one problem. It is true that many activities are intrinsically concurrent, and our current programming languages often artificially impose a serialization (or at least a serial order). But most users don’t care about parallelism – they want a clear, easy way to harness computers to do what they want. Eliminating artificial serialization is an important part of this (e.g., “find Sue’s phone number”, not “for i=1, number of records, if record[i] contains Sue’s name, print record[i].phoneNumber”), but the former is not explicit parallelism – it is implicit because it doesn’t define an order of execution for operations. (And yes, my example is deliberately ill-specified – what if there is more than one Sue in my address book?)
A mass market or commodity programming model needs to be one that is natural for the commodity user. Such a language should not introduce serialization; it also should not require explicit parallelism. It must focus on getting done what the user needs to do, not how it should be done.
So, is there no role for parallel programming models? Not at all – they are critical – but they must support the programmers that need to work with explicit parallelism. These programmers must also focus on performance – after all, if performance is not a concern, parallelism isn’t necessary. These programmers have both special requirements and special skills, and a programming model must support their work by enhancing their ability to develop and maintain correct and efficient parallel programs. Thus, any evaluation of the productivity benefits of a parallel programming model must focus on delivering correctness and performance with a reasonable investment of the programmer’s time. Further, this is only relevant for demanding applications – the challenge for a programming model is not to make it easy to write easy programs, but to make it possible to write complex programs.
I also recommend this delightful blog by Marc Snir.
Let wgropp [at] illinois [dot] edu (me) know what you think – should there be parallel programming for the masses or should parallel programming focus on supporting a smaller set of programmers that need to work with explicit parallelism?