Software: The key to high-performance computing

Francis Wray, Concertant

Over the last 30 or more years advances in supercomputing have largely come through innovations in hardware. Examples of this include the freon cooling in the Cray-1, the fast ECL of FPS array processors, the NEC SX vector processors, the INMOS Transputer, the Connection machine internal network, the Meiko CS-2 communication subsystem and the KSR-2 heirarchical memory. Over time, many of these and other innovations have found their way into more general purpose computing. It is interesting to note that over the past decade or so, the traffic has been in the other direction as commodity processors have become commonplace in high-performance computers systems.

Of course, hardware innovation will continue in all forms of computing, but the key to exploiting the potential performance of hardware will depend more than ever before on software. Before long, a typical compute node will comprise a multicore processor, possibly with heterogeneous cores, coprocessors such as GPGPUs or FPGAs, memory and some communication structure to other such nodes. How will collections of these nodes be managed, how will these nodes be programmed, what will the programming models be and what languages will be used? How will "ordinary programmers" access the power of such systems, particularly when it seems likely that a standard PC will comprise one such node?

Of course, in a perfect world there would be a 10-year roadmap encompassing hardware, both processor architecture and memory systems, programming models and languages. The user would be able to track the development of hardware and the corresponding evolution of programming models and software development tools and make informed choices to optimise investment in both systems and software. The reality, however, is somewhat different. No one manufacturer seems to have a joined up roadmap for hardware and software. There seems to be no coherent view across the major manufacturers. There seems to be no initiative setting out a blueprint for the development of programming models and languages. Who is taking the initiative to develop new programming models and languages appropriate to the new hardware?

Where is this all going to lead? Hardware is certainly going to get more powerful as processors comprise more and more cores and GPGPUs continue their rapid development. However the lack of a clear roadmap is going to lead to a series of short-term fixes, either hardware or software. The loser in all of this will be the applications developers who will have to rewrite software to take advantage of hardware innovations or face a fixed or even declining level of performance. Unless the right tools are developed the task of rewriting will not only be repetitive, but it will also be difficult and draw on the limited resources of the small pool of talented programmers able to make do with what is available. There needs to be an industry-wide initiative starting now to make sure that the right tools are in the right hands at the right time.

SC08 has been one of the most exciting events in HPC for some time. There is a rush of anticipation across the industry in the face of developments such as Nehalem, Shanghai, Firestream, Larrabee and Convey. This anticipation will turn to frustration and diappointment unless these significant hardware achievements are complemented by breakthroughs in the way we program ever more complex systems. The ball is in everyone's court.