
What tools are needed?
At present there is a large discrepancy between the tools available in principle and the tools programmers use in their everyday's work. I would claim that today the debugger used by most people still is the "printf" function. Reasons for this situation are:
I think it would be a great progress if we could achieve to have:
- tools are different from one machine to the next. A user who programs for a variety of machines thus has to learn the interfaces of them all, which can be very tedious.
- tools are too restricted in scope. For example, a PA tool which only works post mortem does not help you if the job does not terminate successfully.
- tools are often designed by people who never have written more complex applications than a hello world program. Thus, they are happy to accept restrictions which make the tools completely useless in real applications.
- debuggers with the same user interface on every parallel machine. It must be possible to attach to runnng processes dynamically, and there must be a good mechanism for limiting the scope to subsets of the processes. Also, debugging must be supported at the level the programmer is familiar with, i.e. MPI or HPF, not at some level below.
- PA tools with as little intrusion as possible. Again, the display must be in terms of the programming interface used.
- A tool for deadlock detection in a real application would be great, one for detecting race conditions even better. I know that the latter one is extremely difficult to develop if you include interactions at the memory level (shared memory, cache problems on non-cache coherent architectures, etc.).
What is the future of PVM/MPI?
As a person who was involved in MPI from its very beginning, of course, I'm biased here. I think that MPI is well beyond the point where one could have doubts about its becoming THE standard for message passing. PVM officially never claimed to set a standard for message passing, whereas PVM users often thought it to be a standard. I think there are still lots of interesting questions for the PVM research project on NOW environments, ranging from fault tolerance over parallel I/O to other programming paradigms, such as RPC. MPI is and will be the standard for message passing programming on MPP systems.
For MPI, I don't think beyond MPI-2 at this time, and even that does not have the highest priority. I don't know of any MPI-1 implementation which could claim to have optimized the whole functionality. Many developers even restricted their efforts just on the point-to-point functions. So, there remains a lot to be done. For MPI-2 I think it would be a realistic goal to expect having complete implementations everywhere in two years time.
Your statement "the nice thing about standards is that there a so many of them" does not fit, because for message passing everything is already converging towards MPI. Only a few years ago there was quite a number of interfaces with large user communities, as, for example, NX, P4, PARMACS, PVM, TCGMSG. Today, the vast majority of users either use MPI or PVM, with PVM being pretty much restricted to workstation networks.
What is your vision of the programming environment 5 years from today?
Well, I'll try to be as realistic as possible. When, together with Jack Dongarra, Tony Hey and David Walker, I wrote a first MPI draft more than 5 years ago, people already told me that this was a superfluous activity, given that within a year or so everyone would write all applications in HPF, anyway. Now, five years later, people still use message passing, whereas HPF still is a pure research topic without any real user community. The reason MPI is so successful is that it provides the programmer with an interface at which he or she can describe exactly the communication required between the processes at exactly the points where the data is needed. Since communication always is an overhead which limits the parallel efficiency, generating the minimal communication is important for good scalability and performance. I expect that message-passing will never be outperformed by interfaces such as HPF or VSM.
This said, I think that it would be very unpleasent if applications programmers would have to do all the low-level programming themselves forever. The solution will be the development of comfortable PSEs (Problem Solving Environments) for specific target application classes. Parallel libraries, such as Scalapack or high-level communication libraries will further help in writing application codes more effectively. The provision of Internet servers for special problems, to which the programmer can send data and then receive the solution without having to write any program, will be another route.
Apart from that, I would not be surprised if most applications writers still used MPI-1 (with some additions from MPI-2, most of the times for parallel I/O) in five years from now. And, it would not surprise me either if many of them still used the "printf" debugger more often than not.