Files
tbb/examples/graph/fgbzip2
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. fgbzip2 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>fgbzip2 sample</h1>
	</div>

	<p>
		fgbzip2 is a parallel implementation of bzip2 block-sorting file compressor that uses tbb::flow.
		The output of this application is fully compatible with bzip2 v1.0.6 or newer.
	<br><br>
	<i>
		This example includes software developed by Julian R Seward. See
		<a href="#copyright">here</a> for copyright information.
	</i>
	<br>
		It exemplifies support for asynchronous capabilities in the flow graph API, in particular async_node and async_msg.
	<br><br>
		This example uses C++11 lambda expressions. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example.
		For more information please refer to the documentation for the compiler you use.
	</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="fgbzip2.cpp">fgbzip2.cpp</a>
				<dd>Flow Graph implementation of bzip2 compressor.
				<dt><a href="blocksort.cpp">blocksort.cpp</a>
				<dd>Block sorting machinery of libbzip2.
				<dt><a href="bzlib.cpp">bzlib.cpp</a>
				<dd>libbzip2 top-level functions.
				<dt><a href="bzlib.h">bzlib.h</a>
				<dd>Public header file for the libbzip2.
				<dt><a href="bzlib_private.h">bzlib_private.h</a>
				<dd>Private header file for the libbzip2.
				<dt><a href="compress.cpp">compress.cpp</a>
				<dd>Compression machinery of libbzip2.
				<dt><a href="crctable.cpp">crctable.cpp</a>
				<dd>libbzip2 table for doing CRCs.
				<dt><a href="decompress.cpp">decompress.cpp</a>
				<dd>Decompression machinery of libbzip2.
				<dt><a href="huffman.cpp">huffman.cpp</a>
				<dd>Huffman coding low-level stuff of libbzip2.
				<dt><a href="randtable.cpp">randtable.cpp</a>
				<dd>libbzip2 table for randomising repetitive blocks.
				<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>fgbzip2 <i>-h</i></tt>
				<dd>Prints the help for command line options
				<dt><tt>fgbzip2 [<i>-b</i>=value] [<i>-v</i>] [<i>-l</i>=value] [<i>-a</i>=value] [<i>filename</i>]</tt>
				<dd><i>-b</i> block size in 100 Kb chunks, [1 .. 9]<br>
					<i>-v</i> print diagnostic output to screen<br>
					<i>-l</i> used memory limit for compression algorithm with 1MB (minimum) granularity<br>
					<i>-a</i> name of the used graph async realization - can be async_node or async_msg<br>
					<i>filename</i> name of the file to compress<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, e.g., <tt>fgbzip2&nbsp;-b=1&nbsp;-a&nbsp;fgbzip2</tt>.
			</dl>
		</div>
	</div>

	<br>
	<a href="../index.html">Up to parent directory</a>
	<hr>
	<a name="copyright"></a>
	<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>

			<p>
				The "libbzip2" sources for this example is
				Copyright (c) 1996-2010 Julian R Seward.
				All rights reserved.
			</p>
			<p>
				Redistribution and use in source and binary forms, with or without
				modification, are permitted provided that the following conditions
				are met:
				<ol>
					<li>Redistributions of source code must retain the above copyright
					   notice, this list of conditions and the following disclaimer.
					<li>The origin of this software must not be misrepresented; you must
					   not claim that you wrote the original software.  If you use this
					   software in a product, an acknowledgment in the product
					   documentation would be appreciated but is not required.
					<li>Altered source versions must be plainly marked as such, and must
					   not be misrepresented as being the original software.
					<li>The name of the author may not be used to endorse or promote
					   products derived from this software without specific prior written
					   permission.
				</ol>
			</p>
			<p>
				THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
				OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
				WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
				ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
				DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
				DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
				GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
				INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
				WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
				NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
				SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
			</p>
		</div>
	</div>
	
</body>
</html>