release-3-7-0 Release 3.7.0 (2024/05/07) Download release-3-7-0_1release-3-7-0_download System Requirements release-3-7-0_1release-3-7-0_system_requirements Release Summary release-3-7-0_1release-3-7-0_summary New Features release-3-7-0_1release-3-7-0_new_features Taskflow Core release-3-7-0_1release-3-7-0_taskflow_core Utilities release-3-7-0_1release-3-7-0_utilities Bug Fixes release-3-7-0_1release-3-7-0_bug_fixes Breaking Changes release-3-7-0_1release-3-7-0_breaking_changes Documentation release-3-7-0_1release-3-7-0_documentation Miscellaneous Items release-3-7-0_1release-3-7-0_miscellaneous_items Taskflow 3.7.0 is the 8th release in the 3.x line! This release includes several new changes, such as exception support, improved scheduling algorithms, documentation, examples, and unit tests. Download Taskflow 3.7.0 can be downloaded from here. System Requirements To use Taskflow v3.7.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. Release Summary This release introduces a new exception interface to help identify C++ errors in taskflow programs. New Features Taskflow Core Improved scheduling performance of dependent asynchronous tasks Improved scheduling performance of module task by removing busy looping Improved tf::Executor::wait_for_all using C++20 atomic wait Improved tf::Notifier using C++20 atomic wait Improved worker-thread ID mapping performance using C++20 atomic wait Added -Wshadow to the compilation check Added tf::AsyncTask::is_done to query the completion status of an async task Added tf::Taskflow::remove_dependency to remove dependencies from the graph Added support for exception in tf::Taskflow and tf::Executor tf::Executorexecutor; tf::Taskflowtaskflow; taskflow.emplace([](){throwstd::runtime_error("exception");}); try{ executor.run(taskflow).get(); } catch(conststd::runtime_error&e){ std::cerr<<e.what()<<std::endl; } Modified the CI to exclude exception test under sanitizers Modified the tf::PartitionerBase to allow defining custom closure wrappers std::atomic<int>count=0; tf::Taskflowtaskflow; taskflow.for_each_index(0,100,1, [](){ printf("%d\n",i); }, tf::StaticPartitioner(0,[](auto&&closure){ //dosomethingbeforeinvokingthepartitionedtask //... //invokethepartitionedtask closure(); //dosomethingelseafterinvokingthepartitionedtask //... } ); executor.run(taskflow).wait(); Utilities Bug Fixes Fixed compilation error of CUDA examples caused by not including for_each.hpp Fixed the runtime error of tf::Taskflow::for_each_index when the range invalid Breaking Changes Renamed tf::Runtime::join to tf::Runtime::corun_all Removed tf::WorkerInterface due to the support of exception Documentation Revised Asynchronous Tasking with Dependencies Added Query the Completion Status of Dependent Async Tasks Revised Exception Handling Revised Executor Removed the section of tf::WorkerInterface Revised Partitioning Algorithm Miscellaneous Items We have published Taskflow in the following venues: Cheng-Hsiang Chiu, Zhicheng Xiong, Zizheng Guo, Tsung-Wei Huang, and Yibo Lin, "An Efficient Task-parallel Pipeline Programming Framework," ACM International Conference on High-performance Computing in Asia-Pacific Region (HPC Asia), Nagoya, Japan, 2024 Cheng-Hsiang Chiu, Dian-Lun Lin, and Tsung-Wei Huang,, "Programming Dynamic Task Parallelism for Heterogeneous EDA Algorithms," IEEE/ACM International Conference on Computer-aided Design (ICCAD), San Francisco, CA, 2023 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.