dispenso 1.4.1
A library for task parallelism
Loading...
Searching...
No Matches
Graphs & Pipelines

Task graph execution and pipeline processing. More...

Files

file  graph.h
 
file  graph_executor.h
 
file  pipeline.h
 

Detailed Description

Task graph execution and pipeline processing.

Task graphs allow expressing complex dependencies between tasks, while pipelines provide a streaming model for processing data through multiple stages.

Example: Task Graph with Dependencies

#include <dispenso/graph.h>
// Create nodes
auto& nodeA = graph.addNode([]() { /* compute A */ });
auto& nodeB = graph.addNode([]() { /* compute B */ });
auto& nodeC = graph.addNode([]() { /* uses A and B */ });
// C depends on A and B completing first
nodeC.dependsOn(nodeA, nodeB);
// Execute the graph
dispenso::TaskSet tasks(dispenso::globalThreadPool());
executor(tasks, graph);
N & addNode(T &&f)
Definition graph.h:554

Example: Pipeline Processing

int itemIndex = 0;
dispenso::pipeline(
// Generator stage: produces items
if (itemIndex < 100) return itemIndex++;
return {}; // Empty result signals completion
},
// Transform stage: process in parallel
dispenso::stage([](int x) { return x * 2; }, 4),
// Sink stage: consume results
[](int result) { /* use result */ }
);
auto stage(F &&f, ssize_t limit)
Definition pipeline.h:49
detail::OpResult< T > OpResult
Optional-like storage with in-place construction (C++14 compatible).
Definition pipeline.h:30