POOMA

A C++ Toolkit for High-Performance Parallel Scientific Computing

Jeffrey D. Oldham

CodeSourcery, LLC

All rights reserved. This document may not be redistributed in any form without the express permission of the author.


Table of Contents
Acknowledgements
1. Introduction
1.1. POOMA Goals
1.2. POOMA is Open-Source Software
1.3. History of POOMA
2. Programming with Templates
2.1. Templates Execute at Compile-Time
2.2. Template Programming for POOMA Users
2.3. Template Programming Used to Write POOMA
3. A Tutorial Introduction
3.1. Installing POOMA
3.2. Hand-Coded Implementation
3.3. Element-wise Array Implementation
3.4. Data-Parallel Array Implementation
3.5. Stencil Array Implementation
3.6. Distributed Array Implementation
3.7. Data-Parallel Field Implementation
3.8. Distributed Field Implementation
4. Overview of POOMA Concepts
4.1. POOMA Containers
4.1.1. Choosing a Container
4.1.2. Declaring Sequential Containers
4.1.3. Declaring Distributed Containers
4.2. Computation Modes
4.3. Computation Environment
5. Array Containers
5.1. Containers
5.2. Arrays
5.3. Domains
5.3.1. Declaring Domains
5.3.2. Using Domains
5.4. Declaring Arrays
5.5. Using Arrays
5.6. DynamicArrays
6. Engines
6.1. The Concept
6.2. Types of Engines
7. Data-Parallel Expressions
7.1. Expressions with More Than One Container Value
7.2. Using Data-Parallel Expressions
7.3. Implementation of Data-Parallel Statements
7.3.1. Naïve Implementation
7.3.2. Portable Expression Template Engine
8. Container Views
A. Obtaining and Installing POOMA
A.1. Supporting Distributed Computation
A.1.1. Obtaining and Installing the MM Shared Memory Library
A.1.2. Obtaining and Installing the Cheetah Messaging Library
A.1.3. Configuring POOMA When Using Cheetah
Glossary
List of Tables
2-1. Correspondences Between Run-Time and Compile-Time Constructs
2-2. More Correspondences Between Run-Time and Compile-Time Constructs
4-1. POOMA Concepts
4-2. POOMA Container Summary
4-3. Choosing a POOMA Container
5-1. Declaring One-Dimensional Locs
5-2. Declaring Multidimensional Locs
5-3. Declaring One-Dimensional Intervals
5-4. Declaring Multidimensional Intervals
5-5. Declaring One-Dimensional Ranges
5-6. Declaring Multidimensional Ranges
5-7. Declaring One-Dimensional Grids
5-8. Declaring Multidimensional Grids
5-9. Some Domain Accessors
5-10. Declaring Arrays
5-11. Initializing Arrays' Domains
5-12. Array Internal Type Definitions and Compile-Time Constants
5-13. Array Accessors
5-14. Changing a DynamicArray's Domain
6-1. Types of Engines
7-1. Operators Permissible for Data-Parallel Expressions
7-2. Mathematical Functions Permissible for Data-Parallel Expressions
7-3. Comparison Functions Permissible for Data-Parallel Expressions
7-4. Miscellaneous Functions Permissible for Data-Parallel Expressions
List of Figures
1-1. How POOMA Fits Into the Scientific Process
3-1. Doof2d Averagings
3-2. Adding Arrays
3-3. Applying a Stencil to an Array
3-4. The POOMA Distributed Computation Model
4-1. Concepts For Declaring Containers
4-2. Array and Field Mathematical and Computational Concepts
7-1. Adding Arrays with Different Domains
7-2. Annotated Parse Tree for -A + 2*B
List of Examples
2-1. Classes Storing Pairs of Values
2-2. Templated Class Storing Pairs of Values
3-1. Hand-Coded Implementation of Doof2d
3-2. Element-wise Array Implementation of Doof2d
3-3. Data-Parallel Array Implementation of Doof2d
3-4. Stencil Array Implementation of Doof2d
3-5. Distributed Stencil Array Implementation of Doof2d
3-6. Data-Parallel Field Implementation of Doof2d
3-7. Distributed Data-Parallel Field Implementation of Doof2d
5-1. Copying Arrays
5-2. Using Array Member Functions
5-3. Example Using DynamicArrays