Next: Programming Technology Up: Discussion of Software Previous: Discussion of Software

Programming Languages and Models

Programming languages and models are the notations and underlying concepts used for writing programs. Although there is not a sharp dividing line, we can distinguish two kinds programming methods: building software ``from scratch'' and assembling software by ``wiring together'' pre-existing modules, with comparatively little customization. This section focuses on technology supporting the former method; technology for the latter is discussed in the next section under ``Programming Technology.''

Generally, programmers have been able to use Fortran and message passing to port scientific and engineering codes that do not require particularly high-performance I/O to multiprocessors. Some classes of codes have also proved to be amenable to the commercial predecessors of HPF, CM Fortran, and MasPar Fortran. These efforts have been the most successful in the case of dense matrix codes, but programming costs are still high and portability is low. We are also making progress in developing tools for some limited domains of sparse matrix computations, but this is still a struggle. Except for massively parallel, coarse grain, regular programs execution speeds are often slower than comparable programs running on vector supercomputers and developed at less cost.

Parallelizing compilers have not achieved the initially expected success. There are still ongoing efforts to parallelize code and also automatically distribute data for distributed memory machines. Even though these efforts may achieve good performance for small kernels, it is not clear (at least until now) how successful they can be for full programs, which tend to be large and have complicated logic.

For more detailed discussion, it is best to subdivide the broad area of programming languages and models into several (overlapping) categories as follows:

Hardware support has often proven to be valuable here: examples include the use of cache memory and virtual memory for locality management. Latency management has a shorter history but is likely to become increasingly important as we move toward PetaFLOPS. We need to understand better how hardware and software can help each other solve this problem.



Next: Programming Technology Up: Discussion of Software Previous: Discussion of Software


gcf@npac.syr.edu