Vous voulez voir cette page en français ? Cliquez ici.

Have one to sell? Sell yours here
High-Performance Compilers for Parallel Computing
 
See larger image
 

High-Performance Compilers for Parallel Computing [Facsimile] [Paperback]

Michael Wolfe


Available from these sellers.



Product Details


Product Description

Book Description

Provides a clear understanding of the analysis and optimization methods used in modern commercial and research compilers for parallel systems. DLC: Parallel processing (Electronic computers)

From the Inside Flap

Techniques for constructing compilers for parallel computers have been in academic and commercial environments over the past 30 years. Some of these techniques are not quite mature and in common use, but there is still much active research in this area. Most of the reference material is scattered over many conference proceedings and journals. This book is intended to serve as coherent presentation of the important basic ideas used in modern compilers for parallel computer systems. It can be used as a reference or as a text for second or third course on compilers at the senior undergraduate or graduate level.

This book differs from previous collections in that its focus is not the automatic discovery of parallelism from sequential programs, though that is also included. Instead, its focus is techniques to generate optimized parallel code, given the source program and target architecture. The optimizer in high performance compilers is organized as a deep analysis phase followed by a code generation, or synthesis, phase. This book follows that organization.

The first chapter introduces the material and takes one example program through several stages of optimization for a variety of target machines. Each target architecture is presented at a high level, and is modeled after current commercial machines.

Chapter 2 discusses programming languages issues. Of particular interest are the parallel language extensions proposed for various languages, such as array assignments in Fortran 90, the forall statement in High Performance Fortran, and other parallel loop constructs.

Chapter 3 and 4 introduce basic analysis algorithms that are in common use in compilers. Chapter 3 focuses on algorithms for graphs, which are used in compilers to represent control flow, interprocedural calls, and dependence. Chapter 4 discusses various aspects of linear algebra, which is becoming more important in compilers, including subjects such as solving linear and integer systems of equations and inequalities.

Chapter 5 through 8 cover aspects of the analysis phase of the optimizer. Chapter 5 presents the basic ideas behind data dependence relations, as used in compilers. In order to allow the most freedom in reordering and optimizing a program, compilers find dependence relations between program statements that cannot be violated without changing the meaning of the program.

Chapter 6 discussed various aspects of scalar analysis that are important for parallel computing, such as constant propagation and precise data dependence analysis for scalars. In particular, induction variable detection is important for array analysis.

Chapter 7 shows how to use the linear algebra techniques from Chapter 4 to find data dependence relations between array references. Because the linear algebra appears separately, this chapter is somewhat shorter than such a chapter might be in other books on the subject.

Chapter 8 discusses other problems related to dependence analysis, such as summarizing array accesses across procedural boundaries, solving data dependence analysis problems in the presence of pointers and I/O, and so forth.

Chapter 9 details the techniques used in the restructuring phase of creating the optimizer, focusing on loop structuring techniques. A catalogue of loop optimizations is presented, along with examples to show effects on performance.

Chapter 10 through 14 show how to tailor the code generation for various target architectures. Chapter 10 discusses a sequential target machine in which the compiler restructures the program to take advantage of a memory hierarchy (typically one or more levels of processor cache memory).

Chapter 11 presents methods to generate code and optimize for shared-memory parallel computers, which are now becoming common even at the workstation level. Automatic discovery of parallelism is also discussed.

Chapter 12 shows how to apply similar techniques for vector instruction sets, including automatic vectorization and supervector code generation.

Chapter 13 presents code generation methods for massively parallel message-passing computer systems, of both the SIMD and MIMD variety.

Chapter 14 shows techniques for massively parallel shared-memory systems. Different methods are used for the three varieties of machines in this category, depending on whether processor cache memories are kept consistent using global information or local information, or are absent altogether.

Each chapter includes a section titled "In the Pit," which includes hints and other anecdotal material that may be of some use when applying the information covered in the chapter. A "Further Reading" section contains citations to the original material in the reference list, and the exercises can be used as assignments or to test comprehension of the material.

Additional material that has proved useful for teaching is available via anonymous FTP form the machine bc.aw.com in the directory bc/wolfe/highperform. This material includes Postscript copies of the figures, programs implementing many of the algorithms, and the Tiny loop restructuring tool. A more complete bibliography, in Bibtex format, along with citations by chapter, can also be found. There is a README file containing useful information about the rest of the directory.

Acknowledgments

This book grew out of a series of short courses that I offered over the past three years. Little material in this book is original or invented by the author; I owe a debt of gratitude to the many developers of the techniques used here. My introduction to this topic was working with the Parafrase group at the University of Illinois from 1976 to 1980. Many ideas now crucial in modern restructuring compilers were developed during the time. During my tenure at Kuck and Associates, Inc., I learned the important distinction between science and engineering , and the good engineering in a compiler is critically important. After joining the Oregon Graduate Institute, I have had more contacts with compiler researchers and developers around the globe; I have learned more during this period than ever before.

I especially thank the reviewers, who helped maintain consistency and made numerous important and helpful suggestions: Ron K. Cytron of Washington University, James Larus of the University of Wisconsin, Carl Offner of Digital Equipment Corp., J. (Ram) Ramanujam of Louisiana State University, David Stotts of the University of North Carolina, and Alan Sussman of the University of Maryland. Any errors contained herein are, of course, entirely my own fault. Several students at OGI reviewed selected chapters: Tito Autrey, Michael Gerlek, Priyadarshan Kolte, and Eric Stoltz. The editors and staff at the Benjamin/Cummings Publishing Co. were very encouraging, and to them I owe a great deal of gratitude.

Michael Wolfe



0805327304P04062001

Tag this product

 (What's this?)
Think of a tag as a keyword or label you consider is strongly related to this product.
Tags will help all customers organize and find favorite items.
Your tags: Add your first tag
 

Customer Reviews

There are no customer reviews yet on Amazon.ca
5 star:    (0)
4 star:    (0)
3 star:    (0)
2 star:    (0)
1 star:    (0)
 
 
 
Share your experience with this product with others
Create your own review
Most Helpful Customer Reviews on Amazon.com (beta)
Amazon.com: 4.7 out of 5 stars (3 customer reviews)

10 of 10 people found the following review helpful
5.0 out of 5 stars Essential reference for compiler writers, Feb 1 2007
By wiredweird "wiredweird" - Published on Amazon.com
This review is from: High-Performance Compilers for Parallel Computing (Paperback)
This is a modern classic. If you develop compilers for high performance computing (HPC), this must be on your shelves. It has a heavy emphasis on Fortran, the workhorse of HPC, but is widely applicable to other languages as well. The majority of the book's content reflects the large majority of processors that carry today's HPC load: sequential, von Neumann engines, even the computing ensemble as a whole has lots of them.

This book's real contribution is in its analysis of the loops that process arrays. Wolfe presents a number of ways to characterize dependencies, using quantitive techniques that go well beyond the graph-based presentations elsewhere. By casting the dependency problem in terms of integer programming or linear algebra, Wolfe make huge bodies of problem-solving knowledge available to the compiler developer. He also uses these quantitative terms to give new insight into loop transformations that the reader may already understand.

Despite the irreplaceable value of this book, I found it maddening to read. For some reason, the periods dropped off of nearly every sentence in the text. Then, just when I got used to that quirk, the periods appeared again. Their coming and going was so irregular throughout the book that I never really got into a steady reading rhythm. A much worse problem appeared throughout the first chapter, though. It's an exceptional discussion of matrix multiplication, a staple of performance computing. The chapter presents it again and again, to demonstrate differences in looping constructs and the organization of memory access. That part of the discussion was great. The problem is that it's wrong - a systematic error, in seemingly every example, replaced the scalar multiplication at the core of the algorithm with addition. It's hard enough trying to understand the interactions of loops nested five deep, language features, and memory hierarchies. Doing all that while mentally correcting the text's blunders is simply infuriating. Perhaps those problems were fixed after the 1996 edition that I read - for the reader's sake, I hope so. As it was, that first chapter left me wary of everything else in the book.

If you need it, though, you need it. Grit your teeth, brace yourself, and dive in. This is a valuable complement to the Allen&Kennedy text, and essential for anyone creating compilers for HPC architectures.

//wiredweird

2 of 3 people found the following review helpful
4.0 out of 5 stars A Practitioners Guide, Nov 12 2007
By A Student - Published on Amazon.com
This review is from: High-Performance Compilers for Parallel Computing (Paperback)
This book covers a lot of ground. Wolfe starts off with a chapter on machine architecture, then moves into language features that can be parallelized. Then there are chapters on graphs and linear algebra then he dives into an encyclopedia of data dependence, data flow, and control flow algorithms. I only made it about 1/3 of the way thru the book as it is oriented toward people actually implementing high performance compilers ie it's a practitioners guide. I gave the book four stars because the type setting (previously mentioned lack of periods) is appalling. Especially in this day and age.

2 of 3 people found the following review helpful
5.0 out of 5 stars It's the de-facto bible for parallel compiler optimizations, Sep 12 2007
By Z. Guo "Z" - Published on Amazon.com
Amazon Verified Purchase(What's this?)
This review is from: High-Performance Compilers for Parallel Computing (Paperback)
If you want to get into data dependency analysis of compilers, this book is absolutely the best. Many compiler book authors do not have the experience of writing a compiler of industrial strength, but Michael Wolfe does.
 Go to Amazon.com to see all 3 reviews  4.7 out of 5 stars 

Listmania!

Create a Listmania! list

Look for similar items by category


Look for similar items by subject


Feedback