# Release Notes » Release 3.1.0 (2021/04/14)

Taskflow 3.1.0 is the 2nd release in the 3.x line! This release includes several new changes such as CPU-GPU tasking, algorithm collection, enhanced web-based profiler, documentation, and unit tests.

## Download

Taskflow 3.1.0 can be downloaded from here.

## System Requirements

To use Taskflow v3.1.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 and SYCL20

Taskflow works on Linux, Windows, and Mac OS X.

## New Features

### Taskflow Core

- optimized task node storage by using std::unique_ptr for semaphores
- merged the execution flow of cudaFlow and cudaFlow capturer

### cudaFlow

- optimized tf::cudaRoundRobinCapturing through an event-pruning heuristic
- optimized the default block size used in cudaFlow algorithms
- added tf::cudaFlow::clear() to clean up a cudaFlow
- added tf::cudaFlow::num_tasks() to query the task count in a cudaFlow
- added tf::cudaTask::num_dependents() to query the dependent count in a cudaTask
- added tf::cudaFlowCapturer::clear() to clean up a cudaFlow capturer
- added tf::cudaFlowCapturer::num_tasks() to query the task count in a cudaFlow capturer
- added tf::cudaFlowCapturer rebind methods:
  - tf::cudaFlowCapturer::rebind_single_task
  - tf::cudaFlowCapturer::rebind_for_each
  - tf::cudaFlowCapturer::rebind_for_each_index
  - tf::cudaFlowCapturer::rebind_transform
  - tf::cudaFlowCapturer::rebind_reduce
  - tf::cudaFlowCapturer::rebind_uninitialized_reduce
- added tf::cudaFlow update methods:
  - tf::cudaFlow::update_for_each
  - tf::cudaFlow::update_for_each_index
  - tf::cudaFlow::update_transform
  - tf::cudaFlow::update_reduce
  - tf::cudaFlow::update_uninitialized_reduce
- added cudaFlow examples:
  - parallel reduction (examples/cuda/cuda_reduce.cu)
  - parallel transform (examples/cuda/cuda_transform.cu)
  - rebind (examples/cuda/cuda_rebind.cu)

### Utilities

- resolved the compiler warning in serializer caused by `constexpr if`
- resolved the compiler error of nvcc when parsin variadic namespace

### Taskflow Profiler (TFProf)

No update for TFProf in this release.

## Bug Fixes

- fixed the macro expansion issue with MSVC on `TF_CUDA_CHECK`
- fixed the serializer compile error (#288)
- fixed the tf::cudaTask::type bug in mixing host and empty task types

## Breaking Changes

There are no breaking changes in this release.

## Deprecated and Removed Items

There are no deprecated or removed items in this release.

## Documentation

- added Query the Worker ID to the cookbook page Executor
- revised update methods in GPU Tasking (cudaFlow)
- revised rebind methods in GPU Tasking (cudaFlowCapturer)

## Miscellaneous Items

- removed Circle-CI from the continuous integration
- updated grok to the user list
- updated RavEngine to the user list
- updated RPGMPacker to the user list
- updated Leanify to the user list

Tab / T to search, Esc to close
…

Search for symbols, directories, files, pages or modules. You can omit any prefix from the symbol or file path; adding a `:` or `/` suffix lists all members of given symbol or directory.

Use ↓ / ↑ to navigate through the list, Enter to go. Tab autocompletes common prefix, you can copy a link to the result using ⌘ L while ⌘ M produces a Markdown link.

Sorry, nothing was found.