123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <?xml version="1.0" encoding="utf-8" ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
- <title>An Overview of the Parallel Boost Graph Library</title>
- <link rel="stylesheet" href="../../../../rst.css" type="text/css" />
- </head>
- <body>
- <div class="document" id="an-overview-of-the-parallel-boost-graph-library">
- <h1 class="title">An Overview of the Parallel Boost Graph Library</h1>
- <!-- Copyright (C) 2004-2008 The Trustees of Indiana University.
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt) -->
- <img align="right" alt="An example graph" class="align-right" src="../graph.png" style="width: 206px; height: 184px;" />
- <p>The Parallel Boost Graph Library (Parallel BGL) is a C++ library for
- parallel, distributed computation on graphs. The Parallel BGL contains
- distributed graph data structures, distributed graph algorithms,
- abstractions over the communication medium (such as MPI), and
- supporting data structures. A graph (also called a <em>network</em>) consists
- of a set of <em>vertices</em> and a set of relationships between vertices,
- called <em>edges</em>. The edges may be <em>undirected</em>, meaning that the
- relationship between vertices is mutual, e.g., "X is related to Y", or
- they can be <em>directed</em>, meaning that the relationship goes only one
- way, e.g., "X is the child of Y". The following figure illustrates a
- typical directed graph, where <em>a-i</em> are the vertices and the arrows
- represent edges.</p>
- <img align="right" alt="A distributed graph" class="align-right" src="../distributed-graph.png" style="width: 229px; height: 199px;" />
- <p>The Parallel BGL is primarily concerned with <em>distributed</em>
- graphs. Distributed graphs are conceptually graphs, but their storage
- is spread across multiple processors. The following figure
- demonstrates a distributed version of the graph above, where the graph
- has been divided among three processors (represented by the grey
- rectangles). Edges in the graph may be either local (with both
- endpoints stored on the same processor) or remote (the target of the
- edge is stored on a different processor).</p>
- <p>The Parallel BGL is a generic library. At its core are <em>generic</em>
- distributed graph algorithms, which can operate on any distributed
- graph data structure provided that data structure meets certain
- requirements. For instance, the algorithm may need to enumerate the
- set of vertices stored on the current processor, enumerate the set of
- outgoing edges from a particular vertex, and determine on which
- processor the target of each edge resides. The graph algorithms in the
- Parallel BGL are also generic with respect to the <em>properties</em>
- attached to edges and vertices in a graph; for instance, the weight of
- each edge can be stored as part of the graph or allocated in a
- completely separate data structure.</p>
- <p>The genericity available in the algorithms of the Parallel BGL allows
- them to be applied to existing graph data structures. However, most
- users will instead be writing new code that takes advantage of the
- Parallel BGL. The Parallel BGL provides distributed graph data
- structures that meet the requirements of the Parallel BGL
- algorithms. The primary data structure is the <a class="reference external" href="distributed_adjacency_list.html">distributed adjacency
- list</a>, which allows storage and manipulation of a (distributed)
- graph. The vertices in the graph are divided among the various
- processors, and each of the edges outgoing from a vertex are stored on
- the processor that "owns" (stores) that vertex. The following figure
- illustrates the distributed adjacency list representation.</p>
- <div align="center" class="align-center"><img alt="A distributed adjacency list" class="align-center" src="../dist-adjlist.png" style="width: 446px; height: 154px;" /></div>
- <img align="right" alt="A distributed property map" class="align-right" src="../dist-pmap.png" style="width: 271px; height: 175px;" />
- <p>The <a class="reference external" href="distributed_adjacency_list.html">distributed adjacency list</a> distributes the structure of a graph
- over multiple processors. While graph structure is in important part
- of many graph problems, there are typically other properties attached
- to the vertices and edges, such as edge weights or the position of
- vertices within a grid. These properties are stored in <em>property
- maps</em>, which associate a single piece of data with each edge or vertex
- in a graph. Distributed property maps extend this notion to
- distributed computing, where properties are stored on the same
- processor as the vertex or edge. The following figure illustrates the
- distribution of a property map storing colors (white, gray, black) for
- each vertex. In addition to the storage for each vertex, the
- processors store some "ghost cells" that cache values actually stored
- on other processors, represented by the dashed boxes.</p>
- <p>Tying together all of the distributed data structures of the Parallel
- BGL are its process groups and distributed graph algorithms. Process
- groups coordinate the interactions between multiple processes and
- distributed data structures by abstracting the communication
- mechanism. The algorithms are typically written using the SPMD model
- (Single Program, Multiple Data) and interact with both the distributed
- data structures and the process group itself. At various points in the
- algorithm's execution, all processes execute a synchronization point,
- which allows all of the distributed data structures to ensure an
- appropriate degree of consistency across processes. The following
- diagram illustrates the communication patterns within the the
- execution of a distributed algorithm in the Parallel BGL. In
- particular, the diagram illustrates the distributed data structures
- used in a distributed breadth-first search, from the top-left and
- proceeding clockwise:</p>
- <blockquote>
- <ul class="simple">
- <li>a user-defined property map that tracks the distance from the
- source vertex to all other vertices,</li>
- <li>an automatically-generated property map that tracks the "color"
- of vertices in the (distributed) graph, to determine which
- vertices have been seen before,</li>
- <li>a distributed queue, which coordinates the breadth-first search
- and distributes new vertices to search, and</li>
- <li>a distributed graph, on which the breadth-first search is
- operating.</li>
- </ul>
- </blockquote>
- <div align="center" class="align-center"><img alt="Parallel Boost Graph Library architecture" class="align-center" src="../architecture.png" style="width: 485px; height: 410px;" /></div>
- <hr class="docutils" />
- <p>Copyright (C) 2005 The Trustees of Indiana University.</p>
- <p>Authors: Douglas Gregor and Andrew Lumsdaine</p>
- <span class="target" id="process-groups"></span>
- </div>
- <div class="footer">
- <hr class="footer" />
- Generated on: 2009-05-31 00:22 UTC.
- Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
- </div>
- </body>
- </html>
|