• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<head>
4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5<title>Performance Evaluation</title>
6<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
7<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
8<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
9<link rel="up" href="../mpi.html" title="Chapter 26. Boost.MPI">
10<link rel="prev" href="design.html" title="Design Philosophy">
11<link rel="next" href="history.html" title="Revision History">
12</head>
13<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14<table cellpadding="2" width="100%"><tr>
15<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
16<td align="center"><a href="../../../index.html">Home</a></td>
17<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
18<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
19<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
20<td align="center"><a href="../../../more/index.htm">More</a></td>
21</tr></table>
22<hr>
23<div class="spirit-nav">
24<a accesskey="p" href="design.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../mpi.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="history.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
25</div>
26<div class="section">
27<div class="titlepage"><div><div><h2 class="title" style="clear: both">
28<a name="mpi.performance"></a><a class="link" href="performance.html" title="Performance Evaluation">Performance Evaluation</a>
29</h2></div></div></div>
30<p>
31      Message-passing performance is crucial in high-performance distributed computing.
32      To evaluate the performance of Boost.MPI, we modified the standard <a href="http://www.scl.ameslab.gov/netpipe/" target="_top">NetPIPE</a>
33      benchmark (version 3.6.2) to use Boost.MPI and compared its performance against
34      raw MPI. We ran five different variants of the NetPIPE benchmark:
35    </p>
36<div class="orderedlist"><ol class="orderedlist" type="1">
37<li class="listitem">
38          MPI: The unmodified NetPIPE benchmark.
39        </li>
40<li class="listitem">
41          Boost.MPI: NetPIPE modified to use Boost.MPI calls for communication.
42        </li>
43<li class="listitem">
44          MPI (Datatypes): NetPIPE modified to use a derived datatype (which itself
45          contains a single <code class="computeroutput"><span class="identifier">MPI_BYTE</span></code>)
46          rather than a fundamental datatype.
47        </li>
48<li class="listitem">
49          Boost.MPI (Datatypes): NetPIPE modified to use a user-defined type <code class="computeroutput"><span class="identifier">Char</span></code> in place of the fundamental <code class="computeroutput"><span class="keyword">char</span></code> type. The <code class="computeroutput"><span class="identifier">Char</span></code>
50          type contains a single <code class="computeroutput"><span class="keyword">char</span></code>,
51          a <code class="computeroutput"><span class="identifier">serialize</span><span class="special">()</span></code>
52          method to make it serializable, and specializes <code class="computeroutput"><a class="link" href="../boost/mpi/is_mpi_datatype.html" title="Struct template is_mpi_datatype">is_mpi_datatype</a></code>
53          to force Boost.MPI to build a derived MPI data type for it.
54        </li>
55<li class="listitem">
56          Boost.MPI (Serialized): NetPIPE modified to use a user-defined type <code class="computeroutput"><span class="identifier">Char</span></code> in place of the fundamental <code class="computeroutput"><span class="keyword">char</span></code> type. This <code class="computeroutput"><span class="identifier">Char</span></code>
57          type contains a single <code class="computeroutput"><span class="keyword">char</span></code>
58          and is serializable. Unlike the Datatypes case, <code class="computeroutput"><a class="link" href="../boost/mpi/is_mpi_datatype.html" title="Struct template is_mpi_datatype">is_mpi_datatype</a></code>
59          is <span class="bold"><strong>not</strong></span> specialized, forcing Boost.MPI
60          to perform many, many serialization calls.
61        </li>
62</ol></div>
63<p>
64      The actual tests were performed on the Odin cluster in the <a href="http://www.cs.indiana.edu/" target="_top">Department
65      of Computer Science</a> at <a href="http://www.iub.edu" target="_top">Indiana University</a>,
66      which contains 128 nodes connected via Infiniband. Each node contains 4GB memory
67      and two AMD Opteron processors. The NetPIPE benchmarks were compiled with Intel's
68      C++ Compiler, version 9.0, Boost 1.35.0 (prerelease), and <a href="http://www.open-mpi.org/" target="_top">Open
69      MPI</a> version 1.1. The NetPIPE results follow:
70    </p>
71<p>
72      <span class="inlinemediaobject"><img src="../../../libs/mpi/doc/netpipe.png"></span>
73    </p>
74<p>
75      There are a some observations we can make about these NetPIPE results. First
76      of all, the top two plots show that Boost.MPI performs on par with MPI for
77      fundamental types. The next two plots show that Boost.MPI performs on par with
78      MPI for derived data types, even though Boost.MPI provides a much more abstract,
79      completely transparent approach to building derived data types than raw MPI.
80      Overall performance for derived data types is significantly worse than for
81      fundamental data types, but the bottleneck is in the underlying MPI implementation
82      itself. Finally, when forcing Boost.MPI to serialize characters individually,
83      performance suffers greatly. This particular instance is the worst possible
84      case for Boost.MPI, because we are serializing millions of individual characters.
85      Overall, the additional abstraction provided by Boost.MPI does not impair its
86      performance.
87    </p>
88</div>
89<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
90<td align="left"></td>
91<td align="right"><div class="copyright-footer">Copyright © 2005-2007 Douglas Gregor,
92      Matthias Troyer, Trustees of Indiana University<p>
93        Distributed under the Boost Software License, Version 1.0. (See accompanying
94        file LICENSE_1_0.txt or copy at &lt;ulink url="http://www.boost.org/LICENSE_1_0.txt"&gt;
95        http://www.boost.org/LICENSE_1_0.txt &lt;/ulink&gt;)
96      </p>
97</div></td>
98</tr></table>
99<hr>
100<div class="spirit-nav">
101<a accesskey="p" href="design.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../mpi.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="history.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
102</div>
103</body>
104</html>
105