a flexible communication abstraction for nonshared memory parallel computing
Writing parallel numerical programs is difficult. One problem is that the regular code and communication structure of typical parallel algorithms often becomes obfuscated when special cases at the boundaries of the computation are handled. Another problem is that parallel architectures can have vastly different communication structures, which makes it hard to maintain efficiency when a program is ported. This problem arises in practice because communication information either is defined implicitly by the local process codes or else is statically embedded in the compiler for the language. In this paper, we show how a communication abstraction called the port ensemble can simplify the handling of boundary conditions and the efficient porting of programs. A port ensemble provides an explicit interface between computation and communication descriptions, thus separating the communication structure from the details of local computation and from the compiler. Port ensembles structure ports , symbolic names to and from which a process can write and read values. To simplify the expression of boundary conditions, ports can be bound not only to ports on other processors, but also to non-existent neighbors (along the edge of the computation) using special objects that represent and implement constants, variables, and arbitrary functions. Port ensembles also provide direct access to the communication structure, which simplifies changing the structure to one appropriate for a new target architecture.
flexibility communication abstraction memorialized parallel parallel computation computation writing program code structure parallel algorithm parallel architecture architecture maintainability efficiency practical informal locality process embedding compilation language paper ensemble interfaces read values express processor object variability direct access