Para-functional programming: a paradigm for programming multiprocessor systems

One of the most important pragmatic advantages of functional languages is that concurrency in a program is <i>implicit</i> -- there is no need for special constructs to express parallelism as is required in most conventional languages. Furthermore, it is fairly easy for compilers to automatically determine the concurrency as a step toward decomposing a program for execution on a suitable parallel architecture. Yet it is often the case that one knows precisely the <i>optimal decomposition</i> for execution on a particular machine, and one can never expect a compiler to determine such optimal mappings in all cases. This paper is concerned with ways to allow the programmer to <i>explicitly</i> express this mapping of program to machine, by using annotations that, given a few minor constraints, cannot alter the functional semantics of the program. We show through several detailed examples the expressiveness and conciseness of the resulting "para-functional" programming methodology, using an experimental language called <i>ParAlfl</i> based on our ideas. We also give a formal denotational description of the mapping semantics using a notion of <i>execution trees.</i>This research was supported in part by NSF Grants DCR-8403304 and DCR-8451415, and a Faculty Development Award from IBM.

[1]  Paul Hudak,et al.  The aggregate update problem in functional programming systems , 1985, POPL.

[2]  James R. McGraw,et al.  The VAL Language: Description and Analysis , 1982, TOPL.

[3]  Ehud Shapiro Systolic Programming: A Paradigm of Parallel Processing , 1984, FGCS.

[4]  Paul Hudak,et al.  Experiments in diffused combinator reduction , 1984, LFP '84.

[5]  Michael J. C. Gordon,et al.  The denotational description of programming languages - an introduction , 1979 .

[6]  Robert M. Keller,et al.  Simulated Performance of a Reduction-Based Multiprocessor , 1984, Computer.

[7]  Paul Hudak,et al.  Higher-order strictness analysis in untyped lambda calculus , 1986, POPL '86.

[8]  Rex L. Page,et al.  Deleting Irrelevant Tasks in an Expression-Oriented Multiprocessor System , 1981, TOPL.

[9]  Arvind V. Kathail A multiple processor data flow machine that supports generalized procedures , 1981, ISCA '81.

[10]  Michael J. C. Gordon,et al.  The Denotational Description of Programming Languages , 1979, Springer New York.

[11]  A. L. Davis,et al.  The architecture and system method of DDM1: A recursively structured Data Driven Machine , 1978, ISCA '78.

[12]  HewittCarl,et al.  The incremental garbage collection of processes , 1977 .

[13]  Michael Beeler Beyond the Baskett benchmark , 1984, CARN.

[14]  Arvind,et al.  The U-Interpreter , 1982, Computer.

[15]  Paul Hudak,et al.  Serial Combinators: "Optimal" Grains of Parallelism , 1985, FPCA.

[16]  John B. Shoven,et al.  I , Edinburgh Medical and Surgical Journal.

[17]  Daniel P. Friedman,et al.  Constraining control , 1985, POPL.

[18]  Robert M. Keller,et al.  A loosely-coupled applicative multi-processing system* , 1979, 1979 International Workshop on Managing Requirements Knowledge (MARK).

[19]  Robin Milner,et al.  A proposal for standard ML , 1984, LFP '84.

[20]  D. A. Turner,et al.  Miranda: A Non-Strict Functional language with Polymorphic Types , 1985, FPCA.

[21]  Chris Hankin,et al.  The theory and practice of strictness analysis for higher order functions , 1985 .

[22]  Jarek Deminet Experience with Multiprocessor Algorithms , 1982, IEEE Transactions on Computers.

[23]  Paul Hudak Distributed task and memory management , 1983, PODC '83.

[24]  Jack B. Dennis,et al.  A preliminary architecture for a basic data-flow processor , 1974, ISCA '75.

[25]  Paul Hudak,et al.  Garbage collection and task deletion in distributed applicative processing systems , 1982, LFP '82.

[26]  Robert M. Keller,et al.  Approaching Distributed Database Implementations through Functional Programming Concepts , 1985, ICDCS.

[27]  Charles L. Seitz,et al.  The cosmic cube , 1985, CACM.

[28]  Carl Hewitt,et al.  The incremental garbage collection of processes , 1977 .

[29]  Alan Mycroft,et al.  Abstract interpretation and optimising transformations for applicative programs , 1982 .

[30]  F. Warren Burton,et al.  Annotations to Control Parallelism and Reduction Order in the Distributed Evaluation of Functional Programs , 1984, TOPL.

[31]  Seymour Papert,et al.  Mindstorms: Children, Computers, and Powerful Ideas , 1981 .

[32]  Paul Hudak,et al.  Distributed execution of functional programs using serial combinators , 1985, IEEE Transactions on Computers.

[33]  Brian Cantwell Smith,et al.  Reflection and semantics in LISP , 1984, POPL.

[34]  Joseph E. Stoy,et al.  Denotational Semantics: The Scott-Strachey Approach to Programming Language Theory , 1981 .