2022-04-07 18:46:57 +02:00
..
2022-04-07 18:46:57 +02:00
2022-04-07 18:46:57 +02:00
2022-04-07 18:46:57 +02:00
2022-04-07 18:46:57 +02:00
2022-04-07 18:46:57 +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. Tachyon 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>Tachyon sample</h1>
	</div>
	
	<p>
		Parallel raytracer / renderer that demonstrates the use of parallel_for.
	</p>
	<p><i>
		This example includes software developed by John E. Stone. See
		<a href="#copyright">here</a> for copyright information.
	</i></p>
	<p>
		This example is a 2-D raytracer/renderer that visually shows different parallel scheduling
		methods and their resulting speedup.  The code was parallelized by speculating
		that each pixel could be rendered in parallel.  The resulting parallel code was
		then checked for correctness by using Intel&reg; Thread Checker, which
		pointed out where synchronization was needed.  Minimal synchronization was then
		inserted into the parallel code.  The resulting parallel code exhibits good speedup.
	</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">Versions</div>
		<input type="checkbox" checked="checked">
		<div class="show-hide">
			<dl>
				<dt><b>serial</b>
				<dd>Original sequential version.
				<dt><b>tbb1d</b>
				<dd>Parallel version that uses Intel&reg; Threading Building Blocks (Intel&reg; TBB) and blocked_range to parallelize
					over tasks that are groups of scan-lines.
					<ul>
					<li>By default, this version uses one thread per available processor. To change this
					default, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.
					<li>This version uses the preview feature: auto_range_partitioner.  No grain size is provided to blocked_range.
						The blocked_range class uses a default grain size of 1 when none is provided.  However, the auto_range_partitioner
						controls the amount of range splitting dynamically at runtime, resulting in sub-ranges of varying sizes.
					</ul>
				<dt><b>tbb</b>
				<dd>Parallel version that uses Intel TBB and blocked_range2d to parallelize
					over tasks that are rectangular sub-areas.
					<ul>
					<li>By default, this version uses one thread per available processor.  To change this
					default, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.
					<li>This version uses a reasonable task grain size by default.  To change this default,
					set the TBB_GRAINSIZE environment variable to the desired grain size before running.
					The grain size corresponds to the number of pixels (in the X or Y direction, for a
					rectangular sub-area) in each parallel task.
					</ul>
			</dl>
		</div>
	</div>
	
	<div class="changes">
		<div class="h3-alike">Files</div>
		<input type="checkbox" checked="checked">
		<div class="show-hide">
			<dl>
				<dt><a href="src/main.cpp">src/main.cpp</a>
				<dd>Main program which parses command line options and runs the raytracer.
				<dt><a href="src/tachyon_video.cpp">src/tachyon_video.cpp</a>
				<dd>Source code for GUI interfaces.
				<dt><a href="src/trace.serial.cpp">src/trace.serial.cpp</a>
				<dd>Source code for original sequential version of example.
				<dt><a href="src/trace.tbb1d.cpp">src/trace.tbb1d.cpp</a>
				<dd>Source code for Intel TBB blocked_range (scan-line) version of example.
				<dt><a href="src/trace.tbb.cpp">src/trace.tbb.cpp</a>
				<dd>Source code for Intel TBB blocked_range2d (rectangular sub-area) version of example.
				<dt>(src/*.cpp)
				<dd>Remainder of source code for example.
				<dt>(src/*.h)
				<dd>Remainder of include files for example.
				<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="src/">src</a>
				<dd>Contains source code and include files for the example.
				<dt><a href="dat/">dat</a>
				<dd>Contains data sets for running the example.
				<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 (macOS* 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>
			<p>
				For Windows* systems Microsoft* Visual Studio* projects are provided for each of the above example versions.
			</p>

			<p>
			The Makefile supports the following build targets (in addition to the <a href="../../index.html">general</a> ones).
			Here, &lt;<i>version</i>&gt; is one of the above versions of the example, i.e., {serial, tbb1d, tbb}.
			</p>
			<dl>
				<dt><tt>make &lt;<i>version</i>&gt;[_debug]</tt>
				<dd>Build and run a single version (release or debug).
					Equivalent to 'make build_&lt;<i>version</i>&gt;[_debug] run_&lt;<i>version</i>&gt;'.
				<dt><tt>make build_&lt;<i>version</i>&gt;[_debug]</tt>
				<dd>Compile and link a single version (release or debug).
					The resulting executable is left in the directory for the example.
				<dt><tt>make run_&lt;<i>version</i>&gt;</tt>
				<dd>Run a single version previously produced by one of the above commands.
				<dt><tt>make [(above options or targets)] DATASET={820spheres, balls, balls3, lattice, model2,
					teapot, trypsin4pti}</tt>
				<dd>Build and run as above, but run with the specified data set.
				<dt><tt>make [(above options or targets)] ARGS=-D</tt>
				<dd>Build and run as above, but run with disabled run-time display updating for use in making performance measurements
					<i>(strongly recommended when measuring performance or scalability; see note below)</i>.
				<dt><tt>make [(above options or targets)] UI={con, gdi, d2d, x, mac}</tt>
				<dd>Build and run as usual, but build with the specified GUI driver: console, GDI+*, Direct2D*, X11, or OpenGL*
					(see the description of the <a href="../../common/index.html">common GUI code</a>
					for more information on available graphics support).
					For Linux* and macOS* systems, the best available driver is detected automatically by the Makefile.
					For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=d2d may offer superior
					performance, but can only be used if the Microsoft* DirectX* SDK is installed on your system.
					Use UI=con to build without the GUI for use in making performance measurements
					<i>(strongly recommended when measuring performance or scalability; see note below)</i>.
				<dt><tt>make [(above options or targets)] XARCH=x64</tt>
				<dd>Build and run as above, but
					also specify XARCH=x64 (or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.
				<dt><tt>make [(above options or targets)] DDLIB_DIR=&lt;<i>specify path to Direct Draw* SDK here</i>&gt;</tt>
				<dd>If you experience ddraw.lib linking problems, specify the correct library directory via this option.
			</dl>
		</div>
	</div>

	<div class="changes">
		<div class="h3-alike">Usage</div>
		<input type="checkbox" checked="checked">
		<div class="show-hide">
			<p>
				Building via the above make commands, or via Visual Studio projects on Windows* systems, produces executable files
				named <tt>tachyon.&lt;<i>version</i>&gt;.exe</tt>.  To run these executables directly, use one or more of the following commands.
			</p>
			<dl>
				<dt><tt>tachyon.&lt;<i>version</i>&gt; <i>-h</i></tt>
				<dd>Prints the help for command line options
				<dt><tt>tachyon.&lt;<i>version</i>&gt; [<i>dataset</i>=value] [<i>boundthresh</i>=value] [<i>no-display-updating</i>] [<i>nobounding</i>] [<i>silent</i>]</tt>
				<dt><tt>tachyon.&lt;<i>version</i>&gt; [<i>dataset</i> [<i>boundthresh</i>]] [<i>no-display-updating</i>] [<i>nobounding</i>] [<i>silent</i>]</tt>
				<dd><i>dataset</i> is the path/name of one of the *.dat files in the <a href="dat">dat</a> directory for the example.<br>
					<i>boundthresh</i> is a bounding threshold value.<br>
					<i>no-display-updating</i> - disable run-time display updating.<br>
					<i>no-bounding</i> - disable bounding technique.<br>
					<i>silent</i> - no output except elapsed time.<br>
				<dt><tt>tachyon.&lt;<i>version</i>&gt; [<i>dataset</i>] [<i>no-display-updating</i>]</tt>
				<dd>Run this version (release or debug), but run with disabled run-time display updating
					for use in making performance measurements
					<i>(strongly recommended when measuring performance or scalability; see note below)</i>.
				<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 <tt>tbb</tt> example with the GUI turned off
					(e.g., <tt>make UI=con tbb_debug</tt>; see also the build directions above).
					<br>Run it with a small dataset, e.g., <tt>tachyon.tbb.exe dat/820spheres.dat no-display-updating</tt>.
			</dl>
		</div>
	</div>
	
	<div class="changes">
		<div class="h3-alike">Keys</div>
		<input type="checkbox" checked="checked">
		<div class="show-hide">
			<p>While running with the GUI display turned on the following keyboard keys can be used:</p>
			<dl>
				<dt><tt>ESC</tt>
				<dd>Interrupt the rendering and exit
				<dt><tt><i>Any key</i></tt>
				<dd>Enable repetition of rendering after the pause. Press ESC to stop the application.
				<dt><tt>Space</tt>
				<dd>Toggle run-time display updating mode while rendering (see no-display-updating above).
				<dt><tt>p</tt>
				<dd>Holds the picture after rendering completion. Press 'p' again to continue.
			</dl>
		</div>
	</div>
	
	<div class="changes">
		<div class="h3-alike">Notes</div>
		<input type="checkbox" checked="checked">
		<div class="show-hide">
			<ul>
			<li>While running with the GUI display turned on should yield reasonable performance in most cases, <i>running with the GUI
				display turned off is strongly recommended</i> in order to demonstrate the full performance and scalability of the example.
			</ul>
		</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; 2020, Intel Corporation
			</p>

			<p>
			The original source for this example is
			Copyright (c) 1994-2008 John E. Stone
			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>Redistributions in binary form must reproduce the above copyright
			   notice, this list of conditions and the following disclaimer in the
			   documentation and/or other materials provided with the distribution.
			<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>