Release 3.9.0 (2025/01/02)
Release Summary
This release improves scheduling performance with a decentralized work-stealing strategy and enhances exception handling across all task types.
Download
Taskflow 3.9.0 can be downloaded from here.
System Requirements
To use Taskflow v3.9.0, you need a compiler that supports C++17:
- GNU C++ Compiler at least v8.4 with -std=c++17
- Clang C++ Compiler at least v6.0 with -std=c++17
- Microsoft Visual Studio at least v19.27 with /std:c++17
- AppleClang Xcode Version at least v12.0 with -std=c++17
- Nvidia CUDA Toolkit and Compiler (nvcc) at least v11.1 with -std=c++17
- Intel C++ Compiler at least v19.0.1 with -std=c++17
- Intel DPC++ Clang Compiler at least v13.0.0 with -std=c++17
Taskflow works on Linux, Windows, and Mac OS X.
New Features
Taskflow Core
- improved the core scheduling algorithm using a decentralized work-stealing strategy
- tf::
BoundedTaskQueue to optimize per-thread work-stealing latency - tf::
UnboundedTaskQueue to handle overflowed tasks
- tf::
- enhanced tf::
Runtime to support preemptible execution flows - optimized task storage by storing detached tasks in their original subflows
- optimized the query efficiency for strong dependencies by embedding their values in node states
- updated tf::
Graph to derive from a vector of unique pointers to nodes - Graph node lifetimes are managed by std::
unique_ptr - Asynchronous task node lifetimes are managed by tf::
Executor.
- Graph node lifetimes are managed by std::
- expanded unit tests to include more exception handling scenarios
- decoupled tf::
Runtime from static task to accommodate distinct execution logic - removed the blocking behavior to avoid underutilized threads for the following tasks:
- module task (#649)
- subflow task
- all parallel algorithms (through preemptible async tasks)
- removed std::bind from asynchronous tasks to ensure proper constexpr switch
- added compile-time macros to enable specific features
TF_ENABLE_TASK_POOL
to enable the use of task pool
- added taskflow execution through asynchronous tasking with tf::
make_module_task - details can be referred to Module Algorithm
- added tf::
WorkerInterface for users to configure the behaviors of workers - details can be referred to Executor
- added worker interface example and unit tests
Utilities
- added
tf::
to relax CPU during busy spinning looppause - added
tf::
to generate a random seed based on calling time pointseed - added
tf::
to update an atomic variable with the minimum valueatomic_min - added
tf::
to update an atomic variable with the maximum valueatomic_max - added
TF_CPP20
andTF_CPP17
macro for testing cpp versions
Bug Fixes
Breaking Changes
- decoupled tf::
Subflow from inheriting tf:: Runtime to accommodate distinct execution logic - tf::
Subflow no longer supports tf:: Runtime-specific features
- tf::
- removed tf::Runtime::corun_until as it duplicates tf::
Executor:: corun_until - removed tf::
Runtime-based semaphore interface due to significant flaws of blocking corun (#647) - details can be referred to Limit the Maximum Concurrency
Documentation
- fixed missing documentation of tf::
Executor due to Doxygen bugs (#625) - fixed benchmark instance names in documentation (#621)
- revised Exception Handling
- revised Asynchronous Tasking
- revised Limit the Maximum Concurrency
- added Module Algorithm
Miscellaneous Items
Please do not hesitate to contact Dr. Tsung-Wei Huang if you intend to collaborate with us on using Taskflow in your scientific computing projects.