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.