<?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-8-0" kind="page">
    <compoundname>release-3-8-0</compoundname>
    <title>Release 3.8.0 (2024/10/02)</title>
    <tableofcontents>
      <tocsect>
        <name>Release Summary</name>
        <reference>release-3-8-0_1release-3-8-0_summary</reference>
    </tocsect>
      <tocsect>
        <name>Download</name>
        <reference>release-3-8-0_1release-3-8-0_download</reference>
    </tocsect>
      <tocsect>
        <name>System Requirements</name>
        <reference>release-3-8-0_1release-3-8-0_system_requirements</reference>
    </tocsect>
      <tocsect>
        <name>New Features</name>
        <reference>release-3-8-0_1release-3-8-0_new_features</reference>
    <tableofcontents>
      <tocsect>
        <name>Taskflow Core</name>
        <reference>release-3-8-0_1release-3-8-0_taskflow_core</reference>
    </tocsect>
      <tocsect>
        <name>Utilities</name>
        <reference>release-3-8-0_1release-3-8-0_utilities</reference>
    </tocsect>
    </tableofcontents>
    </tocsect>
      <tocsect>
        <name>Bug Fixes</name>
        <reference>release-3-8-0_1release-3-8-0_bug_fixes</reference>
    </tocsect>
      <tocsect>
        <name>Breaking Changes</name>
        <reference>release-3-8-0_1release-3-8-0_breaking_changes</reference>
    </tocsect>
      <tocsect>
        <name>Documentation</name>
        <reference>release-3-8-0_1release-3-8-0_documentation</reference>
    </tocsect>
      <tocsect>
        <name>Miscellaneous Items</name>
        <reference>release-3-8-0_1release-3-8-0_miscellaneous_items</reference>
    </tocsect>
    </tableofcontents>
    <briefdescription>
    </briefdescription>
    <detaileddescription>
<sect1 id="release-3-8-0_1release-3-8-0_summary">
<title>Release Summary</title>
<para>This releases (1) enhances the scheduling performance through C++20 atomic notification and a bounded queue strategy and (2) revised the semaphore model for better runtime control.</para>
</sect1>
<sect1 id="release-3-8-0_1release-3-8-0_download">
<title>Download</title>
<para>Taskflow 3.8.0 can be downloaded from <ulink url="https://github.com/taskflow/taskflow/releases/tag/v3.8.0">here</ulink>.</para>
</sect1>
<sect1 id="release-3-8-0_1release-3-8-0_system_requirements">
<title>System Requirements</title>
<para>To use Taskflow v3.8.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-8-0_1release-3-8-0_new_features">
<title>New Features</title>
<sect2 id="release-3-8-0_1release-3-8-0_taskflow_core">
<title>Taskflow Core</title>
<para><itemizedlist>
<listitem><para>Enhanced the core scheduling algorithm using a new bounded queue strategy</para>
</listitem><listitem><para>Enhanced the core scheduling performance using C++20 atomic notification</para>
</listitem></itemizedlist>
</para>
<para><programlisting filename=".shell-session"><codeline><highlight class="normal">#<sp/>compile<sp/>your<sp/>taskflow<sp/>program<sp/>with<sp/>C++20<sp/>enabled</highlight></codeline>
<codeline><highlight class="normal">~$<sp/>g++<sp/>-std=c++20<sp/>my_taskflow.cpp<sp/></highlight></codeline>
</programlisting></para>
<para><itemizedlist>
<listitem><para>Revised the semaphore programming model for better runtime control through <ref refid="classtf_1_1Runtime" kindref="compound">tf::Runtime</ref></para>
</listitem></itemizedlist>
</para>
<para><programlisting filename=".cpp"><codeline><highlight class="normal"><ref refid="classtf_1_1Executor" kindref="compound">tf::Executor</ref><sp/>executor(8);<sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>create<sp/>an<sp/>executor<sp/>of<sp/>8<sp/>workers</highlight><highlight class="normal"></highlight></codeline>
<codeline><highlight class="normal"><ref refid="classtf_1_1Taskflow" kindref="compound">tf::Taskflow</ref><sp/>taskflow;</highlight></codeline>
<codeline><highlight class="normal"><ref refid="classtf_1_1Semaphore" kindref="compound">tf::Semaphore</ref><sp/>semaphore(1);<sp/></highlight><highlight class="comment">//<sp/>create<sp/>a<sp/>semaphore<sp/>with<sp/>initial<sp/>count<sp/>1</highlight><highlight class="normal"></highlight></codeline>
<codeline><highlight class="normal"></highlight><highlight class="keywordflow">for</highlight><highlight class="normal">(</highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>i=0;<sp/>i&lt;1000;<sp/>i++)<sp/>{</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/>taskflow.<ref refid="classtf_1_1FlowBuilder_1a60d7a666cab71ecfa3010b2efb0d6b57" kindref="member">emplace</ref>([&amp;](<ref refid="classtf_1_1Runtime" kindref="compound">tf::Runtime</ref>&amp;<sp/>rt){<sp/></highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/><sp/><sp/>rt.acquire(semaphore);</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/><sp/><sp/><ref refid="cpp/io/basic_ostream" kindref="compound" external="/home/thuang295/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::cout</ref><sp/>&lt;&lt;<sp/></highlight><highlight class="stringliteral">&quot;critical<sp/>section<sp/>here<sp/>(one<sp/>worker<sp/>here<sp/>only)\n&quot;</highlight><highlight class="normal">;<sp/></highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/><sp/><sp/>critical_section();</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/><sp/><sp/>rt.release(semaphore);</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/>});</highlight></codeline>
<codeline><highlight class="normal">}</highlight></codeline>
<codeline><highlight class="normal">executor.run(taskflow).wait();</highlight></codeline>
</programlisting></para>
<para><itemizedlist>
<listitem><para>Enhanced async-tasking performance through TLS</para>
</listitem><listitem><para>Added async-task benchmark</para>
</listitem><listitem><para>Added non-blocking notifier and atomic notifier modules</para>
</listitem><listitem><para>Added <ref refid="classtf_1_1BoundedTaskQueue" kindref="compound">tf::BoundedTaskQueue</ref> and <ref refid="classtf_1_1UnboundedTaskQueue" kindref="compound">tf::UnboundedTaskQueue</ref></para>
</listitem><listitem><para>Added tf::Freelist module to replace the centralized overflow queue</para>
</listitem><listitem><para>Removed the redundant exception handling in object pool</para>
</listitem></itemizedlist>
</para>
</sect2>
<sect2 id="release-3-8-0_1release-3-8-0_utilities">
<title>Utilities</title>
</sect2>
</sect1>
<sect1 id="release-3-8-0_1release-3-8-0_bug_fixes">
<title>Bug Fixes</title>
<para><itemizedlist>
<listitem><para>Fixed the compilation error for not finding the C++ atomic library</para>
</listitem><listitem><para>Fixed the missing <ref refid="classtf_1_1Runtime" kindref="compound">tf::Runtime</ref> in asynchronous tasking</para>
</listitem><listitem><para>Fixed the non-heterogeneity of <ref refid="classtf_1_1FlowBuilder_1a3b132bd902331a11b04b4ad66cf8bf77" kindref="member">tf::Taskflow::for_each_index</ref></para>
</listitem><listitem><para>Fixed the bug of UUID unit test in a multithreaded environment</para>
</listitem></itemizedlist>
</para>
</sect1>
<sect1 id="release-3-8-0_1release-3-8-0_breaking_changes">
<title>Breaking Changes</title>
<para><itemizedlist>
<listitem><para>Removed the support of object pool by default</para>
</listitem><listitem><para>Removed the support of prioritized tasking due to inconsistency with work stealing</para>
</listitem></itemizedlist>
</para>
</sect1>
<sect1 id="release-3-8-0_1release-3-8-0_documentation">
<title>Documentation</title>
<para><itemizedlist>
<listitem><para>Revised <ref refid="LimitTheMaximumConcurrency" kindref="compound">Limit the Maximum Concurrency</ref></para>
</listitem><listitem><para>Removed Prioritized Tasking</para>
</listitem><listitem><para>Fixed typos in multiple pages</para>
</listitem></itemizedlist>
</para>
</sect1>
<sect1 id="release-3-8-0_1release-3-8-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.8.0.dox"/>
  </compounddef>
</doxygen>
