Preface

Table of Contents
1. How to Read This Book
2. Obtaining, Using, and Modifying POOMA
3. History of POOMA
4. Acknowledgements

The POOMA Toolkit enables scientists and engineers to quickly translate scientific algorithms into efficient programs. The toolkit's containers facilitate storing and computing arrays of values by supporting element-wise, data-parallel, and stencil-based computations. The toolkit automatically handles all interprocessor communication so the same POOMA program can efficiently execute on a uniprocessor workstation or a supercomputer with thousands of processors. Thus, its creator can concentrate on the algorithms rather than their implementation details.

POOMA programs are written in C++. Scientists and engineers can use their existing knowledge of C++ and need only learn a few POOMA concepts rather than having to learn a whole new language. The easy-to-use POOMA interface hides sophisticated C++ code. For example, a POOMA programmer can use a simple data-parallel statements such as


double x; vector<1> v1(10000), v2(10000), v3(10000);
x = sum(v1 * sin(v2) - exp(v3));
and expect them to run efficiently without ever being aware of the underlying state-of-the-art expression template technology.

This book is aimed at scientists and engineers who want to quickly translate scientific algorithms into efficient programs running on one or thousands of processors. Although we will outline some scientific algorithms, no scientific background is required. Readers will need to be familiar with C++, the language in which POOMA programs are written. Classes, objects, function objects, template classes, and template functions will all be used. Appendix Appendix A contains a short introduction to template programming. Readers needing more background material might want to read Koenig and Moo's Accelerated C++, Stanley Lippman's C++ Primer, Bjarne Stroustrup's The C++ Programming Language, or the first half of Barton and Nackman's Scientific and Engineering C++.

Readers of this book will learn how to use the POOMA Toolkit to implement scientific algorithms. Since POOMA offers classes and functions corresponding to common scientific concepts, POOMA users will

Those wishing to learn how to write parallel or distributed programs will learn the fundamental concepts and see how easy it is to write the programs. Readers interested in advanced C++ techniques will see how these techniques, theoretically presented elsewhere, are actually used in practice. We hope all our readers will be intrigued by the power of POOMA's technology they will peek under the hood to see how the toolkit uses C++'s features.