For people in the multi-core, high performance computing, this may be old hat. But I stumbled upon this when I was catching up with LTU Blog after a long time. This part of the paper caught my attention
The point is to identify the kernels that are the core computation and communication for important applications in the upcoming decade, independent of the amount of parallelism. To develop programming systems and architectures that will run applications of the future as efficiently as possible, we must learn the limitations as well as the opportunities. We note, however, that inefficiency on embarrassingly parallel code could be just as plausible a reason for the failure of a future architecture as weakness on embarrassingly sequential code.
One of the thoughts that keep coming back to me is how unprepared we are as an industry to take advantage of parallel computing and leverage multi-core. I am sure that research groups in all major software companies are chipping away at this problem but there is no broad visibility or urgency to tackle it.
I was looking for a programming model for parallel computation. Something you can teach to the next generation of programmers. I have not found much, but this paper was a good starting point for me.
Since real world applications are naturally parallel and hardware is naturally parallel, what we need is a programming model, system software, and a supporting architecture that are naturally parallel. Researchers have the rare opportunity to re-invent these cornerstones of computing, provided they simplify the efficient programming of highly parallel systems.
We believe that much can be learned by examining the success of parallelism at the extremes of the computing spectrum, namely embedded computing and high performance computing. This led us to frame the parallel landscape with seven questions, and to recommend the following: The overarching goal should be to make it easy to write programs that execute efficiently on highly parallel computing systems.Instead of traditional benchmarks, use 13 “Dwarfs” to design and evaluate parallel programming models and architectures. A dwarf is a pattern of computation and communication. Dwarfs are well defined targets from algorithmic, software, and architecture standpoints
This group took Phillip Colella’s “Seven dwarfs”, added seven more by examining the following areas:
- Embedded Computing (EEMBC benchmark),
- Desktop/Server Computing,
- Machine Learning,
- Data Base Software
The result was a list of 13 dwarfs in the following areas. This paper is fascinated reading. If you are interested in tracking this space, there is a wiki based web-site.
This space is exciting. There are lots of opportunities in research into parallelism – languages, communication and computing patterns, optimization, tools for monitoring and tuning performance, new algorithms and brand new applications.