release-3-8-0

# Release 3.8.0 (2024/10/02)

Download
release-3-8-0_1release-3-8-0_download
System Requirements
release-3-8-0_1release-3-8-0_system_requirements
Release Summary
release-3-8-0_1release-3-8-0_summary
New Features
release-3-8-0_1release-3-8-0_new_features
Taskflow Core
release-3-8-0_1release-3-8-0_taskflow_core
Utilities
release-3-8-0_1release-3-8-0_utilities
Bug Fixes
release-3-8-0_1release-3-8-0_bug_fixes
Breaking Changes
release-3-8-0_1release-3-8-0_breaking_changes
Documentation
release-3-8-0_1release-3-8-0_documentation
Miscellaneous Items
release-3-8-0_1release-3-8-0_miscellaneous_items

This release includes several new changes, such as exception support, improved scheduling algorithms,

# Download

Taskflow 3.8.0 can be downloaded from here.

# System Requirements

To use Taskflow v3.8.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

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

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.

# Release Summary

This releases (1) enhances the scheduling performance through C++20 atomic notification and a bounded queue strategy and (2) revised the semaphore model for better runtime control.

When compiling Taskflow with C++20, applications should see improved performance due to C++20 atomic wait and notification.

# New Features

## Taskflow Core

- Enhanced the core scheduling algorithm using a new bounded queue strategy

- Enhanced the core scheduling performance using C++20 atomic notification

    #compileyourtaskflowprogramwithC++20enabled
    ~$g++-std=c++20my_taskflow.cpp

- Revised the semaphore programming model for better runtime control through tf::Runtime

    tf::Executorexecutor(8);//createanexecutorof8workers
    tf::Taskflowtaskflow;
    tf::Semaphoresemaphore(1);//createasemaphorewithinitialcount1
    for(size_ti=0;i<1000;i++){
    taskflow.emplace([&](tf::Runtime&rt){
    rt.acquire(semaphore);
    std::cout<<"criticalsectionhere(oneworkerhereonly)\n";
    critical_section();
    rt.release(semaphore);
    });
    }
    executor.run(taskflow).wait();

- Enhanced async-tasking performance through TLS

- Added async-task benchmark

- Added non-blocking notifier and atomic notifier modules

- Added tf::BoundedTaskQueue and tf::UnboundedTaskQueue

- Added tf::Freelist module to replace the centralized overflow queue

- Removed the redundant exception handling in object pool

## Utilities

# Bug Fixes

- Fixed the compilation error for not finding the C++ atomic library

- Fixed the missing tf::Runtime in asynchronous tasking

- Fixed the non-heterogeneity of tf::Taskflow::for_each_index

- Fixed the bug of UUID unit test in a multithreaded environment

# Breaking Changes

- Removed the support of object pool by default

- Removed the support of prioritized tasking due to inconsistency with work stealing

# Documentation

- Revised Limit the Maximum Concurrency

- Removed Prioritized Tasking

- Fixed typos in multiple pages

# Miscellaneous Items

Please do not hesitate to contact Dr. Tsung-Wei Huang if you intend to collaborate with us on using Taskflow in your scientific computing projects.