0c5e0b3f43
[SVN r53471]
119 lines
7.3 KiB
HTML
119 lines
7.3 KiB
HTML
<?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>
|