From 2251f02a8694617f4cedb4ff3f7f3676e05350e5 Mon Sep 17 00:00:00 2001 From: Brian Budge Date: Tue, 26 Nov 2024 17:21:21 -0800 Subject: [PATCH] Add README section to compare to TaskFlow Summary: Add informal comparison to TaskFlow in the README. Reviewed By: elliotsegal-fb Differential Revision: D66258087 fbshipit-source-id: 3622bc75c10e57ee2e01f71e2867a396c9e6032f --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index a6dea7a..c79bed1 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,9 @@ Folly is a library from Meta that has several concurrency utilities including th Folly does not have a parallel loop concept, nor task sets and parallel pipelines. When comparing Folly's futures against dispenso's, dispenso tries to maintain an API that is closely matched to a combination of std::experimental::future and std::experimental::shared_future (dispenso's futures are all shared). Additionally, for compute-bound applications, dispenso's futures tend to be much faster and lighter-weight than Folly's. +### TaskFlow +TaskFlow is a library that seems to have been initially designed for parallel execution of task graphs. It has some similarities with Dispenso: It has a backing thread pool, it has a parallel_for-like functionality, task graphs, and pipelines. There are also utilities in each library that don't overlap (yet). TaskFlow task graphs are pretty high performance, and are sometimes faster than dispenso for full graph execution (depending on platform). Dispenso has higher-performance task graph building times and has the ability to run partially-modified task graphs much faster. Dispenso's parallel_for seems to be much lower overhead than TaskFlow's for_each_index (Dispenso is 10x to 100x faster in overhead benchmarks). Dispenso's pipelines are also much faster and much simpler to construct than TaskFlow's in our benchmarks. + ### Grand central dispatch, new std C++ parallelism, others We haven't done a strong comparison vs these other mechanisms. GCD is an Apple technology used by many people for Mac and iOS platforms, and there are ports to other platforms (though the mechanism for submitting closures is different). Much of the C++ parallel algorithms work is still TBD, but we would be very interested to enable dispenso to be a basis for parallelization of those algorithms. Additionally, we have interest in enabling dispenso to back the new coroutines interface. We'd be interested in any contributions people would like to make around benchmarking/summarizing other task parallelism libraries, and also integration with C++ parallel algorithms and coroutines.