1. Introduction
Clusters are becoming a mainstay of high-performance computing. Some applications can take advantage of clusters by exploiting their capability for running large numbers of individual serial jobs, particularly when the cluster is running a batch scheduler. The most demanding applications, however, are implemented with true parallel algorithms and run as single parallel jobs. The development of the programming and execution environment for such applications is ongoing and quite active.