| Taskflow: A General-purpose Task-parallel Programming System

Loading...
Searching...
No Matches
Release 4.1.0 (2026/06/19)

# Release Summary

Following v4.0, this release (v4.1) further modernizes the codebase with C++20 concepts to improve extensibility, readability, and type safety. It introduces new parallel algorithms, including N-dimensional parallel iteration and parallel merge, as well as a redesigned profiler that improves scalability by replacing D3-based rendering with Canvas. This release also expands the documentation with many new examples and tutorials to help users learn and adopt Taskflow more effectively.

# Download

Taskflow 4.1.0 can be downloaded here.

# 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

- refactored the codebase with C++20 concept to enhance readability
  - credit goest to the amazing Anthropic Claude
- added bulk cache update method in executor
- added more unit tests to `test_notifiers.cpp`
- added a new unittest `test_partitioners.cpp`
- added module support under `taskflow/modules/`
- added adopted module task to support composable tasking with move semantics
  - tf::Taskflow::adopt
  - tf::Task::adopt
- added a new parallel-for algorithm over a multi-dimensional index range
  - tf::Taskflow::for_each_by_index (see Parallel Iterations)
- added a new parallel-merge algorithm tf::Taskflow::merge
  - see Parallel Merge
- 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
- introduced a new profiler to replace the existing tfprof
  - older version of the profiler can be referred to index.html at pre-v4.0
- removed extra copy on dependency tasks when creating a dependent-async task

## Utilities

- added tf::GraphLike concept to check if a type has a tf::Graph
- added tf::StaticTaskLike concept to check if a type is a static task
- added tf::SubflowTaskLike concept to check if a type is a subflow task
- added tf::RuntimeTaskLike concept to check if a type is a runtime task
- added tf::ConditionTaskLike concept to check if a type is a condition task
- added tf::MultiConditionTaskLike concept to check if a type is a multi-condition task
- added tf::PartitionerLike concept to check if a type is a partitioner
- added tf::IndexRangesLike concept to define N-dimensional index ranges
- added tf::IndexRanges to perform parallel iterations over an N-dimensional range
- added tf::unroll_until and tf::unroll_while to unroll loops with stopping conditions
- 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`
- fixed the bug in `find_if` where `result` is dangling under `N=0`

# Breaking Changes

- renamed `tf::IndexRange::discrete_domain` to `tf::IndexRange::unravel`
- replaced the D3-based rendering in tfprof with Canvas for better scalability

Note
  The newest tfprof can only take .tfp generated by v4.1, which introduces a more efficient format to load by the browser than the previous version. For .tfp generated before v4.1, please refer to the old version of tfprof at pre-v4.0.

# Documentation

- switched to the native doxygen for C++20 support
- revised Cookbook
  - added video tutorial links
- revised Composable Tasking
  - added Create an Adopted Module Task
- revised Profile Taskflow Programs
- revised Parallel Iterations
  - added Create an IndexRange-based Parallel-Iteration Task
- revised Learning from Examples
  - added 3D Stencil Computation
  - added Divide-and-Conquer Parallelism
  - added Async Producer-Consumer Pipeline
  - added Dynamic Dependency Graph
  - added Parallel Breadth-First Search
  - added Blocked Cholesky Factorization
  - added Sparse Matrix-Vector Multiplication
  - added 2D Image Convolution
  - added Travelling Salesman Problem
  - added Graph Coloring
  - added Critical Path Scheduling
  - added Incremental Build Graph
  - added Speculative Execution
- revised Profile Taskflow Programs
- added Parallel Merge

# 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!