DEV Community

Cover image for Dispenso: high-performance concurrency, enabling highly parallel computation
Ernesto Herrera Salinas
Ernesto Herrera Salinas

Posted on

Dispenso: high-performance concurrency, enabling highly parallel computation

Dispenso, a library developed under the Facebook Incubator program, represents a significant advancement in the field of task parallelism for C++ programming. The library is designed for efficient execution of tasks in parallel, offering a range of features that facilitate high-performance concurrency. This makes it a powerful tool for highly parallel computation.

Key Features of Dispenso:

  1. Thread Pools and Task Sets: Dispenso provides mechanisms for creating and managing thread pools and sets of tasks, enabling efficient parallel execution of work.
  2. Parallel Loops: It includes parallel versions of for_each and for_each_n loops, as well as a parallel_for construct for efficient iteration over ranges in parallel.
  3. Futures and Pipelines: The library offers a futures implementation for asynchronous programming and facilities for parallel pipelining of workloads.
  4. Concurrent Data Structures: Dispenso includes concurrent versions of common data structures, such as vectors, and provides an object arena for fast allocation of objects of the same type.

Comparison with Other Libraries:

  • TBB (Threading Building Blocks): While there is significant overlap with TBB, Dispenso offers better integration with modern C++ standards and improved performance in some scenarios, especially for small and medium-sized loops.
  • OpenMP: Dispenso generally outperforms OpenMP for medium and large workloads, although OpenMP has an edge in small loops due to direct compiler support.
  • Folly: Another library from Meta, Folly lacks parallel loop constructs and task sets that Dispenso offers. Dispenso's futures are also faster and lighter-weight compared to Folly's for compute-bound applications.

When Not to Use Dispenso:
It's important to note that Dispenso is optimized for compute-bound tasks and might not be the best choice for scenarios involving high-latency task offload, such as networking or disk operations. In such cases, it may result in suboptimal performance.

Examples and Documentation:
Dispenso's documentation provides a variety of examples demonstrating its capabilities, such as how to use parallel_for for transforming sequential loops into parallel ones, how to manage task sets, and how to utilize futures for asynchronous operations.

In conclusion, Dispenso offers a robust set of tools for task parallelism in C++, making it a valuable resource for developers looking to leverage parallel computing in their applications. Its design for minimal dependencies and compatibility with modern C++ standards makes it a versatile choice for a wide range of projects.

For more detailed information and examples, you can visit the Dispenso documentation at facebookincubator.github.io/dispenso.

Image of Docusign

Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more