namespace tf {

/** @page release-3-1-0 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.

@tableofcontents

@section release-3-1-0_download Download

%Taskflow 3.1.0 can be downloaded from <a href="https://github.com/taskflow/taskflow/releases/tag/v3.1.0">here</a>.

@section release-3-1-0_system_requirements System Requirements

To use %Taskflow v3.1.0, you need a compiler that supports C++17:

@li GNU C++ Compiler at least v8.4 with -std=c++17
@li Clang C++ Compiler at least v6.0 with -std=c++17
@li Microsoft Visual Studio at least v19.27 with /std:c++17
@li AppleClang Xcode Version at least v12.0 with -std=c++17
@li Nvidia CUDA Toolkit and Compiler (nvcc) at least v11.1 with -std=c++17
@li Intel C++ Compiler at least v19.0.1 with -std=c++17
@li Intel DPC++ Clang Compiler at least v13.0.0 with -std=c++17 and SYCL20

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

@section release-3-1-0_new_features New Features

@subsection release-3-1-0_taskflow_core Taskflow Core

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

@subsection release-3-1-0_cudaflow cudaFlow

@li optimized tf::cudaRoundRobinCapturing through an event-pruning heuristic
@li optimized the default block size used in %cudaFlow algorithms
@li added tf::cudaFlow::clear() to clean up a %cudaFlow
@li added tf::cudaFlow::num_tasks() to query the task count in a %cudaFlow
@li added tf::cudaTask::num_dependents() to query the dependent count in a %cudaTask
@li added tf::cudaFlowCapturer::clear() to clean up a %cudaFlow capturer
@li added tf::cudaFlowCapturer::num_tasks() to query the task count in a %cudaFlow capturer
@li 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
@li 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
@li added %cudaFlow examples:
  + parallel reduction (examples/cuda/cuda_reduce.cu)
  + parallel transform (examples/cuda/cuda_transform.cu)
  + rebind (examples/cuda/cuda_rebind.cu)

@subsection release-3-1-0_utilities Utilities

@li resolved the compiler warning in serializer caused by <tt>constexpr if</tt>
@li resolved the compiler error of nvcc when parsin variadic namespace

@subsection release-3-1-0_profiler Taskflow Profiler (TFProf)

No update for TFProf in this release.

@section release-3-1-0_bug_fixes Bug Fixes 
 + fixed the macro expansion issue with MSVC on @c TF_CUDA_CHECK
 + fixed the serializer compile error ([#288](https://github.com/taskflow/taskflow/issues/288))
 + fixed the tf::cudaTask::type bug in mixing host and empty task types

@section release-3-1-0_breaking_changes Breaking Changes

There are no breaking changes in this release.

@section release-3-1-0_deprecated_items Deprecated and Removed Items 

There are no deprecated or removed items in this release.

@section release-3-1-0_documentation Documentation

+ added @ref QueryTheWorkerID to the cookbook page @ref ExecuteTaskflow
+ revised update methods in @ref GPUTaskingcudaFlow 
+ revised rebind methods in @ref GPUTaskingcudaFlowCapturer

@section release-3-1-0_miscellaneous_items Miscellaneous Items

+ removed Circle-CI from the continuous integration
+ updated <a href="https://github.com/GrokImageCompression/grok">grok</a> to the user list
+ updated <a href="https://github.com/Ravbug/RavEngine">RavEngine</a> to the user list
+ updated <a href="https://github.com/erri120/rpgmpacker">RPGMPacker</a> to the user list
+ updated <a href="https://github.com/JayXon/Leanify">Leanify</a> to the user list

*/

}
