CURARE, the program restructurer described in this dissertation, automatically transforms a sequential Lisp program into an equivalent concurrent program that executes on a multiprocessor. CURARE first analyzes a program to find its control and data dependences. This analysis is most difficult for references to structures connected by pointers. CURARE uses a new data-dependence algorithm, which finds and classifies these dependencies. The analysis is conservative and may detect conflicts that do not arise in practice. A programmer can temper and refine its results with declarations. 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. A restructerer must know all dependences in order to preserve them. However, 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 serv er 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. Although restructured programs may not make optimal use of a multiprocessor''s parallelism, they make good use of a programmer''s time.
Cited By
- Balabonski T, Pottier F and Protzenko J (2016). The Design and Formalization of Mezzo, a Permission-Based Programming Language, ACM Transactions on Programming Languages and Systems, 38:4, (1-94), Online publication date: 13-Oct-2016.
- Chase D, Wegman M and Zadeck F (2004). Analysis of pointers and structures, ACM SIGPLAN Notices, 39:4, (343-359), Online publication date: 1-Apr-2004.
- Griswold W and Notkin D (1995). Architectural Tradeoffs for a Meaning-Preserving Program Restructuring Tool, IEEE Transactions on Software Engineering, 21:4, (275-287), Online publication date: 1-Apr-1995.
- Baker H (1991). CLOStrophobia: its etiology and treatment, ACM SIGPLAN OOPS Messenger, 2:4, (4-15), Online publication date: 1-Oct-1991.
- Chase D, Wegman M and Zadeck F (1990). Analysis of pointers and structures, ACM SIGPLAN Notices, 25:6, (296-310), Online publication date: 1-Jun-1990.
- Chase D, Wegman M and Zadeck F Analysis of pointers and structures Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation, (296-310)
Recommendations
Restructuring Lisp programs for concurrent execution
Proceedings of the ACM/SIGPLAN PPEALS 1988This paper describes the techniques that the program transformation system CURARE uses to restructure Lisp programs for concurrent execution in multiprocessor Lisp systems and discusses the problems inherent in producing concurrent programs in a ...
Restructuring Lisp programs for concurrent execution
PPEALS '88: Proceedings of the ACM/SIGPLAN conference on Parallel programming: experience with applications, languages and systemsThis paper describes the techniques that the program transformation system CURARE uses to restructure Lisp programs for concurrent execution in multiprocessor Lisp systems and discusses the problems inherent in producing concurrent programs in a ...