Imported Upstream version 1.72.0
[platform/upstream/boost.git] / doc / html / poly_collection / performance.html
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=US-ASCII">
5 <title>Performance</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="../poly_collection.html" title="Chapter&#160;28.&#160;Boost.PolyCollection">
10 <link rel="prev" href="tutorial.html" title="Tutorial">
11 <link rel="next" href="reference.html" title="Reference">
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="tutorial.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../poly_collection.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="reference.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="poly_collection.performance"></a><a class="link" href="performance.html" title="Performance">Performance</a>
29 </h2></div></div></div>
30 <div class="toc"><dl class="toc">
31 <dt><span class="section"><a href="performance.html#poly_collection.performance.container_definitions">Container
32       definitions</a></span></dt>
33 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests">Insertion
34       tests</a></span></dt>
35 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests">Processing
36       tests</a></span></dt>
37 </dl></div>
38 <p>
39       (Testing program at <a href="../../../libs/poly_collection/example/perf.cpp" target="_top"><code class="computeroutput"><span class="identifier">perf</span><span class="special">.</span><span class="identifier">cpp</span></code></a>.)
40     </p>
41 <p>
42       We ran tests to measure the performance of the containers of Boost.PolyCollection
43       in two scenarios:
44     </p>
45 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
46 <li class="listitem">
47           Insertion of elements.
48         </li>
49 <li class="listitem">
50           Linear traversal and processing with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span></code>
51           and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">poly_collection</span><span class="special">::</span><span class="identifier">for_each</span></code> (with and without <a class="link" href="tutorial.html#poly_collection.tutorial.algorithms.type_restitution" title="Type restitution">type
52           restitution</a>).
53         </li>
54 </ul></div>
55 <p>
56       As a comparison baseline we used containers and facilities from the standard
57       library and Boost (details below). Tests were run in the following environments:
58     </p>
59 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
60 <li class="listitem">
61           <span class="bold"><strong>Visual Studio 2015 x86</strong></span>: Visual C++ 2015
62           in 32-bit (x86) release mode, Windows 7 64-bit, Intel Core i5-2520M @2.5GHz
63         </li>
64 <li class="listitem">
65           <span class="bold"><strong>Visual Studio 2015 x64</strong></span>: Visual C++ 2015
66           in 64-bit (x64) release mode, same machine
67         </li>
68 <li class="listitem">
69           <span class="bold"><strong>GCC 6.3 x64</strong></span>: GCC 6.3 release mode, Xubuntu
70           17.04 x64, Intel Core i7-5820 @3.3GHz
71         </li>
72 <li class="listitem">
73           <span class="bold"><strong>Clang 4.0 x64</strong></span>: Clang 4.0 release mode,
74           same machine
75         </li>
76 </ul></div>
77 <div class="section">
78 <div class="titlepage"><div><div><h3 class="title">
79 <a name="poly_collection.performance.container_definitions"></a><a class="link" href="performance.html#poly_collection.performance.container_definitions" title="Container definitions">Container
80       definitions</a>
81 </h3></div></div></div>
82 <div class="toc"><dl class="toc">
83 <dt><span class="section"><a href="performance.html#poly_collection.performance.container_definitions.boost_base_collection"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">base_collection</span></code></a></span></dt>
84 <dt><span class="section"><a href="performance.html#poly_collection.performance.container_definitions.boost_function_collection"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_collection</span></code></a></span></dt>
85 <dt><span class="section"><a href="performance.html#poly_collection.performance.container_definitions.boost_any_collection"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">any_collection</span></code></a></span></dt>
86 </dl></div>
87 <div class="section">
88 <div class="titlepage"><div><div><h4 class="title">
89 <a name="poly_collection.performance.container_definitions.boost_base_collection"></a><a class="link" href="performance.html#poly_collection.performance.container_definitions.boost_base_collection" title="boost::base_collection"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">base_collection</span></code></a>
90 </h4></div></div></div>
91 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
92 <li class="listitem">
93               Baseline container: <code class="computeroutput"><span class="identifier">ptr_vector</span></code>
94               = <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ptr_vector</span><span class="special">&lt;</span><span class="identifier">base</span><span class="special">&gt;</span></code>
95             </li>
96 <li class="listitem">
97               Polymorphic collection: <code class="computeroutput"><span class="identifier">base_collection</span></code>
98               = <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">base</span><span class="special">&gt;</span></code>
99             </li>
100 <li class="listitem">
101               Element types: <code class="computeroutput"><span class="identifier">T1</span></code> =
102               <code class="computeroutput"><span class="identifier">derived1</span></code>, <code class="computeroutput"><span class="identifier">T2</span></code> = <code class="computeroutput"><span class="identifier">derived2</span></code>,
103               <code class="computeroutput"><span class="identifier">T3</span></code> = <code class="computeroutput"><span class="identifier">derived3</span></code>
104             </li>
105 </ul></div>
106 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">base</span>
107 <span class="special">{</span>
108   <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">base</span><span class="special">()=</span><span class="keyword">default</span><span class="special">;</span>
109   <span class="keyword">virtual</span> <span class="keyword">int</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">int</span><span class="special">)</span><span class="keyword">const</span><span class="special">=</span><span class="number">0</span><span class="special">;</span>
110 <span class="special">};</span>
111
112 <span class="keyword">struct</span> <span class="identifier">derived1</span> <span class="identifier">final</span><span class="special">:</span><span class="identifier">base</span>
113 <span class="special">{</span>
114   <span class="identifier">derived1</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">):</span><span class="identifier">n</span><span class="special">{</span><span class="identifier">n</span><span class="special">}{}</span>
115   <span class="keyword">virtual</span> <span class="keyword">int</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">int</span><span class="special">)</span><span class="keyword">const</span><span class="special">{</span><span class="keyword">return</span> <span class="identifier">n</span><span class="special">;}</span>
116
117   <span class="keyword">int</span> <span class="identifier">n</span><span class="special">;</span>
118 <span class="special">};</span>
119
120 <span class="keyword">struct</span> <span class="identifier">derived2</span> <span class="identifier">final</span><span class="special">:</span><span class="identifier">base</span>
121 <span class="special">{</span>
122   <span class="identifier">derived2</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">):</span><span class="identifier">n</span><span class="special">{</span><span class="identifier">n</span><span class="special">}{}</span>
123   <span class="keyword">virtual</span> <span class="keyword">int</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">int</span> <span class="identifier">x</span><span class="special">)</span><span class="keyword">const</span><span class="special">{</span><span class="keyword">return</span> <span class="identifier">x</span><span class="special">*</span><span class="identifier">n</span><span class="special">;}</span>
124
125   <span class="keyword">int</span> <span class="identifier">unused</span><span class="special">,</span><span class="identifier">n</span><span class="special">;</span>
126 <span class="special">};</span>
127
128 <span class="keyword">struct</span> <span class="identifier">derived3</span> <span class="identifier">final</span><span class="special">:</span><span class="identifier">base</span>
129 <span class="special">{</span>
130   <span class="identifier">derived3</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">):</span><span class="identifier">n</span><span class="special">{</span><span class="identifier">n</span><span class="special">}{}</span>
131   <span class="keyword">virtual</span> <span class="keyword">int</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">int</span> <span class="identifier">x</span><span class="special">)</span><span class="keyword">const</span><span class="special">{</span><span class="keyword">return</span> <span class="identifier">x</span><span class="special">*</span><span class="identifier">x</span><span class="special">*</span><span class="identifier">n</span><span class="special">;}</span>
132
133   <span class="keyword">int</span> <span class="identifier">unused</span><span class="special">,</span><span class="identifier">n</span><span class="special">;</span>
134 <span class="special">};</span>
135 </pre>
136 </div>
137 <div class="section">
138 <div class="titlepage"><div><div><h4 class="title">
139 <a name="poly_collection.performance.container_definitions.boost_function_collection"></a><a class="link" href="performance.html#poly_collection.performance.container_definitions.boost_function_collection" title="boost::function_collection"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_collection</span></code></a>
140 </h4></div></div></div>
141 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
142 <li class="listitem">
143               Baseline container: <code class="computeroutput"><span class="identifier">func_vector</span></code>
144               = <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">function</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="keyword">int</span><span class="special">)&gt;&gt;</span></code>
145             </li>
146 <li class="listitem">
147               Polymorphic collection: <code class="computeroutput"><span class="identifier">function_collection</span></code>
148               = <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_collection</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="keyword">int</span><span class="special">)&gt;</span></code>
149             </li>
150 <li class="listitem">
151               Element types: <code class="computeroutput"><span class="identifier">T1</span></code> =
152               <code class="computeroutput"><span class="identifier">concrete1</span></code>, <code class="computeroutput"><span class="identifier">T2</span></code> = <code class="computeroutput"><span class="identifier">concrete2</span></code>,
153               <code class="computeroutput"><span class="identifier">T3</span></code> = <code class="computeroutput"><span class="identifier">concrete3</span></code>
154             </li>
155 </ul></div>
156 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">concrete1</span>
157 <span class="special">{</span>
158   <span class="identifier">concrete1</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">):</span><span class="identifier">n</span><span class="special">{</span><span class="identifier">n</span><span class="special">}{}</span>
159   <span class="keyword">int</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">int</span><span class="special">)</span><span class="keyword">const</span><span class="special">{</span><span class="keyword">return</span> <span class="identifier">n</span><span class="special">;}</span>
160
161   <span class="keyword">int</span> <span class="identifier">n</span><span class="special">;</span>
162 <span class="special">};</span>
163
164 <span class="keyword">struct</span> <span class="identifier">concrete2</span>
165 <span class="special">{</span>
166   <span class="identifier">concrete2</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">):</span><span class="identifier">n</span><span class="special">{</span><span class="identifier">n</span><span class="special">}{}</span>
167   <span class="keyword">int</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">int</span> <span class="identifier">x</span><span class="special">)</span><span class="keyword">const</span><span class="special">{</span><span class="keyword">return</span> <span class="identifier">x</span><span class="special">*</span><span class="identifier">n</span><span class="special">;}</span>
168
169   <span class="keyword">int</span> <span class="identifier">unused</span><span class="special">,</span><span class="identifier">n</span><span class="special">;</span>
170 <span class="special">};</span>
171
172 <span class="keyword">struct</span> <span class="identifier">concrete3</span>
173 <span class="special">{</span>
174   <span class="identifier">concrete3</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">):</span><span class="identifier">n</span><span class="special">{</span><span class="identifier">n</span><span class="special">}{}</span>
175   <span class="keyword">int</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">int</span> <span class="identifier">x</span><span class="special">)</span><span class="keyword">const</span><span class="special">{</span><span class="keyword">return</span> <span class="identifier">x</span><span class="special">*</span><span class="identifier">x</span><span class="special">*</span><span class="identifier">n</span><span class="special">;}</span>
176
177   <span class="keyword">int</span> <span class="identifier">unused</span><span class="special">,</span><span class="identifier">n</span><span class="special">;</span>
178 <span class="special">};</span>
179 </pre>
180 </div>
181 <div class="section">
182 <div class="titlepage"><div><div><h4 class="title">
183 <a name="poly_collection.performance.container_definitions.boost_any_collection"></a><a class="link" href="performance.html#poly_collection.performance.container_definitions.boost_any_collection" title="boost::any_collection"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">any_collection</span></code></a>
184 </h4></div></div></div>
185 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
186 <li class="listitem">
187               Baseline container: <code class="computeroutput"><span class="identifier">any_vector</span></code>
188               = <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">type_erasure</span><span class="special">::</span><span class="identifier">any</span><span class="special">&lt;</span><span class="identifier">concept_</span><span class="special">&gt;&gt;</span></code>
189             </li>
190 <li class="listitem">
191               Polymorphic collection: <code class="computeroutput"><span class="identifier">any_collection</span></code>
192               = <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">concept_</span><span class="special">&gt;</span></code>
193             </li>
194 <li class="listitem">
195               Element types: <code class="computeroutput"><span class="identifier">T1</span></code> =
196               <code class="computeroutput"><span class="keyword">int</span></code>, <code class="computeroutput"><span class="identifier">T2</span></code>
197               = <code class="computeroutput"><span class="keyword">double</span></code>, <code class="computeroutput"><span class="identifier">T3</span></code> = <code class="computeroutput"><span class="keyword">char</span></code>
198             </li>
199 </ul></div>
200 <pre class="programlisting"><span class="keyword">using</span> <span class="identifier">concept_</span><span class="special">=</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
201   <span class="identifier">boost</span><span class="special">::</span><span class="identifier">type_erasure</span><span class="special">::</span><span class="identifier">copy_constructible</span><span class="special">&lt;&gt;,</span>
202   <span class="identifier">boost</span><span class="special">::</span><span class="identifier">type_erasure</span><span class="special">::</span><span class="identifier">relaxed</span><span class="special">,</span>
203   <span class="identifier">boost</span><span class="special">::</span><span class="identifier">type_erasure</span><span class="special">::</span><span class="identifier">typeid_</span><span class="special">&lt;&gt;,</span>
204   <span class="identifier">boost</span><span class="special">::</span><span class="identifier">type_erasure</span><span class="special">::</span><span class="identifier">incrementable</span><span class="special">&lt;&gt;</span>
205 <span class="special">&gt;;</span>
206 </pre>
207 </div>
208 </div>
209 <div class="section">
210 <div class="titlepage"><div><div><h3 class="title">
211 <a name="poly_collection.performance.insertion_tests"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests" title="Insertion tests">Insertion
212       tests</a>
213 </h3></div></div></div>
214 <div class="toc"><dl class="toc">
215 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_base_collectio">Results
216         for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">base_collection</span></code></a></span></dt>
217 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_function_colle">Results
218         for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_collection</span></code></a></span></dt>
219 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_any_collection">Results
220         for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">any_collection</span></code></a></span></dt>
221 </dl></div>
222 <p>
223         Tests measure the time taken to insert <span class="emphasis"><em>n</em></span> elements (<span class="emphasis"><em>n</em></span>
224         between 10<sup>2</sup> and 10<sup>7</sup>) from a source of values with types following the cyclic
225         sequence
226       </p>
227 <p>
228         <code class="computeroutput"><span class="identifier">T1</span></code> <code class="computeroutput"><span class="identifier">T1</span></code>
229         <code class="computeroutput"><span class="identifier">T2</span></code> <code class="computeroutput"><span class="identifier">T2</span></code>
230         <code class="computeroutput"><span class="identifier">T3</span></code> <code class="computeroutput"><span class="identifier">T1</span></code>
231         <code class="computeroutput"><span class="identifier">T1</span></code> <code class="computeroutput"><span class="identifier">T2</span></code>
232         <code class="computeroutput"><span class="identifier">T2</span></code> <code class="computeroutput"><span class="identifier">T3</span></code>
233         &#183;&#183;&#183;
234       </p>
235 <p>
236         No <code class="computeroutput"><span class="identifier">reserve</span></code> operation is done
237         before insertion. The figures show resulting times in nanoseconds/element.
238         The horizontal axis is logarithmic.
239       </p>
240 <div class="section">
241 <div class="titlepage"><div><div><h4 class="title">
242 <a name="poly_collection.performance.insertion_tests.results_for_boost_base_collectio"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_base_collectio" title="Results for boost::base_collection">Results
243         for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">base_collection</span></code></a>
244 </h4></div></div></div>
245 <div class="toc"><dl class="toc">
246 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_base_collectio.environment">Visual
247           Studio 2015 x86</a></span></dt>
248 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_base_collectio.environment0">Visual
249           Studio 2015 x64</a></span></dt>
250 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_base_collectio.environment1">GCC
251           6.3 x64</a></span></dt>
252 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_base_collectio.environment2">Clang
253           4.0 x64</a></span></dt>
254 </dl></div>
255 <div class="section">
256 <div class="titlepage"><div><div><h5 class="title">
257 <a name="poly_collection.performance.insertion_tests.results_for_boost_base_collectio.environment"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_base_collectio.environment" title="Visual Studio 2015 x86">Visual
258           Studio 2015 x86</a>
259 </h5></div></div></div>
260 <p>
261             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/insert_base_vs2015_x86.png"></span>
262 </span>
263             <span class="aligncenter"><span class="bold"><strong>Insertion, Visual Studio
264             2015 x86</strong></span></span>
265           </p>
266 </div>
267 <div class="section">
268 <div class="titlepage"><div><div><h5 class="title">
269 <a name="poly_collection.performance.insertion_tests.results_for_boost_base_collectio.environment0"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_base_collectio.environment0" title="Visual Studio 2015 x64">Visual
270           Studio 2015 x64</a>
271 </h5></div></div></div>
272 <p>
273             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/insert_base_vs2015_x64.png"></span>
274 </span>
275             <span class="aligncenter"><span class="bold"><strong>Insertion, Visual Studio
276             2015 x64</strong></span></span>
277           </p>
278 </div>
279 <div class="section">
280 <div class="titlepage"><div><div><h5 class="title">
281 <a name="poly_collection.performance.insertion_tests.results_for_boost_base_collectio.environment1"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_base_collectio.environment1" title="GCC 6.3 x64">GCC
282           6.3 x64</a>
283 </h5></div></div></div>
284 <p>
285             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/insert_base_gcc63_x64.png"></span>
286 </span>
287             <span class="aligncenter"><span class="bold"><strong>Insertion, GCC 6.3 x64</strong></span></span>
288           </p>
289 </div>
290 <div class="section">
291 <div class="titlepage"><div><div><h5 class="title">
292 <a name="poly_collection.performance.insertion_tests.results_for_boost_base_collectio.environment2"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_base_collectio.environment2" title="Clang 4.0 x64">Clang
293           4.0 x64</a>
294 </h5></div></div></div>
295 <p>
296             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/insert_base_clang40_x64.png"></span>
297 </span>
298             <span class="aligncenter"><span class="bold"><strong>Insertion, Clang 4.0
299             x64</strong></span></span>
300           </p>
301 </div>
302 </div>
303 <div class="section">
304 <div class="titlepage"><div><div><h4 class="title">
305 <a name="poly_collection.performance.insertion_tests.results_for_boost_function_colle"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_function_colle" title="Results for boost::function_collection">Results
306         for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_collection</span></code></a>
307 </h4></div></div></div>
308 <div class="toc"><dl class="toc">
309 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_function_colle.environment">Visual
310           Studio 2015 x86</a></span></dt>
311 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_function_colle.environment0">Visual
312           Studio 2015 x64</a></span></dt>
313 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_function_colle.environment1">GCC
314           6.3 x64</a></span></dt>
315 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_function_colle.environment2">Clang
316           4.0 x64</a></span></dt>
317 </dl></div>
318 <div class="section">
319 <div class="titlepage"><div><div><h5 class="title">
320 <a name="poly_collection.performance.insertion_tests.results_for_boost_function_colle.environment"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_function_colle.environment" title="Visual Studio 2015 x86">Visual
321           Studio 2015 x86</a>
322 </h5></div></div></div>
323 <p>
324             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/insert_function_vs2015_x86.png"></span>
325 </span>
326             <span class="aligncenter"><span class="bold"><strong>Insertion, Visual Studio
327             2015 x86</strong></span></span>
328           </p>
329 </div>
330 <div class="section">
331 <div class="titlepage"><div><div><h5 class="title">
332 <a name="poly_collection.performance.insertion_tests.results_for_boost_function_colle.environment0"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_function_colle.environment0" title="Visual Studio 2015 x64">Visual
333           Studio 2015 x64</a>
334 </h5></div></div></div>
335 <p>
336             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/insert_function_vs2015_x64.png"></span>
337 </span>
338             <span class="aligncenter"><span class="bold"><strong>Insertion, Visual Studio
339             2015 x64</strong></span></span>
340           </p>
341 </div>
342 <div class="section">
343 <div class="titlepage"><div><div><h5 class="title">
344 <a name="poly_collection.performance.insertion_tests.results_for_boost_function_colle.environment1"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_function_colle.environment1" title="GCC 6.3 x64">GCC
345           6.3 x64</a>
346 </h5></div></div></div>
347 <p>
348             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/insert_function_gcc63_x64.png"></span>
349 </span>
350             <span class="aligncenter"><span class="bold"><strong>Insertion, GCC 6.3 x64</strong></span></span>
351           </p>
352 </div>
353 <div class="section">
354 <div class="titlepage"><div><div><h5 class="title">
355 <a name="poly_collection.performance.insertion_tests.results_for_boost_function_colle.environment2"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_function_colle.environment2" title="Clang 4.0 x64">Clang
356           4.0 x64</a>
357 </h5></div></div></div>
358 <p>
359             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/insert_function_clang40_x64.png"></span>
360 </span>
361             <span class="aligncenter"><span class="bold"><strong>Insertion, Clang 4.0
362             x64</strong></span></span>
363           </p>
364 </div>
365 </div>
366 <div class="section">
367 <div class="titlepage"><div><div><h4 class="title">
368 <a name="poly_collection.performance.insertion_tests.results_for_boost_any_collection"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_any_collection" title="Results for boost::any_collection">Results
369         for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">any_collection</span></code></a>
370 </h4></div></div></div>
371 <div class="toc"><dl class="toc">
372 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_any_collection.environment">Visual
373           Studio 2015 x86</a></span></dt>
374 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_any_collection.environment0">Visual
375           Studio 2015 x64</a></span></dt>
376 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_any_collection.environment1">GCC
377           6.3 x64</a></span></dt>
378 <dt><span class="section"><a href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_any_collection.environment2">Clang
379           4.0 x64</a></span></dt>
380 </dl></div>
381 <div class="section">
382 <div class="titlepage"><div><div><h5 class="title">
383 <a name="poly_collection.performance.insertion_tests.results_for_boost_any_collection.environment"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_any_collection.environment" title="Visual Studio 2015 x86">Visual
384           Studio 2015 x86</a>
385 </h5></div></div></div>
386 <p>
387             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/insert_any_vs2015_x86.png"></span>
388 </span>
389             <span class="aligncenter"><span class="bold"><strong>Insertion, Visual Studio
390             2015 x86</strong></span></span>
391           </p>
392 </div>
393 <div class="section">
394 <div class="titlepage"><div><div><h5 class="title">
395 <a name="poly_collection.performance.insertion_tests.results_for_boost_any_collection.environment0"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_any_collection.environment0" title="Visual Studio 2015 x64">Visual
396           Studio 2015 x64</a>
397 </h5></div></div></div>
398 <p>
399             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/insert_any_vs2015_x64.png"></span>
400 </span>
401             <span class="aligncenter"><span class="bold"><strong>Insertion, Visual Studio
402             2015 x64</strong></span></span>
403           </p>
404 </div>
405 <div class="section">
406 <div class="titlepage"><div><div><h5 class="title">
407 <a name="poly_collection.performance.insertion_tests.results_for_boost_any_collection.environment1"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_any_collection.environment1" title="GCC 6.3 x64">GCC
408           6.3 x64</a>
409 </h5></div></div></div>
410 <p>
411             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/insert_any_gcc63_x64.png"></span>
412 </span>
413             <span class="aligncenter"><span class="bold"><strong>Insertion, GCC 6.3 x64</strong></span></span>
414           </p>
415 </div>
416 <div class="section">
417 <div class="titlepage"><div><div><h5 class="title">
418 <a name="poly_collection.performance.insertion_tests.results_for_boost_any_collection.environment2"></a><a class="link" href="performance.html#poly_collection.performance.insertion_tests.results_for_boost_any_collection.environment2" title="Clang 4.0 x64">Clang
419           4.0 x64</a>
420 </h5></div></div></div>
421 <p>
422             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/insert_any_clang40_x64.png"></span>
423 </span>
424             <span class="aligncenter"><span class="bold"><strong>Insertion, Clang 4.0
425             x64</strong></span></span>
426           </p>
427 </div>
428 </div>
429 </div>
430 <div class="section">
431 <div class="titlepage"><div><div><h3 class="title">
432 <a name="poly_collection.performance.processing_tests"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests" title="Processing tests">Processing
433       tests</a>
434 </h3></div></div></div>
435 <div class="toc"><dl class="toc">
436 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_base_collectio">Results
437         for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">base_collection</span></code></a></span></dt>
438 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_function_colle">Results
439         for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_collection</span></code></a></span></dt>
440 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_any_collection">Results
441         for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">any_collection</span></code></a></span></dt>
442 </dl></div>
443 <p>
444         Tests measure the time taken to traverse a container of size <span class="emphasis"><em>n</em></span>
445         (<span class="emphasis"><em>n</em></span> between 10<sup>2</sup> and 10<sup>7</sup>) and execute an operation on each
446         of its elements. The operation for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">base_collection</span></code>
447         and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_collection</span></code> (and the associated
448         baseline containers) is defined as
449       </p>
450 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">for_each_callable</span>
451 <span class="special">{</span>
452   <span class="identifier">for_each_callable</span><span class="special">():</span><span class="identifier">res</span><span class="special">{</span><span class="number">0</span><span class="special">}{}</span>
453
454   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
455   <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">){</span>
456     <span class="identifier">res</span><span class="special">+=</span><span class="identifier">x</span><span class="special">(</span><span class="number">2</span><span class="special">);</span>
457   <span class="special">}</span>
458
459   <span class="keyword">int</span> <span class="identifier">res</span><span class="special">;</span>
460 <span class="special">};</span>
461 </pre>
462 <p>
463         whereas for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">any_collection</span></code> we use
464       </p>
465 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">for_each_incrementable</span>
466 <span class="special">{</span>
467   <span class="identifier">for_each_incrementable</span><span class="special">():</span><span class="identifier">res</span><span class="special">{</span><span class="number">0</span><span class="special">}{}</span>
468
469   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
470   <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">){</span>
471     <span class="special">++</span><span class="identifier">x</span><span class="special">;</span>
472     <span class="special">++</span><span class="identifier">res</span><span class="special">;</span>
473   <span class="special">}</span>
474
475   <span class="keyword">int</span> <span class="identifier">res</span><span class="special">;</span>
476 <span class="special">};</span>
477 </pre>
478 <p>
479         The baseline container is tested with three different setups:
480       </p>
481 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
482 <li class="listitem">
483             Directly as initialized by the process described for the <a class="link" href="performance.html#poly_collection.performance.insertion_tests" title="Insertion tests">insertion
484             tests</a>. The sequence of types is complex enough that CPU's branch
485             prediction mechanisms are not able to fully anticipate it <a href="#ftn.poly_collection.performance.processing_tests.f0" class="footnote" name="poly_collection.performance.processing_tests.f0"><sup class="footnote">[21]</sup></a>. As elements are ordered according to their construction
486             time, certain degree of memory contiguity is expected.
487           </li>
488 <li class="listitem">
489             With an extra post-insertion stage by which elements are sorted according
490             to their <code class="computeroutput"><span class="keyword">typeid</span><span class="special">()</span></code>.
491             This increases branch prediction efficiency at the expense of having
492             worse cache friendliness.
493           </li>
494 <li class="listitem">
495             With an extra post-insertion stage that randomly shuffles all the elements
496             in the container. This is the worst possible scenario both in terms of
497             caching and branch prediction.
498           </li>
499 </ul></div>
500 <p>
501         As for the polymorphic collection, three variations are measured:
502       </p>
503 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
504 <li class="listitem">
505             With <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span></code> (the same as the baseline
506             container).
507           </li>
508 <li class="listitem">
509             Using <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">poly_collection</span><span class="special">::</span><span class="identifier">for_each</span></code>.
510           </li>
511 <li class="listitem">
512             Using <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">poly_collection</span><span class="special">::</span><span class="identifier">for_each</span></code> with <a class="link" href="tutorial.html#poly_collection.tutorial.algorithms.type_restitution" title="Type restitution"><span class="emphasis"><em>type
513             restitution</em></span></a> of <code class="computeroutput"><span class="identifier">T1</span></code>,
514             <code class="computeroutput"><span class="identifier">T2</span></code> and <code class="computeroutput"><span class="identifier">T3</span></code>.
515           </li>
516 </ul></div>
517 <p>
518         The figures show resulting times in nanoseconds/element. The horizontal axis
519         is logarithmic.
520       </p>
521 <div class="section">
522 <div class="titlepage"><div><div><h4 class="title">
523 <a name="poly_collection.performance.processing_tests.results_for_boost_base_collectio"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_base_collectio" title="Results for boost::base_collection">Results
524         for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">base_collection</span></code></a>
525 </h4></div></div></div>
526 <div class="toc"><dl class="toc">
527 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_base_collectio.environment">Visual
528           Studio 2015 x86</a></span></dt>
529 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_base_collectio.environment0">Visual
530           Studio 2015 x64</a></span></dt>
531 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_base_collectio.environment1">GCC
532           6.3 x64</a></span></dt>
533 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_base_collectio.environment2">Clang
534           4.0 x64</a></span></dt>
535 </dl></div>
536 <div class="section">
537 <div class="titlepage"><div><div><h5 class="title">
538 <a name="poly_collection.performance.processing_tests.results_for_boost_base_collectio.environment"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_base_collectio.environment" title="Visual Studio 2015 x86">Visual
539           Studio 2015 x86</a>
540 </h5></div></div></div>
541 <p>
542             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/for_each_base_vs2015_x86.png"></span>
543 </span>
544             <span class="aligncenter"><span class="bold"><strong>Processing, Visual Studio
545             2015 x86</strong></span></span>
546           </p>
547 </div>
548 <div class="section">
549 <div class="titlepage"><div><div><h5 class="title">
550 <a name="poly_collection.performance.processing_tests.results_for_boost_base_collectio.environment0"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_base_collectio.environment0" title="Visual Studio 2015 x64">Visual
551           Studio 2015 x64</a>
552 </h5></div></div></div>
553 <p>
554             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/for_each_base_vs2015_x64.png"></span>
555 </span>
556             <span class="aligncenter"><span class="bold"><strong>Processing, Visual Studio
557             2015 x64</strong></span></span>
558           </p>
559 </div>
560 <div class="section">
561 <div class="titlepage"><div><div><h5 class="title">
562 <a name="poly_collection.performance.processing_tests.results_for_boost_base_collectio.environment1"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_base_collectio.environment1" title="GCC 6.3 x64">GCC
563           6.3 x64</a>
564 </h5></div></div></div>
565 <p>
566             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/for_each_base_gcc63_x64.png"></span>
567 </span>
568             <span class="aligncenter"><span class="bold"><strong>Processing, GCC 6.3
569             x64</strong></span></span>
570           </p>
571 </div>
572 <div class="section">
573 <div class="titlepage"><div><div><h5 class="title">
574 <a name="poly_collection.performance.processing_tests.results_for_boost_base_collectio.environment2"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_base_collectio.environment2" title="Clang 4.0 x64">Clang
575           4.0 x64</a>
576 </h5></div></div></div>
577 <p>
578             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/for_each_base_clang40_x64.png"></span>
579 </span>
580             <span class="aligncenter"><span class="bold"><strong>Processing, Clang 4.0
581             x64</strong></span></span>
582           </p>
583 </div>
584 </div>
585 <div class="section">
586 <div class="titlepage"><div><div><h4 class="title">
587 <a name="poly_collection.performance.processing_tests.results_for_boost_function_colle"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_function_colle" title="Results for boost::function_collection">Results
588         for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_collection</span></code></a>
589 </h4></div></div></div>
590 <div class="toc"><dl class="toc">
591 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_function_colle.environment">Visual
592           Studio 2015 x86</a></span></dt>
593 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_function_colle.environment0">Visual
594           Studio 2015 x64</a></span></dt>
595 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_function_colle.environment1">GCC
596           6.3 x64</a></span></dt>
597 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_function_colle.environment2">Clang
598           4.0 x64</a></span></dt>
599 </dl></div>
600 <div class="section">
601 <div class="titlepage"><div><div><h5 class="title">
602 <a name="poly_collection.performance.processing_tests.results_for_boost_function_colle.environment"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_function_colle.environment" title="Visual Studio 2015 x86">Visual
603           Studio 2015 x86</a>
604 </h5></div></div></div>
605 <p>
606             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/for_each_function_vs2015_x86.png"></span>
607 </span>
608             <span class="aligncenter"><span class="bold"><strong>Processing, Visual Studio
609             2015 x86</strong></span></span>
610           </p>
611 </div>
612 <div class="section">
613 <div class="titlepage"><div><div><h5 class="title">
614 <a name="poly_collection.performance.processing_tests.results_for_boost_function_colle.environment0"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_function_colle.environment0" title="Visual Studio 2015 x64">Visual
615           Studio 2015 x64</a>
616 </h5></div></div></div>
617 <p>
618             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/for_each_function_vs2015_x64.png"></span>
619 </span>
620             <span class="aligncenter"><span class="bold"><strong>Processing, Visual Studio
621             2015 x64</strong></span></span>
622           </p>
623 </div>
624 <div class="section">
625 <div class="titlepage"><div><div><h5 class="title">
626 <a name="poly_collection.performance.processing_tests.results_for_boost_function_colle.environment1"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_function_colle.environment1" title="GCC 6.3 x64">GCC
627           6.3 x64</a>
628 </h5></div></div></div>
629 <p>
630             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/for_each_function_gcc63_x64.png"></span>
631 </span>
632             <span class="aligncenter"><span class="bold"><strong>Processing, GCC 6.3
633             x64</strong></span></span>
634           </p>
635 </div>
636 <div class="section">
637 <div class="titlepage"><div><div><h5 class="title">
638 <a name="poly_collection.performance.processing_tests.results_for_boost_function_colle.environment2"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_function_colle.environment2" title="Clang 4.0 x64">Clang
639           4.0 x64</a>
640 </h5></div></div></div>
641 <p>
642             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/for_each_function_clang40_x64.png"></span>
643 </span>
644             <span class="aligncenter"><span class="bold"><strong>Processing, Clang 4.0
645             x64</strong></span></span>
646           </p>
647 </div>
648 </div>
649 <div class="section">
650 <div class="titlepage"><div><div><h4 class="title">
651 <a name="poly_collection.performance.processing_tests.results_for_boost_any_collection"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_any_collection" title="Results for boost::any_collection">Results
652         for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">any_collection</span></code></a>
653 </h4></div></div></div>
654 <div class="toc"><dl class="toc">
655 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_any_collection.environment">Visual
656           Studio 2015 x86</a></span></dt>
657 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_any_collection.environment0">Visual
658           Studio 2015 x64</a></span></dt>
659 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_any_collection.environment1">GCC
660           6.3 x64</a></span></dt>
661 <dt><span class="section"><a href="performance.html#poly_collection.performance.processing_tests.results_for_boost_any_collection.environment2">Clang
662           4.0 x64</a></span></dt>
663 </dl></div>
664 <div class="section">
665 <div class="titlepage"><div><div><h5 class="title">
666 <a name="poly_collection.performance.processing_tests.results_for_boost_any_collection.environment"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_any_collection.environment" title="Visual Studio 2015 x86">Visual
667           Studio 2015 x86</a>
668 </h5></div></div></div>
669 <p>
670             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/for_each_any_vs2015_x86.png"></span>
671 </span>
672             <span class="aligncenter"><span class="bold"><strong>Processing, Visual Studio
673             2015 x86</strong></span></span>
674           </p>
675 </div>
676 <div class="section">
677 <div class="titlepage"><div><div><h5 class="title">
678 <a name="poly_collection.performance.processing_tests.results_for_boost_any_collection.environment0"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_any_collection.environment0" title="Visual Studio 2015 x64">Visual
679           Studio 2015 x64</a>
680 </h5></div></div></div>
681 <p>
682             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/for_each_any_vs2015_x64.png"></span>
683 </span>
684             <span class="aligncenter"><span class="bold"><strong>Processing, Visual Studio
685             2015 x64</strong></span></span>
686           </p>
687 </div>
688 <div class="section">
689 <div class="titlepage"><div><div><h5 class="title">
690 <a name="poly_collection.performance.processing_tests.results_for_boost_any_collection.environment1"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_any_collection.environment1" title="GCC 6.3 x64">GCC
691           6.3 x64</a>
692 </h5></div></div></div>
693 <p>
694             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/for_each_any_gcc63_x64.png"></span>
695 </span>
696             <span class="aligncenter"><span class="bold"><strong>Processing, GCC 6.3
697             x64</strong></span></span>
698           </p>
699 </div>
700 <div class="section">
701 <div class="titlepage"><div><div><h5 class="title">
702 <a name="poly_collection.performance.processing_tests.results_for_boost_any_collection.environment2"></a><a class="link" href="performance.html#poly_collection.performance.processing_tests.results_for_boost_any_collection.environment2" title="Clang 4.0 x64">Clang
703           4.0 x64</a>
704 </h5></div></div></div>
705 <p>
706             <span class="aligncenter"><span class="inlinemediaobject"><img src="img/for_each_any_clang40_x64.png"></span>
707 </span>
708             <span class="aligncenter"><span class="bold"><strong>Processing, Clang 4.0
709             x64</strong></span></span>
710           </p>
711 </div>
712 </div>
713 </div>
714 <div class="footnotes">
715 <br><hr style="width:100; text-align:left;margin-left: 0">
716 <div id="ftn.poly_collection.performance.processing_tests.f0" class="footnote"><p><a href="#poly_collection.performance.processing_tests.f0" class="para"><sup class="para">[21] </sup></a>
717               This has been verified empirically: simpler cycles did indeed yield
718               better execution times.
719             </p></div>
720 </div>
721 </div>
722 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
723 <td align="left"></td>
724 <td align="right"><div class="copyright-footer">Copyright &#169; 2016-2019 Joaqu&#237;n
725       M L&#243;pez Mu&#241;oz<p>
726         Distributed under the Boost Software License, Version 1.0. (See accompanying
727         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>)
728       </p>
729 </div></td>
730 </tr></table>
731 <hr>
732 <div class="spirit-nav">
733 <a accesskey="p" href="tutorial.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../poly_collection.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="reference.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
734 </div>
735 </body>
736 </html>