A fast, expressive, and header-only C++ library for building task-parallel programs with static, dynamic, and conditional task graphs.
Taskflow is a C++ library for task-parallel programming that allows developers to build complex parallel applications using task graphs. It solves the problem of expressing and managing parallelism in workloads that mix regular and irregular compute patterns, providing a high-level API and an efficient scheduler.
C++ developers working on performance-critical applications that require fine-grained parallelism, such as scientific computing, game engines, or data processing pipelines.
Developers choose Taskflow for its expressive API that supports conditional and dynamic tasking, its header-only design for easy integration, and its performance advantages through work-stealing scheduling and GPU offloading capabilities.
A General-purpose Task-parallel Programming System in C++
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Supports static, dynamic, and conditional tasking with clear C++ syntax, as shown in examples for subflow graphs and control-flow cycles, enabling complex parallel patterns.
Easy to add to projects with no installation; just include the headers, demonstrated by the simple compilation command using -I. flag.
Optimizes multithreaded performance for irregular workloads, backed by performance benchmarks in the README showing scalability advantages.
TFProf provides web-based execution diagrams and profiling via JSON output, making it easier to debug and optimize task graphs.
Enables CPU-GPU collaborative computing through CUDA Graph integration, allowing tasks like kernel launches and memory transfers within the task graph.
Restricts use to modern compilers (e.g., GCC 11+, Clang 12+), excluding legacy systems or projects unable to upgrade, as listed in supported compilers.
Limited to Nvidia GPUs and requires CUDA toolkit setup, adding complexity and vendor lock-in for heterogeneous computing beyond CPU tasks.
Mastering advanced features like conditional tasking, dynamic subflows, and graph composition can be daunting, despite the expressive API, potentially slowing initial adoption.
Graph visualization relies on GraphViz for DOT format output, requiring additional installation and tools beyond the core library.