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

Loading...
Searching...
No Matches
Release 3.11.0 (2025/11/24)

# Release Summary

This release improves scheduling performance through optimized memory ordering in the notification algorithm and fixes a few bugs related to exception handling. We also revised multiple cookbook pages to enhance readability.

# Download

Taskflow 3.11.0 can be downloaded here.

# System Requirements

To use Taskflow v3.11.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
- Apple Clang 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.

Attention
  Although Taskflow supports primarily C++17, you can enable C++20 compilation through `-std=c++20` to achieve better performance due to new C++20 features. That being said, we are actively working on migrating Taskflow to C++20, which is planned for the next major release v4.

# New Features

## Taskflow Core

- added `examples/task_visitor.cpp` to demonstrate how to traverse a taskflow (#699)
- added five benchmarks to showcase the capability of tf::Runtime
  - fibonacci
  - skynet
  - integrate
  - nqueens
  - primes
- added methods to retrieve the exception pointer of a task
  - tf::Task::exception_ptr
  - tf::AsyncTask::exception_ptr
- added methods to check if a task holds an exception pointer
  - tf::Task::has_exception_ptr
  - tf::AsyncTask::has_exception_ptr
- added several new unit tests for exception handling (`test_exception.cpp`)
  - recursive exception propagation
  - concurrent exception throwing
- added dependent-async methods to tf::Runtime (#701)
  - tf::Runtime::dependent_async
  - tf::Runtime::silent_dependent_async
- removed code support for SYCL
- removed `thread_local` to avoid incorrect references caused by Windows DLL boundaries
- replaced `TF_CACHELINE_SIZE` with std::hardware_destructive_interference_size
- enhanced the performance of atomic notifier via relaxed memory order
- enforced implicit synchronization at the end of a runtime task's scope for safer usage

## Utilities

- added `coprime` function
- added `floor_log2` function

# Bug Fixes

- toggled exception block in executor (#690)
- fixed missing exception on thread creation failure in executor (#693)
- fixed segmentation fault caused by empty async dependency (#700)
- fixed compilation errors for CUDA 13 (#721)
- fixed missing exception on recursive runtime tasking (#724)
- fixed memory leak in exception handling for async tasks (#730)

# Breaking Changes

- removed `tf::corun(graph)` due to a design flaw in its exception-handling behavior

// previously
taskflow.emplace([&](tf::Runtime& rt){
rt.corun(graph);
});
// now - simply use tf::Executor::corun
taskflow.emplace([&](tf::Runtime& rt){
executor.corun(graph);
});
tf::Runtime
class to create a runtime task
Definition runtime.hpp:47
tf::Runtime::corun
void corun()
corun all tasks spawned by this runtime with other workers
Definition runtime.hpp:646

# Documentation

- revised Static Tasking
- revised Executor
- revised Conditional Tasking
- revised Runtime Tasking
- revised Asynchronous Tasking
- revised Asynchronous Tasking with Dependencies
- revised Exception Handling
  - Retrieve the Exception Pointer of a Task
- revised Request Cancellation

# Miscellaneous Items

- Taskflow won the best poster award from 2025 CppCon!

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!