<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> <title>Chapter 12. Boost.MPI</title> <link rel="stylesheet" href="boostbook.css" type="text/css"> <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> <link rel="home" href="index.html" title="The Boost C++ Libraries BoostBook Documentation Subset"> <link rel="up" href="libraries.html" title="Part I. The Boost C++ Libraries (BoostBook Subset)"> <link rel="prev" href="lambda/s10.html" title="Rationale for some of the design decisions"> <link rel="next" href="mpi/getting_started.html" title="Getting started"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table cellpadding="2" width="100%"><tr> <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../boost.png"></td> <td align="center"><a href="../../index.html">Home</a></td> <td align="center"><a href="../../libs/libraries.htm">Libraries</a></td> <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> <td align="center"><a href="../../more/index.htm">More</a></td> </tr></table> <hr> <div class="spirit-nav"> <a accesskey="p" href="lambda/s10.html"><img src="../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="libraries.html"><img src="../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="index.html"><img src="../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="mpi/getting_started.html"><img src="../../doc/html/images/next.png" alt="Next"></a> </div> <div class="chapter" title="Chapter 12. Boost.MPI"> <div class="titlepage"><div> <div><h2 class="title"> <a name="mpi"></a>Chapter 12. Boost.MPI</h2></div> <div><div class="author"><h3 class="author"> <span class="firstname">Douglas</span> <span class="surname">Gregor</span> </h3></div></div> <div><div class="author"><h3 class="author"> <span class="firstname">Matthias</span> <span class="surname">Troyer</span> </h3></div></div> <div><p class="copyright">Copyright © 2005-2007 Douglas Gregor, Matthias Troyer, Trustees of Indiana University</p></div> <div><div class="legalnotice" title="Legal Notice"> <a name="id1365286"></a><p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top"> http://www.boost.org/LICENSE_1_0.txt </a>) </p> </div></div> </div></div> <div class="toc"> <p><b>Table of Contents</b></p> <dl> <dt><span class="section"><a href="mpi.html#mpi.intro"> Introduction</a></span></dt> <dt><span class="section"><a href="mpi/getting_started.html"> Getting started</a></span></dt> <dd><dl> <dt><span class="section"><a href="mpi/getting_started.html#mpi.mpi_impl"> MPI Implementation</a></span></dt> <dt><span class="section"><a href="mpi/getting_started.html#mpi.config"> Configure and Build</a></span></dt> <dt><span class="section"><a href="mpi/getting_started.html#mpi.installation"> Installing and Using Boost.MPI</a></span></dt> <dt><span class="section"><a href="mpi/getting_started.html#mpi.testing"> Testing Boost.MPI</a></span></dt> </dl></dd> <dt><span class="section"><a href="mpi/tutorial.html"> Tutorial</a></span></dt> <dd><dl> <dt><span class="section"><a href="mpi/tutorial.html#mpi.point_to_point"> Point-to-Point communication</a></span></dt> <dt><span class="section"><a href="mpi/tutorial.html#mpi.collectives"> Collective operations</a></span></dt> <dt><span class="section"><a href="mpi/tutorial.html#mpi.communicators"> Managing communicators</a></span></dt> <dt><span class="section"><a href="mpi/tutorial.html#mpi.skeleton_and_content"> Separating structure from content</a></span></dt> <dt><span class="section"><a href="mpi/tutorial.html#mpi.performance_optimizations"> Performance optimizations</a></span></dt> <dt><span class="section"><a href="mpi/tutorial.html#mpi.c_mapping"> Mapping from C MPI to Boost.MPI</a></span></dt> </dl></dd> <dt><span class="section"><a href="mpi/reference.html">Reference</a></span></dt> <dd><dl> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi_hpp">Header <boost/mpi.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.allocator_hpp">Header <boost/mpi/allocator.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.collectives_hpp">Header <boost/mpi/collectives.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.collectives_fwd_hpp">Header <boost/mpi/collectives_fwd.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.communicator_hpp">Header <boost/mpi/communicator.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.config_hpp">Header <boost/mpi/config.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.datatype_hpp">Header <boost/mpi/datatype.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.datatype_fwd_hpp">Header <boost/mpi/datatype_fwd.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.environment_hpp">Header <boost/mpi/environment.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.exception_hpp">Header <boost/mpi/exception.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.graph_communicator_hpp">Header <boost/mpi/graph_communicator.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.group_hpp">Header <boost/mpi/group.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.intercommunicator_hpp">Header <boost/mpi/intercommunicator.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.nonblocking_hpp">Header <boost/mpi/nonblocking.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.operations_hpp">Header <boost/mpi/operations.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.packed_iarchive_hpp">Header <boost/mpi/packed_iarchive.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.packed_oarchive_hpp">Header <boost/mpi/packed_oarchive.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.python_hpp">Header <boost/mpi/python.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.request_hpp">Header <boost/mpi/request.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.skeleton_and_content_hpp">Header <boost/mpi/skeleton_and_content.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.skeleton_and_content_fwd_hpp">Header <boost/mpi/skeleton_and_content_fwd.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.status_hpp">Header <boost/mpi/status.hpp></a></span></dt> <dt><span class="section"><a href="mpi/reference.html#header.boost.mpi.timer_hpp">Header <boost/mpi/timer.hpp></a></span></dt> </dl></dd> <dt><span class="section"><a href="mpi/python.html"> Python Bindings</a></span></dt> <dd><dl> <dt><span class="section"><a href="mpi/python.html#mpi.python_quickstart"> Quickstart</a></span></dt> <dt><span class="section"><a href="mpi/python.html#mpi.python_user_data"> Transmitting User-Defined Data</a></span></dt> <dt><span class="section"><a href="mpi/python.html#mpi.python_collectives"> Collectives</a></span></dt> <dt><span class="section"><a href="mpi/python.html#mpi.python_skeleton_content"> Skeleton/Content Mechanism</a></span></dt> <dt><span class="section"><a href="mpi/python.html#mpi.python_compatbility"> C++/Python MPI Compatibility</a></span></dt> <dt><span class="section"><a href="mpi/python.html#mpi.pythonref"> Reference</a></span></dt> </dl></dd> <dt><span class="section"><a href="mpi/design.html"> Design Philosophy</a></span></dt> <dt><span class="section"><a href="mpi/performance.html"> Performance Evaluation</a></span></dt> <dt><span class="section"><a href="mpi/history.html"> Revision History</a></span></dt> <dt><span class="section"><a href="mpi/acknowledge.html"> Acknowledgments</a></span></dt> </dl> </div> <div class="section" title="Introduction"> <div class="titlepage"><div><div><h2 class="title" style="clear: both"> <a name="mpi.intro"></a> Introduction</h2></div></div></div> <p> Boost.MPI is a library for message passing in high-performance parallel applications. A Boost.MPI program is one or more processes that can communicate either via sending and receiving individual messages (point-to-point communication) or by coordinating as a group (collective communication). Unlike communication in threaded environments or using a shared-memory library, Boost.MPI processes can be spread across many different machines, possibly with different operating systems and underlying architectures. </p> <p> Boost.MPI is not a completely new parallel programming library. Rather, it is a C++-friendly interface to the standard Message Passing Interface (<a href="http://www-unix.mcs.anl.gov/mpi/" target="_top">MPI</a>), the most popular library interface for high-performance, distributed computing. MPI defines a library interface, available from C, Fortran, and C++, for which there are many <a href="http://www-unix.mcs.anl.gov/mpi/implementations.html" target="_top">MPI implementations</a>. Although there exist C++ bindings for MPI, they offer little functionality over the C bindings. The Boost.MPI library provides an alternative C++ interface to MPI that better supports modern C++ development styles, including complete support for user-defined data types and C++ Standard Library types, arbitrary function objects for collective algorithms, and the use of modern C++ library techniques to maintain maximal efficiency. </p> <p> At present, Boost.MPI supports the majority of functionality in MPI 1.1. The thin abstractions in Boost.MPI allow one to easily combine it with calls to the underlying C MPI library. Boost.MPI currently supports: </p> <div class="itemizedlist"><ul class="itemizedlist" type="disc"> <li class="listitem"> Communicators: Boost.MPI supports the creation, destruction, cloning, and splitting of MPI communicators, along with manipulation of process groups. </li> <li class="listitem"> Point-to-point communication: Boost.MPI supports point-to-point communication of primitive and user-defined data types with send and receive operations, with blocking and non-blocking interfaces. </li> <li class="listitem"> Collective communication: Boost.MPI supports collective operations such as <code class="computeroutput"><a class="link" href="boost/mpi/reduce.html" title="Function reduce">reduce</a></code> and <code class="computeroutput"><a class="link" href="boost/mpi/gather.html" title="Function gather">gather</a></code> with both built-in and user-defined data types and function objects. </li> <li class="listitem"> MPI Datatypes: Boost.MPI can build MPI data types for user-defined types using the <a href="http://www.boost.org/libs/serialization/doc" target="_top">Boost.Serialization</a> library. </li> <li class="listitem"> Separating structure from content: Boost.MPI can transfer the shape (or "skeleton") of complexc data structures (lists, maps, etc.) and then separately transfer their content. This facility optimizes for cases where the data within a large, static data structure needs to be transmitted many times. </li> </ul></div> <p> Boost.MPI can be accessed either through its native C++ bindings, or through its alternative, <a class="link" href="mpi/python.html" title="Python Bindings">Python interface</a>. </p> </div> </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"><p><small>Last revised: February 01, 2010 at 10:22:58 GMT</small></p></td> <td align="right"><div class="copyright-footer"></div></td> </tr></table> <hr> <div class="spirit-nav"> <a accesskey="p" href="lambda/s10.html"><img src="../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="libraries.html"><img src="../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="index.html"><img src="../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="mpi/getting_started.html"><img src="../../doc/html/images/next.png" alt="Next"></a> </div> </body> </html>