Taskflow 4.1.0 is the newest developing line to new features and improvements are actively introduced and supported. It is also where this documentation is generated. Many features are experimental and may change. While we strive for backward compatibility, breaking changes may occur when necessary to improve performance or simplify the software architecture.
Release Summary
Download
To download the newest version of Taskflow, please clone the master branch from Taskflow's GitHub.
System Requirements
To use Taskflow v4.1.0, you need a compiler that supports C++20:
- GNU C++ Compiler at least v11.0 with -std=c++20
- Clang C++ Compiler at least v12.0 with -std=c++20
- Microsoft Visual Studio at least v19.29 (VS 2019) with /std:c++20
- Apple Clang (Xcode) at least v13.0 with -std=c++20
- NVIDIA CUDA Toolkit and Compiler (nvcc) at least v12.0 with host compiler supporting C++20
- Intel oneAPI DPC++ Compiler at least v2022.0 with -std=c++20
- Note
- If your project does not support C++20, please use Taskflow v3.11.0, which can be downloaded here.
New Features
Taskflow Core
- added bulk cache update method in executor
- added more unit tests to
test_notifiers.cpp
- added module support under
taskflow/modules/
- added adopted module task to support composable tasking with move semantics
- added the parallel-for algorithm over a multi-dimensional index range
- improved the dump format with proper indention
- improved the dump format of
tf::Subflow with cluster-level edges
- optimized executor member variable data layout to reduce false sharing
- aligned
num_topologies to a cache line
- aligned
notifier to a cache line
- optimized
tf::Executor::run(Taskflow&&) with asynchronous tasking
- removed satellite field from both taskflow and executor classes
- optimized the locking cost of topology
- refactored the codebase with C++20 concept to enhance readability
- credit goest to the amazing Anthropic Claude
- introduced a new profiler to replace the existing tfprof
Utilities
- added tf::HasGraph concept to check if a type has a tf::Graph
- added tf::StaticTask concept to check if a type is a static task
- added tf::SubflowTask concept to check if a type is a subflow task
- added tf::RuntimeTask concept to check if a type is a runtime task
- added tf::ConditionTask concept to check if a type is a condition task
- added tf::MultiConditionTask concept to check if a type is a multi-condition task
- added tf::Partitioner concept to check if a type is a partitioner
- added tf::IndexRangeLike concept to define N-dimensional index ranges
- added tf::IndexRange to perform parallel iterations over an N-dimensional range
- removed
floor_log2 due to duplication with C++20 std::bit_width
- removed
cpu_pause due to platform-dependent implementation
Bug Fixes
- fixed the scope bug in creating
tf::Future<T> from std::future (#761)
- fixed the async bug in taking name as a parameter
- fixed the redundant call when
N is zero in for_each_by_index
Breaking Changes
- renamed
tf::IndexRange::discrete_domain to tf::IndexRange::unravel
Documentation
Miscellaneous Items
If you are interested in collaborating with us on applying Taskflow to your projects, please feel free to reach out to Dr. Tsung-Wei Huang!