Supporting Modularity in Massively Parallel Programs
Concurrent Aggregates addresses a key problem in programming languages for massively parallel machines: how to write programs that are both modular and highly concurrent. It describes a novel approach for managing program complexity, based on multi-access data abstractions and combining ideas from object-oriented and data-parallel approaches, that allows programmers to build modular programs without sacrificing concurrency. The concepts are developed and, using application kernels, evaluated for effectiveness and implementability. The programming language called Concurrent Aggregates incorporates innovative data abstraction tools that allow unlimited concurrency. Concurrent Aggregates surpasses existing data-parallel languages in its support for arbitrary concurrent abstractions, not simply arrays or sets, as well as its support for heterogeneous concurrency. By adapting a proven complexity management and code reuse technique, data abstraction, to massively parallel systems, Chien produces a language suited for high degrees of concurrency and modular programs. The data abstraction tools, aggregates, permit exploitation of both homogeneous data and heterogeneous concurrency (operations against a parallel abstraction) in uniform and efficient style. Aggregates can encapsulate arbitrary amounts of data and concurrency, thus limiting the complexity of Concurrent Aggregates programs. Concurrent Aggregates even supports efficient composition of concurrent data abstractions. Concurrent Aggregates is designed for machines of the future. Chien presents a vision of how to organize computations on massively parallel MIMD machines and program them in modular fashion while facilitating efficient execution by allowing tuning within each abstraction. His unique perspective as a designer of the processor, network, and operating systems for the J-Machine prototype results in a language design that reflects the costs of computation in future systems.