Modern "non-strict" functional programming languages are a powerful means of programming highly parallel computers, but are intrinsically difficult to compile well because decisions about ordering of subcomputations must be taken at compile time. This book represents a new technique for compiling such languages by partitioning a program into sequential threads. While the interleaving of threads can vary at run time, within each thread the order is fixed.
A program is compiled by analyzing its data dependences, and developing from that a set of partitioning constraints. These practical algorithms are founded on a new theory of data dependence and ordering within functional programs, which defines dependence graphs in terms of a rewrite-rule operational semantics for the language.
By attacking the ordering problem directly, the book departs from previous approaches that obtain partitioning as a byproduct of optimizing lazy evaluation, and cleanly separates partitioning from other code generation issues. Furthermore, the method is flexible enough to produce both lazy code and also a less restrictive "lenient" variant which allows larger threads with only a slight decrease in expressive power. Code generation and optimization are explored in depth for both uniprocessor and multiprocessor targets.
Kenneth R. Traub is a researcher with the Motorola Cambridge Research Center.
Contents: Introduction. Background - Functional Language Compilers. Lenient Evaluation. Functional Quads. Code Generation. A Syntactic Theory of Data Dependence. Dependence-Based Partitioning. Conclusion.
"synopsis" may belong to another edition of this title.
(No Available Copies)
Search Books: Create a WantCan't find the book you're looking for? We'll keep searching for you. If one of our booksellers adds it to AbeBooks, we'll let you know!
Create a Want