Files
tbb/examples/parallel_reduce/primes
Hans Johnson e32d75f876 ENH: Update to TBB 2017 (2016-09-08 release)
The new release TBB is now under a new more
open license.
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

The list of most significant changes made over time in
Intel(R) Threading Building Blocks (Intel(R) TBB).

Intel TBB 2017
TBB_INTERFACE_VERSION == 9100

Changes (w.r.t. Intel TBB 4.4 Update 5):

- static_partitioner class is now a fully supported feature.
- async_node class is now a fully supported feature.
- Improved dynamic memory allocation replacement on Windows* OS to skip
    DLLs for which replacement cannot be done, instead of aborting.
- Intel TBB no longer performs dynamic memory allocation replacement
    for Microsoft* Visual Studio* 2008.
- For 64-bit platforms, quadrupled the worst-case limit on the amount
    of memory the Intel TBB allocator can handle.
- Added TBB_USE_GLIBCXX_VERSION macro to specify the version of GNU
    libstdc++ when it cannot be properly recognized, e.g. when used
    with Clang on Linux* OS. Inspired by a contribution from David A.
- Added graph/stereo example to demostrate tbb::flow::async_msg.
- Removed a few cases of excessive user data copying in the flow graph.
- Reworked split_node to eliminate unnecessary overheads.
- Added support for C++11 move semantics to the argument of
    tbb::parallel_do_feeder::add() method.
- Added C++11 move constructor and assignment operator to
    tbb::combinable template class.
- Added tbb::this_task_arena::max_concurrency() function and
    max_concurrency() method of class task_arena returning the maximal
    number of threads that can work inside an arena.
- Deprecated tbb::task_arena::current_thread_index() static method;
    use tbb::this_task_arena::current_thread_index() function instead.
- All examples for commercial version of library moved online:
    https://software.intel.com/en-us/product-code-samples. Examples are
    available as a standalone package or as a part of Intel(R) Parallel
    Studio XE or Intel(R) System Studio Online Samples packages.

Changes affecting backward compatibility:

- Renamed following methods and types in async_node class:
    Old                   New
    async_gateway_type => gateway_type
    async_gateway()    => gateway()
    async_try_put()    => try_put()
    async_reserve()    => reserve_wait()
    async_commit()     => release_wait()
- Internal layout of some flow graph nodes has changed; recompilation
    is recommended for all binaries that use the flow graph.

Preview Features:

- Added template class streaming_node to the flow graph API. It allows
    a flow graph to offload computations to other devices through
    streaming or offloading APIs.
- Template class opencl_node reimplemented as a specialization of
    streaming_node that works with OpenCL*.
- Added tbb::this_task_arena::isolate() function to isolate execution
    of a group of tasks or an algorithm from other tasks submitted
    to the scheduler.

Bugs fixed:

- Added a workaround for GCC bug #62258 in std::rethrow_exception()
    to prevent possible problems in case of exception propagation.
- Fixed parallel_scan to provide correct result if the initial value
    of an accumulator is not the operation identity value.
- Fixed a memory corruption in the memory allocator when it meets
    internal limits.
- Fixed the memory allocator on 64-bit platforms to align memory
    to 16 bytes by default for all allocations bigger than 8 bytes.
- As a workaround for crashes in the Intel TBB library compiled with
    GCC 6, added -flifetime-dse=1 to compilation options on Linux* OS.
- Fixed a race in the flow graph implementation.

Open-source contributions integrated:

- Enabling use of C++11 'override' keyword by Raf Schietekat.

------------------------------------------------------------------------
2016-09-28 21:12:48 +02:00
..

<!DOCTYPE html>
<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
<head>
	<meta charset="UTF-8">
	<style>
		::selection {
			background: #b7ffb7;
		}
		::-moz-selection {
			background: #b7ffb7;
		}

		body {
			font-family: Arial, Helvetica, sans-serif;
			font-size: 16px;
			width: 800px;
			margin: 0 auto;
		}
		#banner {
			/* Div for banner */
			float:left;
			margin: 0px;
			margin-bottom: 10px;
			width: 100%;
			background-color: #0071C5;
			z-index: 0;
		}
		#banner .logo {
			/* Apply to logo in banner. Add as class to image tag. */
			float: left;
			margin-right: 20px;
			margin-left: 20px;
			margin-top: 15px;
			padding-bottom: 5px;
		}
		h1 {
			text-align: center;
			font-size: 36px;
		}
		h1.title {
			/* Add as class to H1 in banner */
			font-family: "Intel Clear", Verdana, Arial, sans-serif;
			font-weight:normal;
			color: #FFFFFF;
			font-size: 170%;
			margin-right: 40px;
			margin-left: 40px;
			padding-right: 20px;
			text-indent: 20px;
		}
		.h3-alike {
			display:inline;
			font-size: 1.17em;
			font-weight: bold;
			color: #0071C5;
		}
		h3 {
			font-size: 1.17em;
			font-weight: bold;
			color: #0071C5;
		}
		.h4-alike {
			display:inline;
			font-size: 1.05em;
			font-weight: bold;
		}
		pre {
			font-family: "Consolas", Monaco, monospace;
			font-size:small;
			background: #fafafa;
			margin: 0;
			padding-left:20px;
		}
		#footer {
			font-size: small;
		}
		code {
			font-family: "Consolas", Monaco, monospace;
		}
		.code-block
		{
			padding-left:20px;
		}
		.changes {
			margin: 1em 0;
		}
		.changes input:active {
			position: relative;
			top: 1px;
		}
		.changes input:hover:after {
			padding-left: 16px;
			font-size: 10px;
			content: 'More';
		}
		.changes input:checked:hover:after {
			content: 'Less';
		}
		.changes input + .show-hide {
			display: none;
		}
		.changes input:checked + .show-hide {
			display: block;
		}

		ul {
			margin: 0;
			padding: 0.5em 0 0.5em 2.5em;
		}
		ul li {
			margin-bottom: 3px;
		}
		ul li:last-child {
			margin-bottom: 0;
		}
		.disc {
			list-style-type:disc
		}
		.circ {
			list-style-type:circle
		}
		
		.single {
			padding: 0 0.5em;
		}
		
		/* ------------------------------------------------- */
		/* Table styles                                      */
		table{
			margin-bottom:5pt;
			border-collapse:collapse;
			margin-left:0px;
			margin-top:0.3em;
			font-size:10pt;
		}
		tr{
			vertical-align:top;
		}
		th,
		th h3{
			padding:4px;
			text-align:left;
			background-color:#0071C5;
			font-weight:bold;
			margin-top:1px;
			margin-bottom:0;
			color:#FFFFFF;
			font-size:10pt;
			vertical-align:middle;
		}
		th{
			border:1px #dddddd solid;
			padding-top:2px;	 	 
			padding-bottom:0px;
			padding-right:3px;	 	 
			padding-left:3px;
		}
		td{
			border:1px #dddddd solid;
			vertical-align:top;
			font-size:100%;
			text-align:left;
			margin-bottom:0;
		}
		td,
		td p{
			margin-top:0;
			margin-left:0;
			text-align:left;
			font-size:inherit;
			line-height:120%;
		}
		td p{
			margin-bottom:0;
			padding-top:5px;
			padding-bottom:5px;
			padding-right:5px;
			padding-left:1px;
		}
		.noborder{
			border:0px none;
		}
		.noborder1stcol{
			border:0px none;
			padding-left:0pt;
		}
		td ol{
			font-size:inherit;
			margin-left:28px;
		}
		td ul{
			font-size:inherit;
			margin-left:24px;
		}
		.DefListTbl{
			width:90%;
			margin-left:-3pt;
		}
		.syntaxdiagramtbl{
			margin-left:-3pt;
		}
		.sdtbl{
		}
		.sdrow{
		}
		.sdtblp{
			border:0px none;
			font-size:inherit;
			line-height:120%;
			margin-bottom:0;
			padding-bottom:0px;
			padding-top:5px;
			padding-left:0px;
			padding-right:5px;
			vertical-align:top;
		}
		.idepara, .ide_para{
			border:0px none;
			font-size:inherit;
			line-height:120%;
			margin-bottom:0;
			padding-bottom:0px;
			padding-top:5px;
			padding-left:0px;
			padding-right:5px;
			vertical-align:top;
		}
		
		.specs {
			border-collapse:collapse;
		}
		.specs td, .specs th {
			font-size: 14px;
		}
		.specs td {
			border: 1px solid black;
		}
		.specs td td, .specs td th {
			border: none;
		}
		.specs	td, .specs td td, .specs td th {
			padding: 0 0.2em 0.2em;
			text-align: center;
		}
		.specs td tr:last-child td, 
		.specs td tr:last-child th {
			padding: 0 0.2em;
		}
		.serial-time {
		}
		.modified-time {
		width: 6.5em;
		}
		.compiler {
		}
		.comp-opt {
		}
		.sys-specs {
			width: 18em;
		}
		.note {
			font-size:small;
			font-style: italic;
		}
	</style>
	<title>Intel&reg; Threading Building Blocks. Primes sample</title>
</head>
<body>
	
	<div id="banner">
		<img class="logo" src="data:image/png;base64,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
				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
		<h1 class="title">Intel&reg; Threading Building Blocks.<br>Primes sample</h1>
	</div>
	
	<p>
		Parallel version of the Sieve of Eratosthenes.
	<br><br>
		The example can be built in the offload version to run on Intel&reg; Many Integrated Core (Intel&reg; MIC) Architecture based coprocessor (see <a href="../../index.html">build instructions</a>).
	</p>

	<div class="changes">
		<div class="h3-alike">System Requirements</div>
		<input type="checkbox">
		<div class="show-hide">
			<p>
				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
			</p>
		</div>
	</div>
	
	<div class="changes">
		<div class="h3-alike">Files</div>
		<input type="checkbox" checked="checked">
		<div class="show-hide">
			<dl>
				<dt><a href="main.cpp">main.cpp</a>
				<dd>Main program which parses command line options and runs the algorithm with different numbers of threads.
				<dt><a href="primes.h">primes.h</a>
				<dd>The Sieve of Eratosthenes interface.
				<dt><a href="primes.cpp">primes.cpp</a>
				<dd>The Sieve of Eratosthenes implementation.
				<dt><a href="Makefile">Makefile</a>
				<dd>Makefile for building the example.
			</dl>
		</div>
	</div>

	<div class="changes">
		<div class="h3-alike">Directories</div>
		<input type="checkbox" checked="checked">
		<div class="show-hide">
			<dl>
				<dt><a href="msvs/">msvs</a>
				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
				<dt><a href="xcode/">xcode</a>
				<dd>Contains Xcode* IDE workspace for building and running the example (OS X* systems only).
			</dl>
			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
		</div>
	</div>

	<div class="changes">
		<div class="h3-alike">Build instructions</div>
		<input type="checkbox" checked="checked">
		<div class="show-hide">
			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
		</div>
	</div>

	<div class="changes">
		<div class="h3-alike">Usage</div>
		<input type="checkbox" checked="checked">
		<div class="show-hide">
			<dl>
				<dt><tt>primes <i>-h</i></tt>
				<dd>Prints the help for command line options
				<dt><tt>primes [<i>n-of-threads</i>=value] [<i>number</i>=value] [<i>grain-size</i>=value] [<i>n-of-repeats</i>=value] [<i>silent</i>]</tt>
				<dt><tt>primes [<i>n-of-threads</i> [<i>number</i> [<i>grain-size</i> [<i>n-of-repeats</i>]]]][<i>silent</i>]</tt> 
				<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for the TBB default.<br>
					<i>number</i> is an upper bound of range to search primes in, must be a positive integer.<br>
					<i>grain-size</i> is an optional grain size, must be a positive integer. <br>
					<i>n-of-repeats</i> is a number of the calculation repeats, must be a positive integer.<br>
					<i>silent</i> - no output except elapsed time.<br>
				<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:
				<dd>Build a <i>debug</i> version of the example
					(see the <a href="../../index.html">build instructions</a>).
					<br>Run it with a small problem size and the desired number of threads, e.g., <tt>primes&nbsp;4&nbsp;100000</tt>.
			</dl>
		</div>
	</div>
	
	<br>
	<a href="../index.html">Up to parent directory</a>
	<hr>
	<div class="changes">
	<div class="h3-alike">Legal Information</div>
		<input type="checkbox">
		<div class="show-hide">
			<p>
				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
				<br>* Other names and brands may be claimed as the property of others. 
				<br>&copy; 2016, Intel Corporation
			</p>
		</div>
	</div>	
	
</body>
</html>