dust3d/thirdparty/instant-meshes/instant-meshes-dust3d/ext/tbb/examples/graph/cholesky
Jeremy Hu 2d05583937 Integrate Instant-Meshes
1. Drop windows 32bit support
Add windows 64bit support.

2. Remove Script(quickjs) support
The current integrated quickjs is a very old version which doesn’t support windows 64bit system. In the future, (TODO)WebAssembly should be integrate as plugin system.

3. Integrate Instant-Meshes
Instant-Meshes take less than 1 second on all three platforms.

4. Remove QuadriFlow
Current implementation of QuadriFlow is too slow (take about 5 seconds on the example model) to do realtime remeshing.
2020-01-04 19:59:10 +09:30
..
msvs Integrate Instant-Meshes 2020-01-04 19:59:10 +09:30
xcode/cholesky.xcodeproj Integrate Instant-Meshes 2020-01-04 19:59:10 +09:30
Makefile Integrate Instant-Meshes 2020-01-04 19:59:10 +09:30
Makefile.windows Integrate Instant-Meshes 2020-01-04 19:59:10 +09:30
cholesky.cpp Integrate Instant-Meshes 2020-01-04 19:59:10 +09:30
init.cpp Integrate Instant-Meshes 2020-01-04 19:59:10 +09:30
readme.html Integrate Instant-Meshes 2020-01-04 19:59:10 +09:30

readme.html

<!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. Cholesky 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>Cholesky sample</h1>
	</div>
	
	<p>
		This directory contains an example of several versions of Cholesky Factorization algorithm. 
		<br>
		<br><b>dpotrf</b>: An implementation that calls the Intel&reg; Math Kernel Library (Intel&reg; MKL) dpotrf function to directly perform the factorization.  This can be a serial implementation or threaded implementation depending on the version of the Intel MKL library that is linked against.
		<br>
		<br><b>crout</b>: A serial implementation that uses the Crout-Cholesky algorithm for factorization.  The same approach is parallelized for the other Intel&reg; Threading Building Blocks (Intel&reg; TBB) based approaches below.
		<br>
		<br><b>depend</b>: A parallel version of Crout-Cholesky factorization that uses an Intel TBB flow graph.  This version uses a dependence graph made solely of continue_node objects. This an inspector-executor approach, where a loop nest that is similar to the serial implementation is used to create an unrolled version of the computation.  Where the Intel MKL calls would have been made in the original serial implementation of Crout-Cholesky, instead nodes are created and these nodes are linked by edges to the other nodes that they are dependent upon.  The resulting graph is relatively large, with a node for each instance of each Intel MKL call.  For example, there are many nodes that call dtrsm; one for each invocation of dtrsm in the serial implementation.  The is very little overhead in message management for this version and so it is often the highest performing.
		<br>
		<br><b>join</b>: A parallel version of Crout-Cholesky factorization that uses an Intel TBB flow graph.  This version uses a data flow approach. This is a small, compact graph that passes tiles along its edges.  There is one node per type of Intel MKL call, plus join_nodes that combine the inputs required for each call.  So for example, there is only a single node that applies all calls to dtrsm.  This node is invoked when the tiles that hold the inputs and outputs for an invocation are matched together in the tag-matching join_node that precedes it.   The tag represents the iteration values of the i, j, k loops in the serial implementation at that invocation of the call. There is some overhead in message matching and forwarding, so it may not perform as well as the dependence graph implementation.
		<br>
		<br>This sample code requires a recent Intel TBB library (one that supports the flow graph). And also the Intel MKL library.
	</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="cholesky.cpp">cholesky.cpp</a>
				<dd>Source code for example.
				<dt><a href="init.cpp">init.cpp</a>
				<dd>Source code 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="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>cholesky [<i>size=value</i>] [<i>blocksize=value</i>] [<i>num_trials=value</i>] [<i>output_prefix=value</i>] [<i>algorithm=value</i>] [<i>num_tbb_threads=value</i>] [<i>input_file=value</i>] [<i>-x</i>] [<i>-h</i>] [<i>size</i> [<i>blocksize</i> [<i>num_trials</i> [<i>output_prefix</i> [<i>algorithm</i> [<i>num_tbb_threads</i>]]]]]]</tt>
				<dd>where:
				<br><tt><i>size</i></tt> - the row/column size of NxN matrix (size &lt;= 46000)
				<br><tt><i>blocksize</i></tt> - the block size; size must be a multiple of the blocksize
				<br><tt><i>num_trials</i></tt> - the number of times to run each algorithm
				<br><tt><i>output_prefix</i></tt> - if provided the prefix will be preappended to output files:
									 <i>output_prefix_posdef.txt</i> and
									 <i>output_prefix_X.txt</i>; where <i>X</i> is the algorithm used
				<br>if <tt><i>output_prefix</i></tt> is not provided, no output will be written
				<br><tt><i>algorithm</i></tt> - name of the used algorithm - can be dpotrf, crout, depend or join
				<br><tt><i>num_tbb_threads</i></tt> - number of started TBB threads
				<br><tt><i>input_file</i></tt> - if provided it will be read to get the input matrix
				<br><tt><i>-x</i></tt> - skips all validation
				<br><tt><i>-h</i></tt> - show this message
			</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>