<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.9.1" xml:lang="en-US">
  <compounddef id="release-3-9-0" kind="page">
    <compoundname>release-3-9-0</compoundname>
    <title>Release 3.9.0 (2025/01/02)</title>
    <tableofcontents>
      <tocsect>
        <name>Release Summary</name>
        <reference>release-3-9-0_1release-3-9-0_summary</reference>
    </tocsect>
      <tocsect>
        <name>Download</name>
        <reference>release-3-9-0_1release-3-9-0_download</reference>
    </tocsect>
      <tocsect>
        <name>System Requirements</name>
        <reference>release-3-9-0_1release-3-9-0_system_requirements</reference>
    </tocsect>
      <tocsect>
        <name>New Features</name>
        <reference>release-3-9-0_1release-3-9-0_new_features</reference>
    <tableofcontents>
      <tocsect>
        <name>Taskflow Core</name>
        <reference>release-3-9-0_1release-3-9-0_taskflow_core</reference>
    </tocsect>
      <tocsect>
        <name>Utilities</name>
        <reference>release-3-9-0_1release-3-9-0_utilities</reference>
    </tocsect>
    </tableofcontents>
    </tocsect>
      <tocsect>
        <name>Bug Fixes</name>
        <reference>release-3-9-0_1release-3-9-0_bug_fixes</reference>
    </tocsect>
      <tocsect>
        <name>Breaking Changes</name>
        <reference>release-3-9-0_1release-3-9-0_breaking_changes</reference>
    </tocsect>
      <tocsect>
        <name>Documentation</name>
        <reference>release-3-9-0_1release-3-9-0_documentation</reference>
    </tocsect>
      <tocsect>
        <name>Miscellaneous Items</name>
        <reference>release-3-9-0_1release-3-9-0_miscellaneous_items</reference>
    </tocsect>
    </tableofcontents>
    <briefdescription>
    </briefdescription>
    <detaileddescription>
<sect1 id="release-3-9-0_1release-3-9-0_summary">
<title>Release Summary</title>
<para>This release improves scheduling performance with a decentralized work-stealing strategy and enhances exception handling across all task types.</para>
</sect1>
<sect1 id="release-3-9-0_1release-3-9-0_download">
<title>Download</title>
<para>To download the newest version of Taskflow, please clone the master branch from <ulink url="https://github.com/taskflow/taskflow">Taskflow&apos;s GitHub</ulink>.</para>
</sect1>
<sect1 id="release-3-9-0_1release-3-9-0_system_requirements">
<title>System Requirements</title>
<para>To use Taskflow v3.9.0, you need a compiler that supports C++17:</para>
<para><itemizedlist>
<listitem><para>GNU C++ Compiler at least v8.4 with -std=c++17 </para>
</listitem>
<listitem><para>Clang C++ Compiler at least v6.0 with -std=c++17 </para>
</listitem>
<listitem><para>Microsoft Visual Studio at least v19.27 with /std:c++17 </para>
</listitem>
<listitem><para>AppleClang Xcode Version at least v12.0 with -std=c++17 </para>
</listitem>
<listitem><para>Nvidia CUDA Toolkit and Compiler (nvcc) at least v11.1 with -std=c++17 </para>
</listitem>
<listitem><para>Intel C++ Compiler at least v19.0.1 with -std=c++17 </para>
</listitem>
<listitem><para>Intel DPC++ Clang Compiler at least v13.0.0 with -std=c++17</para>
</listitem>
</itemizedlist>
Taskflow works on Linux, Windows, and Mac OS X.</para>
<para><simplesect kind="attention"><para>Although Taskflow supports primarily C++17, you can enable C++20 compilation through <computeroutput>-std=c++20</computeroutput> to achieve better performance due to new C++20 features.</para>
</simplesect>
</para>
</sect1>
<sect1 id="release-3-9-0_1release-3-9-0_new_features">
<title>New Features</title>
<sect2 id="release-3-9-0_1release-3-9-0_taskflow_core">
<title>Taskflow Core</title>
<para><itemizedlist>
<listitem><para>improved the core scheduling algorithm using a decentralized work-stealing strategy<itemizedlist>
<listitem><para><ref refid="classtf_1_1BoundedTaskQueue" kindref="compound">tf::BoundedTaskQueue</ref> to optimize per-thread work-stealing latency</para>
</listitem><listitem><para><ref refid="classtf_1_1UnboundedTaskQueue" kindref="compound">tf::UnboundedTaskQueue</ref> to handle overflowed tasks</para>
</listitem></itemizedlist>
</para>
</listitem><listitem><para>enhanced <ref refid="classtf_1_1Runtime" kindref="compound">tf::Runtime</ref> to support preemptible execution flows</para>
</listitem><listitem><para>optimized task storage by storing detached tasks in their original subflows</para>
</listitem><listitem><para>optimized the query efficiency for strong dependencies by embedding their values in node states</para>
</listitem><listitem><para>updated <ref refid="classtf_1_1Graph" kindref="compound">tf::Graph</ref> to derive from a vector of unique pointers to nodes<itemizedlist>
<listitem><para>Graph node lifetimes are managed by <ref refid="cpp/memory/unique_ptr" kindref="compound" external="/home/thuang295/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::unique_ptr</ref></para>
</listitem><listitem><para>Asynchronous task node lifetimes are managed by <ref refid="classtf_1_1Executor" kindref="compound">tf::Executor</ref>.</para>
</listitem></itemizedlist>
</para>
</listitem><listitem><para>expanded unit tests to include more exception handling scenarios</para>
</listitem><listitem><para>decoupled <ref refid="classtf_1_1Runtime" kindref="compound">tf::Runtime</ref> from static task to accommodate distinct execution logic</para>
</listitem><listitem><para>removed the blocking behavior to avoid underutilized threads for the following tasks:<itemizedlist>
<listitem><para>module task (<ulink url="https://github.com/taskflow/taskflow/issues/649">#649</ulink>)</para>
</listitem><listitem><para>subflow task</para>
</listitem><listitem><para>all parallel algorithms (through preemptible async tasks)</para>
</listitem></itemizedlist>
</para>
</listitem><listitem><para>removed std::bind from asynchronous tasks to ensure proper constexpr switch</para>
</listitem><listitem><para>added compile-time macros to enable specific features<itemizedlist>
<listitem><para><computeroutput>TF_ENABLE_TASK_POOL</computeroutput> to enable the use of task pool</para>
</listitem></itemizedlist>
</para>
</listitem><listitem><para>added taskflow execution through asynchronous tasking with <ref refid="namespacetf_1aae281ad3b89a5c421a1f4058f425e54c" kindref="member">tf::make_module_task</ref><itemizedlist>
<listitem><para>details can be referred to <ref refid="ModuleAlgorithm" kindref="compound">Module Algorithm</ref></para>
</listitem></itemizedlist>
</para>
</listitem><listitem><para>added <ref refid="classtf_1_1WorkerInterface" kindref="compound">tf::WorkerInterface</ref> for users to configure the behaviors of workers<itemizedlist>
<listitem><para>details can be referred to <ref refid="ExecuteTaskflow" kindref="compound">Executor</ref></para>
</listitem></itemizedlist>
</para>
</listitem><listitem><para>added worker interface example and unit tests</para>
</listitem></itemizedlist>
</para>
</sect2>
<sect2 id="release-3-9-0_1release-3-9-0_utilities">
<title>Utilities</title>
<para><itemizedlist>
<listitem><para>added <computeroutput><ref refid="namespacetf_1aef9af2433294beb7d41680e5b33eafdd" kindref="member">tf::pause</ref></computeroutput> to relax CPU during busy spinning loop</para>
</listitem><listitem><para>added <computeroutput><ref refid="namespacetf_1a3f8e89aebc29d42259157723c874954d" kindref="member">tf::seed</ref></computeroutput> to generate a random seed based on calling time point</para>
</listitem><listitem><para>added <computeroutput><ref refid="namespacetf_1a512ffa0d24a237b098f5de656b8bdcb0" kindref="member">tf::atomic_min</ref></computeroutput> to update an atomic variable with the minimum value</para>
</listitem><listitem><para>added <computeroutput><ref refid="namespacetf_1a5002af34dc323ff28e87ae83203b2c36" kindref="member">tf::atomic_max</ref></computeroutput> to update an atomic variable with the maximum value</para>
</listitem><listitem><para>added <computeroutput>TF_CPP20</computeroutput> and <computeroutput>TF_CPP17</computeroutput> macro for testing cpp versions</para>
</listitem></itemizedlist>
</para>
</sect2>
</sect1>
<sect1 id="release-3-9-0_1release-3-9-0_bug_fixes">
<title>Bug Fixes</title>
<para><itemizedlist>
<listitem><para>fixed AppleClang compile error in <ref refid="tsq_8hpp" kindref="compound">tsq.hpp</ref> (<ulink url="https://github.com/taskflow/taskflow/pull/651">#651</ulink>)</para>
</listitem><listitem><para>fixed wrong range in uuid test (<ulink url="https://github.com/taskflow/taskflow/pull/632/">#632</ulink>)</para>
</listitem><listitem><para>fixed the exception bug in <ref refid="classtf_1_1Subflow_1a59fcac1323e70d920088dd37bd0be245" kindref="member">tf::Subflow::join</ref> (<ulink url="https://github.com/taskflow/taskflow/issues/602">#602</ulink>)</para>
</listitem><listitem><para>fixed the wrong prefix of target when running benchmark.py</para>
</listitem><listitem><para>fixed a bug in the join counter reset logic for scheduling condition tasks (<ulink url="https://github.com/taskflow/taskflow/issues/652">#652</ulink>)</para>
</listitem></itemizedlist>
</para>
</sect1>
<sect1 id="release-3-9-0_1release-3-9-0_breaking_changes">
<title>Breaking Changes</title>
<para><itemizedlist>
<listitem><para>decoupled <ref refid="classtf_1_1Subflow" kindref="compound">tf::Subflow</ref> from inheriting <ref refid="classtf_1_1Runtime" kindref="compound">tf::Runtime</ref> to accommodate distinct execution logic<itemizedlist>
<listitem><para><ref refid="classtf_1_1Subflow" kindref="compound">tf::Subflow</ref> no longer supports <ref refid="classtf_1_1Runtime" kindref="compound">tf::Runtime</ref>-specific features</para>
</listitem></itemizedlist>
</para>
</listitem><listitem><para>removed tf::Runtime::corun_until as it duplicates <ref refid="classtf_1_1Executor_1a0fc6eb19f168dc4a9cd0a7c6187c1d2d" kindref="member">tf::Executor::corun_until</ref></para>
</listitem><listitem><para>removed <ref refid="classtf_1_1Runtime" kindref="compound">tf::Runtime</ref>-based semaphore interface due to significant flaws of blocking corun (<ulink url="https://github.com/taskflow/taskflow/issues/647">#647</ulink>)<itemizedlist>
<listitem><para>details can be referred to <ref refid="LimitTheMaximumConcurrency" kindref="compound">Limit the Maximum Concurrency</ref></para>
</listitem></itemizedlist>
</para>
</listitem></itemizedlist>
</para>
</sect1>
<sect1 id="release-3-9-0_1release-3-9-0_documentation">
<title>Documentation</title>
<para><itemizedlist>
<listitem><para>fixed missing documentation of <ref refid="classtf_1_1Executor" kindref="compound">tf::Executor</ref> due to Doxygen bugs (<ulink url="https://github.com/taskflow/taskflow/pull/625">#625</ulink>)</para>
</listitem><listitem><para>fixed benchmark instance names in documentation (<ulink url="https://github.com/taskflow/taskflow/pull/621">#621</ulink>)</para>
</listitem><listitem><para>revised <ref refid="ExceptionHandling" kindref="compound">Exception Handling</ref></para>
</listitem><listitem><para>revised <ref refid="AsyncTasking" kindref="compound">Asynchronous Tasking</ref></para>
</listitem><listitem><para>revised <ref refid="LimitTheMaximumConcurrency" kindref="compound">Limit the Maximum Concurrency</ref></para>
</listitem><listitem><para>added <ref refid="ModuleAlgorithm" kindref="compound">Module Algorithm</ref></para>
</listitem></itemizedlist>
</para>
</sect1>
<sect1 id="release-3-9-0_1release-3-9-0_miscellaneous_items">
<title>Miscellaneous Items</title>
<para>Please do not hesitate to contact <ulink url="https://tsung-wei-huang.github.io/">Dr. Tsung-Wei Huang</ulink> if you intend to collaborate with us on using Taskflow in your scientific computing projects. </para>
</sect1>
    </detaileddescription>
    <location file="doxygen/releases/release-3.9.0.dox"/>
  </compounddef>
</doxygen>
