178 lines
28 KiB
HTML
178 lines
28 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<title>Release Notes » Release 3.6.0 (2023/05/07) | Taskflow QuickStart</title>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
|
|
<link rel="stylesheet" href="m-dark+documentation.compiled.css" />
|
|
<link rel="icon" href="favicon.ico" type="image/vnd.microsoft.icon" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<meta name="theme-color" content="#22272e" />
|
|
</head>
|
|
<body>
|
|
<header><nav id="navigation">
|
|
<div class="m-container">
|
|
<div class="m-row">
|
|
<span id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">
|
|
<a href="https://taskflow.github.io"><img src="taskflow_logo.png" alt="" />Taskflow</a> <span class="m-breadcrumb">|</span> <a href="index.html" class="m-thin">QuickStart</a>
|
|
</span>
|
|
<div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
|
|
<a href="#search" class="m-doc-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
|
|
<path id="m-doc-search-icon-path" d="m6 0c-3.31 0-6 2.69-6 6 0 3.31 2.69 6 6 6 1.49 0 2.85-0.541 3.89-1.44-0.0164 0.338 0.147 0.759 0.5 1.15l3.22 3.79c0.552 0.614 1.45 0.665 2 0.115 0.55-0.55 0.499-1.45-0.115-2l-3.79-3.22c-0.392-0.353-0.812-0.515-1.15-0.5 0.895-1.05 1.44-2.41 1.44-3.89 0-3.31-2.69-6-6-6zm0 1.56a4.44 4.44 0 0 1 4.44 4.44 4.44 4.44 0 0 1-4.44 4.44 4.44 4.44 0 0 1-4.44-4.44 4.44 4.44 0 0 1 4.44-4.44z"/>
|
|
</svg></a>
|
|
<a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
|
|
<a id="m-navbar-hide" href="#" title="Hide navigation"></a>
|
|
</div>
|
|
<div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
|
|
<div class="m-row">
|
|
<ol class="m-col-t-6 m-col-m-none">
|
|
<li><a href="pages.html">Handbook</a></li>
|
|
<li><a href="namespaces.html">Namespaces</a></li>
|
|
</ol>
|
|
<ol class="m-col-t-6 m-col-m-none" start="3">
|
|
<li><a href="annotated.html">Classes</a></li>
|
|
<li><a href="files.html">Files</a></li>
|
|
<li class="m-show-m"><a href="#search" class="m-doc-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
|
|
<use href="#m-doc-search-icon-path" />
|
|
</svg></a></li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav></header>
|
|
<main><article>
|
|
<div class="m-container m-container-inflatable">
|
|
<div class="m-row">
|
|
<div class="m-col-l-10 m-push-l-1">
|
|
<h1>
|
|
<span class="m-breadcrumb"><a href="Releases.html">Release Notes</a> »</span>
|
|
Release 3.6.0 (2023/05/07)
|
|
</h1>
|
|
<nav class="m-block m-default">
|
|
<h3>Contents</h3>
|
|
<ul>
|
|
<li><a href="#release-3-6-0_download">Download</a></li>
|
|
<li><a href="#release-3-6-0_system_requirements">System Requirements</a></li>
|
|
<li><a href="#release-3-6-0_summary">Release Summary</a></li>
|
|
<li>
|
|
<a href="#release-3-6-0_new_features">New Features</a>
|
|
<ul>
|
|
<li><a href="#release-3-6-0_taskflow_core">Taskflow Core</a></li>
|
|
<li><a href="#release-3-6-0_cudaflow">cudaFlow</a></li>
|
|
<li><a href="#release-3-6-0_utilities">Utilities</a></li>
|
|
<li><a href="#release-3-6-0_profiler">Taskflow Profiler (TFProf)</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#release-3-6-0_bug_fixes">Bug Fixes</a></li>
|
|
<li><a href="#release-3-6-0_breaking_changes">Breaking Changes</a></li>
|
|
<li><a href="#release-3-6-0_documentation">Documentation</a></li>
|
|
<li><a href="#release-3-6-0_miscellaneous_items">Miscellaneous Items</a></li>
|
|
</ul>
|
|
</nav>
|
|
<p>Taskflow 3.6.0 is the 7th release in the 3.x line! This release includes several new changes, such as dynamic task graph parallelism, improved parallel algorithms, modified GPU tasking interface, documentation, examples, and unit tests.</p><section id="release-3-6-0_download"><h2><a href="#release-3-6-0_download">Download</a></h2><p>Taskflow 3.6.0 can be downloaded from <a href="https://github.com/taskflow/taskflow/releases/tag/v3.6.0">here</a>.</p></section><section id="release-3-6-0_system_requirements"><h2><a href="#release-3-6-0_system_requirements">System Requirements</a></h2><p>To use Taskflow v3.6.0, you need a compiler that supports C++17:</p><ul><li>GNU C++ Compiler at least v8.4 with -std=c++17</li><li>Clang C++ Compiler at least v6.0 with -std=c++17</li><li>Microsoft Visual Studio at least v19.27 with /std:c++17</li><li>AppleClang Xcode Version at least v12.0 with -std=c++17</li><li>Nvidia CUDA Toolkit and Compiler (nvcc) at least v11.1 with -std=c++17</li><li>Intel C++ Compiler at least v19.0.1 with -std=c++17</li><li>Intel DPC++ Clang Compiler at least v13.0.0 with -std=c++17 and SYCL20</li></ul><p>Taskflow works on Linux, Windows, and Mac OS X.</p></section><section id="release-3-6-0_summary"><h2><a href="#release-3-6-0_summary">Release Summary</a></h2><p>This release contains several changes to largely enhance the programmability of GPU tasking and standard parallel algorithms. More importantly, we have introduced a new dependent asynchronous tasking model that offers great flexibility for expressing dynamic task graph parallelism.</p></section><section id="release-3-6-0_new_features"><h2><a href="#release-3-6-0_new_features">New Features</a></h2><section id="release-3-6-0_taskflow_core"><h3><a href="#release-3-6-0_taskflow_core">Taskflow Core</a></h3><ul><li>Added new async methods to support dynamic task graph creation<ul><li><a href="classtf_1_1Executor.html#aee02b63d3a91ad5ca5a1c0e71f3e128f" class="m-doc">tf::<wbr />Executor::<wbr />dependent_async(F&& func, Tasks&&... tasks)</a></li><li><a href="classtf_1_1Executor.html#a01e51e564f5def845506bcf6b4bb1664" class="m-doc">tf::<wbr />Executor::<wbr />dependent_async(F&& func, I first, I last)</a></li><li><a href="classtf_1_1Executor.html#a0e2d792f28136b8227b413d0c27d5c7f" class="m-doc">tf::<wbr />Executor::<wbr />silent_dependent_async(F&& func, Tasks&&... tasks)</a></li><li><a href="classtf_1_1Executor.html#aa9b08e47e68ae1e568f18aa7104cb9b1" class="m-doc">tf::<wbr />Executor::<wbr />silent_dependent_async(F&& func, I first, I last)</a></li></ul></li><li>Added new async and join methods to <a href="classtf_1_1Runtime.html" class="m-doc">tf::<wbr />Runtime</a><ul><li><a href="classtf_1_1Runtime.html#a5688b13034f179c4a8b2b0ebbb215051" class="m-doc">tf::<wbr />Runtime::<wbr />async</a></li><li><a href="classtf_1_1Runtime.html#a0ce29efa2106c8c5a1432e4a55ab2e05" class="m-doc">tf::<wbr />Runtime::<wbr />silent_async</a></li><li><a href="classtf_1_1Runtime.html#afcc18484a95fd2a834940d878eaf4dfc" class="m-doc">tf::<wbr />Runtime::<wbr />corun_all</a></li></ul></li><li>Added a new partitioner interface to optimize parallel algorithms<ul><li><a href="classtf_1_1GuidedPartitioner.html" class="m-doc">tf::<wbr />GuidedPartitioner</a></li><li><a href="classtf_1_1StaticPartitioner.html" class="m-doc">tf::<wbr />StaticPartitioner</a></li><li><a href="classtf_1_1DynamicPartitioner.html" class="m-doc">tf::<wbr />DynamicPartitioner</a></li><li><a href="classtf_1_1RandomPartitioner.html" class="m-doc">tf::<wbr />RandomPartitioner</a></li></ul></li><li>Added parallel-scan algorithms to Taskflow<ul><li>tf::Taskflow::inclusive_scan(B first, E last, D d_first, BOP bop)</li><li>tf::Taskflow::inclusive_scan(B first, E last, D d_first, BOP bop, T init)</li><li>tf::Taskflow::transform_inclusive_scan(B first, E last, D d_first, BOP bop, UOP uop)</li><li>tf::Taskflow::transform_inclusive_scan(B first, E last, D d_first, BOP bop, UOP uop, T init)</li><li>tf::Taskflow::exclusive_scan(B first, E last, D d_first, T init, BOP bop)</li><li>tf::Taskflow::transform_exclusive_scan(B first, E last, D d_first, T init, BOP bop, UOP uop)</li></ul></li><li>Added parallel-find algorithms to Taskflow<ul><li>tf::Taskflow::find_if(B first, E last, T& result, UOP predicate, P&& part)</li><li>tf::Taskflow::find_if_not(B first, E last, T& result, UOP predicate, P&& part)</li><li>tf::Taskflow::min_element(B first, E last, T& result, C comp, P&& part)</li><li>tf::Taskflow::max_element(B first, E last, T& result, C comp, P&& part)</li></ul></li><li>Modified <a href="classtf_1_1Subflow.html" class="m-doc">tf::<wbr />Subflow</a> as a derived class from <a href="classtf_1_1Runtime.html" class="m-doc">tf::<wbr />Runtime</a></li><li>Extended parallel algorithms to support different partitioning algorithms<ul><li>tf::Taskflow::for_each_index(B first, E last, S step, C callable, P&& part)</li><li>tf::Taskflow::for_each(B first, E last, C callable, P&& part)</li><li>tf::Taskflow::transform(B first1, E last1, O d_first, C c, P&& part)</li><li>tf::Taskflow::transform(B1 first1, E1 last1, B2 first2, O d_first, C c, P&& part)</li><li>tf::Taskflow::reduce(B first, E last, T& result, O bop, P&& part)</li><li>tf::Taskflow::transform_reduce(B first, E last, T& result, BOP bop, UOP uop, P&& part)</li></ul></li><li>Improved the performance of <a href="classtf_1_1FlowBuilder.html#a35e180eb63de6c9f28e43185e837a4fa" class="m-doc">tf::<wbr />Taskflow::<wbr />sort</a> for plain-old-data (POD) type</li><li>Extended task-parallel pipeline to handle token dependencies<ul><li><a href="TaskParallelPipelineWithTokenDependencies.html" class="m-doc">Task-parallel Pipeline with Token Dependencies</a></li></ul></li></ul></section><section id="release-3-6-0_cudaflow"><h3><a href="#release-3-6-0_cudaflow">cudaFlow</a></h3><ul><li>removed algorithms that require buffer from <a href="classtf_1_1cudaFlow.html" class="m-doc">tf::<wbr />cudaFlow</a> due to update limitation</li><li>removed support for a dedicated cudaFlow task in Taskflow<ul><li>all usage of <a href="classtf_1_1cudaFlow.html" class="m-doc">tf::<wbr />cudaFlow</a> and <a href="classtf_1_1cudaFlowCapturer.html" class="m-doc">tf::<wbr />cudaFlowCapturer</a> are standalone now</li></ul></li></ul></section><section id="release-3-6-0_utilities"><h3><a href="#release-3-6-0_utilities">Utilities</a></h3><ul><li>Added all_same templates to check if a parameter pack has the same type</li></ul></section><section id="release-3-6-0_profiler"><h3><a href="#release-3-6-0_profiler">Taskflow Profiler (TFProf)</a></h3><ul><li>Removed cudaFlow and syclFlow tasks</li></ul></section></section><section id="release-3-6-0_bug_fixes"><h2><a href="#release-3-6-0_bug_fixes">Bug Fixes</a></h2><ul><li>Fixed the compilation error caused by clashing <code>MAX_PRIORITY</code> wtih <code>winspool.h</code> (<a href="https://github.com/taskflow/taskflow/pull/459">#459</a>)</li><li>Fixed the compilation error caused by <a href="classtf_1_1TaskView.html#a3cb647dc0064b5d11e0c87226c47f8f8" class="m-doc">tf::<wbr />TaskView::<wbr />for_each_successor</a> and <a href="classtf_1_1TaskView.html#a55651e26436bfc2499cadaca4a24e48d" class="m-doc">tf::<wbr />TaskView::<wbr />for_each_dependent</a></li><li>Fixed the infinite-loop bug when corunning a module task from <a href="classtf_1_1Runtime.html" class="m-doc">tf::<wbr />Runtime</a></li></ul><p>If you encounter any potential bugs, please submit an issue at <a href="https://github.com/taskflow/taskflow/issues">issue tracker</a>.</p></section><section id="release-3-6-0_breaking_changes"><h2><a href="#release-3-6-0_breaking_changes">Breaking Changes</a></h2><ul><li>Dropped support for cancelling asynchronous tasks</li></ul><pre class="m-code"><span class="c1">// previous - no longer supported</span>
|
|
<span class="n">tf</span><span class="o">::</span><span class="n">Future</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="w"> </span><span class="n">fu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">executor</span><span class="p">.</span><span class="n">async</span><span class="p">([](){</span>
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
<span class="p">});</span>
|
|
<span class="n">fu</span><span class="p">.</span><span class="n">cancel</span><span class="p">();</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">optional</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="w"> </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fu</span><span class="p">.</span><span class="n">get</span><span class="p">();</span><span class="w"> </span><span class="c1">// res may be std::nullopt or 1</span>
|
|
|
|
<span class="c1">// now - use std::future instead</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">future</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="w"> </span><span class="n">fu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">executor</span><span class="p">.</span><span class="n">async</span><span class="p">([](){</span>
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
<span class="p">});</span>
|
|
<span class="kt">int</span><span class="w"> </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fu</span><span class="p">.</span><span class="n">get</span><span class="p">();</span></pre><ul><li>Dropped in-place support for running <a href="classtf_1_1cudaFlow.html" class="m-doc">tf::<wbr />cudaFlow</a> from a dedicated task</li></ul><pre class="m-code"><span class="c1">// previous - no longer supported</span>
|
|
<span class="n">taskflow</span><span class="p">.</span><span class="n">emplace</span><span class="p">([](</span><span class="n">tf</span><span class="o">::</span><span class="n">cudaFlow</span><span class="o">&</span><span class="w"> </span><span class="n">cf</span><span class="p">){</span>
|
|
<span class="w"> </span><span class="n">cf</span><span class="p">.</span><span class="n">offload</span><span class="p">();</span>
|
|
<span class="p">});</span>
|
|
|
|
<span class="c1">// now - user to fully control tf::cudaFlow for maximum flexibility</span>
|
|
<span class="n">taskflow</span><span class="p">.</span><span class="n">emplace</span><span class="p">([](){</span>
|
|
<span class="w"> </span><span class="n">tf</span><span class="o">::</span><span class="n">cudaFlow</span><span class="w"> </span><span class="n">cf</span><span class="p">;</span>
|
|
|
|
<span class="w"> </span><span class="c1">// offload the cudaflow asynchronously through a stream</span>
|
|
<span class="w"> </span><span class="n">tf</span><span class="o">::</span><span class="n">cudaStream</span><span class="w"> </span><span class="n">stream</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">cf</span><span class="p">.</span><span class="n">run</span><span class="p">(</span><span class="n">stream</span><span class="p">);</span>
|
|
|
|
<span class="w"> </span><span class="c1">// wait for the cudaflow completes</span>
|
|
<span class="w"> </span><span class="n">stream</span><span class="p">.</span><span class="n">synchronize</span><span class="p">();</span>
|
|
<span class="p">});</span></pre><ul><li>Dropped in-place support for running <a href="classtf_1_1cudaFlowCapturer.html" class="m-doc">tf::<wbr />cudaFlowCapturer</a> from a dedicated task</li></ul><pre class="m-code"><span class="c1">// previous - now longer supported</span>
|
|
<span class="n">taskflow</span><span class="p">.</span><span class="n">emplace</span><span class="p">([](</span><span class="n">tf</span><span class="o">::</span><span class="n">cudaFlowCapturer</span><span class="o">&</span><span class="w"> </span><span class="n">cf</span><span class="p">){</span>
|
|
<span class="w"> </span><span class="n">cf</span><span class="p">.</span><span class="n">offload</span><span class="p">();</span>
|
|
<span class="p">});</span>
|
|
|
|
<span class="c1">// now - user to fully control tf::cudaFlowCapturer for maximum flexibility</span>
|
|
<span class="n">taskflow</span><span class="p">.</span><span class="n">emplace</span><span class="p">([](){</span>
|
|
<span class="w"> </span><span class="n">tf</span><span class="o">::</span><span class="n">cudaFlowCapturer</span><span class="w"> </span><span class="n">cf</span><span class="p">;</span>
|
|
|
|
<span class="w"> </span><span class="c1">// offload the cudaflow asynchronously through a stream</span>
|
|
<span class="w"> </span><span class="n">tf</span><span class="o">::</span><span class="n">cudaStream</span><span class="w"> </span><span class="n">stream</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">cf</span><span class="p">.</span><span class="n">run</span><span class="p">(</span><span class="n">stream</span><span class="p">);</span>
|
|
|
|
<span class="w"> </span><span class="c1">// wait for the cudaflow completes</span>
|
|
<span class="w"> </span><span class="n">stream</span><span class="p">.</span><span class="n">synchronize</span><span class="p">();</span>
|
|
<span class="p">});</span></pre><ul><li>Dropped in-place support for running tf::syclFlow from a dedicated task<ul><li>SYCL can just be used out of box together with Taskflow</li></ul></li><li>Move all buffer query methods of CUDA standard algorithms inside execution policy<ul><li><a href="classtf_1_1cudaExecutionPolicy.html#a446cee95bb839ee180052059e2ad7fd6" class="m-doc">tf::<wbr />cudaExecutionPolicy<NT, VT>::<wbr />reduce_bufsz</a></li><li><a href="classtf_1_1cudaExecutionPolicy.html#af25648b3269902b333cfcd58665005e8" class="m-doc">tf::<wbr />cudaExecutionPolicy<NT, VT>::<wbr />scan_bufsz</a></li><li><a href="classtf_1_1cudaExecutionPolicy.html#a1febbe549d9cbe4502a5b66167ab9553" class="m-doc">tf::<wbr />cudaExecutionPolicy<NT, VT>::<wbr />merge_bufsz</a></li><li><a href="classtf_1_1cudaExecutionPolicy.html#abcafb001cd68c1135392f4bcda5a2a05" class="m-doc">tf::<wbr />cudaExecutionPolicy<NT, VT>::<wbr />min_element_bufsz</a></li><li><a href="classtf_1_1cudaExecutionPolicy.html#a31fe75c4b0765df3035e12be49af88aa" class="m-doc">tf::<wbr />cudaExecutionPolicy<NT, VT>::<wbr />max_element_bufsz</a></li></ul></li></ul><pre class="m-code"><span class="c1">// previous - no longer supported</span>
|
|
<span class="n">tf</span><span class="o">::</span><span class="n">cuda_reduce_buffer_size</span><span class="o"><</span><span class="n">tf</span><span class="o">::</span><span class="n">cudaDefaultExecutionPolicy</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="o">></span><span class="p">(</span><span class="n">N</span><span class="p">);</span>
|
|
|
|
<span class="c1">// now (and similarly for other parallel algorithms)</span>
|
|
<span class="n">tf</span><span class="o">::</span><span class="n">cudaDefaultExecutionPolicy</span><span class="w"> </span><span class="nf">policy</span><span class="p">(</span><span class="n">stream</span><span class="p">);</span>
|
|
<span class="n">policy</span><span class="p">.</span><span class="n">reduce_bufsz</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="p">(</span><span class="n">N</span><span class="p">);</span></pre><ul><li>Renamed tf::Executor::run_and_wait to <a href="classtf_1_1Executor.html#a8fcd9e0557922bb8194999f0cd433ea8" class="m-doc">tf::<wbr />Executor::<wbr />corun</a> for expressiveness</li><li>Renamed tf::Executor::loop_until to <a href="classtf_1_1Executor.html#a0fc6eb19f168dc4a9cd0a7c6187c1d2d" class="m-doc">tf::<wbr />Executor::<wbr />corun_until</a> for expressiveness</li><li>Renamed tf::Runtime::run_and_wait to <a href="classtf_1_1Runtime.html#a1c772e90614302024cfa52fa86d75cac" class="m-doc">tf::<wbr />Runtime::<wbr />corun</a> for expressiveness</li><li>Disabled argument support for all asynchronous tasking features<ul><li>users are responsible for creating their own wrapper to make the callable</li></ul></li></ul><pre class="m-code"><span class="c1">// previous - async allows passing arguments to the callable</span>
|
|
<span class="n">executor</span><span class="p">.</span><span class="n">async</span><span class="p">([](</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">){</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"> </span><span class="p">},</span><span class="w"> </span><span class="mi">4</span><span class="p">);</span><span class="w"> </span>
|
|
|
|
<span class="c1">// now - users are responsible of wrapping the arumgnets into a callable</span>
|
|
<span class="n">executor</span><span class="p">.</span><span class="n">async</span><span class="p">([</span><span class="n">i</span><span class="o">=</span><span class="mi">4</span><span class="p">](</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"> </span><span class="p">){});</span></pre><ul><li>Replaced <code>named_async</code> with an overload that takes the name string on the first argument</li></ul><pre class="m-code"><span class="c1">// previous - explicitly calling named_async to assign a name to an async task</span>
|
|
<span class="n">executor</span><span class="p">.</span><span class="n">named_async</span><span class="p">(</span><span class="s">"name"</span><span class="p">,</span><span class="w"> </span><span class="p">[](){});</span>
|
|
|
|
<span class="c1">// now - overlaod</span>
|
|
<span class="n">executor</span><span class="p">.</span><span class="n">async</span><span class="p">(</span><span class="s">"name"</span><span class="p">,</span><span class="w"> </span><span class="p">[](){});</span></pre></section><section id="release-3-6-0_documentation"><h2><a href="#release-3-6-0_documentation">Documentation</a></h2><ul><li>Revised <a href="RequestCancellation.html" class="m-doc">Request Cancellation</a> to remove support of cancelling async tasks</li><li>Revised <a href="AsyncTasking.html" class="m-doc">Asynchronous Tasking</a> to include asynchronous tasking from <a href="classtf_1_1Runtime.html" class="m-doc">tf::<wbr />Runtime</a><ul><li><a href="AsyncTasking.html#LaunchAsynchronousTasksFromARuntime" class="m-doc">Launch Asynchronous Tasks from a Runtime</a></li></ul></li><li>Revised Taskflow algorithms to include execution policy<ul><li><a href="PartitioningAlgorithm.html" class="m-doc">Partitioning Algorithm</a></li><li><a href="ParallelIterations.html" class="m-doc">Parallel Iterations</a></li><li><a href="ParallelTransforms.html" class="m-doc">Parallel Transforms</a></li><li><a href="ParallelReduction.html" class="m-doc">Parallel Reduction</a></li></ul></li><li>Revised CUDA standard algorithms to correct the use of buffer query methods<ul><li><a href="CUDASTDReduce.html" class="m-doc">Parallel Reduction</a></li><li><a href="CUDASTDFind.html" class="m-doc">Parallel Find</a></li><li><a href="CUDASTDMerge.html" class="m-doc">Parallel Merge</a></li><li><a href="CUDASTDScan.html" class="m-doc">Parallel Scan</a></li></ul></li><li>Added <a href="TaskParallelPipelineWithTokenDependencies.html" class="m-doc">Task-parallel Pipeline with Token Dependencies</a></li><li>Added <a href="ParallelScan.html" class="m-doc">Parallel Scan</a></li><li>Added <a href="DependentAsyncTasking.html" class="m-doc">Asynchronous Tasking with Dependencies</a></li></ul></section><section id="release-3-6-0_miscellaneous_items"><h2><a href="#release-3-6-0_miscellaneous_items">Miscellaneous Items</a></h2><p>We have published Taskflow in the following venues:</p><ul><li>Dian-Lun Lin, Yanqing Zhang, Haoxing Ren, Shih-Hsin Wang, Brucek Khailany and Tsung-Wei Huang, "<a href="https://tsung-wei-huang.github.io/papers/2023-dac.pdf">GenFuzz: GPU-accelerated Hardware Fuzzing using Genetic Algorithm with Multiple Inputs</a>," <em>ACM/IEEE Design Automation Conference (DAC)</em>, San Francisco, CA, 2023</li><li>Tsung-Wei Huang, "<a href="https://tsung-wei-huang.github.io/papers/ipdps23.pdf">qTask: Task-parallel Quantum Circuit Simulation with Incrementality</a>," <em>IEEE International Parallel and Distributed Processing Symposium (IPDPS)</em>, St. Petersburg, Florida, 2023</li><li>Elmir Dzaka, Dian-Lun Lin, and Tsung-Wei Huang, "<a href="https://tsung-wei-huang.github.io/papers/pdco-23.pdf">Parallel And-Inverter Graph Simulation Using a Task-graph Computing System</a>," <em>IEEE International Parallel and Distributed Processing Symposium Workshop (IPDPSW)</em>, St. Petersburg, Florida, 2023</li></ul><p>Please do not hesitate to contact <a href="https://tsung-wei-huang.github.io/">Dr. Tsung-Wei Huang</a> if you intend to collaborate with us on using Taskflow in your scientific computing projects.</p></section>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</article></main>
|
|
<div class="m-doc-search" id="search">
|
|
<a href="#!" onclick="return hideSearch()"></a>
|
|
<div class="m-container">
|
|
<div class="m-row">
|
|
<div class="m-col-m-8 m-push-m-2">
|
|
<div class="m-doc-search-header m-text m-small">
|
|
<div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
|
|
<div id="search-symbolcount">…</div>
|
|
</div>
|
|
<div class="m-doc-search-content">
|
|
<form>
|
|
<input type="search" name="q" id="search-input" placeholder="Loading …" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
|
|
</form>
|
|
<noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
|
|
<div id="search-help" class="m-text m-dim m-text-center">
|
|
<p class="m-noindent">Search for symbols, directories, files, pages or
|
|
modules. You can omit any prefix from the symbol or file path; adding a
|
|
<code>:</code> or <code>/</code> suffix lists all members of given symbol or
|
|
directory.</p>
|
|
<p class="m-noindent">Use <span class="m-label m-dim">↓</span>
|
|
/ <span class="m-label m-dim">↑</span> to navigate through the list,
|
|
<span class="m-label m-dim">Enter</span> to go.
|
|
<span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
|
|
copy a link to the result using <span class="m-label m-dim">⌘</span>
|
|
<span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
|
|
<span class="m-label m-dim">M</span> produces a Markdown link.</p>
|
|
</div>
|
|
<div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
|
|
<ul id="search-results"></ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script src="search-v2.js"></script>
|
|
<script src="searchdata-v2.js" async="async"></script>
|
|
<footer><nav>
|
|
<div class="m-container">
|
|
<div class="m-row">
|
|
<div class="m-col-l-10 m-push-l-1">
|
|
<p>Taskflow handbook is part of the <a href="https://taskflow.github.io">Taskflow project</a>, copyright © <a href="https://tsung-wei-huang.github.io/">Dr. Tsung-Wei Huang</a>, 2018–2024.<br />Generated by <a href="https://doxygen.org/">Doxygen</a> 1.9.1 and <a href="https://mcss.mosra.cz/">m.css</a>.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav></footer>
|
|
</body>
|
|
</html>
|