LISP and Symbolic Computation, 4(1)29-99
Compiling Lisp Programs for Parallel Execution
James R. Larus, Computer Sciences Department, University of Wisconsin-Madison, 1210 West Dayton Street, Madison, WI 53706, USA
|
Abstract: CURARE, the program restructurer described in this
paper automatically transforms a sequential Lisp program into an
equivalent concurrent program that runs on a multiprocessor. Data
dependences constrain the program's concurrent execution because, in
general, two conflicting statements cannot execute in a different
order without affecting the program's result. Not all dependences are
essential to produce the program's result. CURARE attempts to
transform the program so it computes its result with fewer
conflicts. An optimized program will execute with less synchronization
and more concurrency. CURARE then examines loops in a program to find
those that are unconstrained or lightly constrained by dependences. By
necessity, CURARE treats recursive functions as loops and does not
limit itself to explicit program loops. Recursive functions offer
several advantages over explicit loops since they provide a convenient
framework for inserting locks and handling the dynamic behavior of
symbolic programs. Loops that are suitable for concurrent execution
are changed to execute on a set of concurrent server processes. These
servers execute single loop iterations and therefore need to be
extremely inexpensive to invoke. Restructured programs execute
significantly faster than the original sequential programs. This
improvement is large enough to attract programmers to a
multiprocessor, particularly since it requires little effort on their
part.
|
This article is not available online.
|
|