Superflow – an efficient processing framework for modern C++
Abstract
This report describes Superflow, a generic data processing framework written in C++.
Superflow is made for creating and running flexible processing graphs, where the nodes are
individual processing stages, and the edges are data flows between nodes.
Processing stages are represented by concurrent processing elements, called proxels. Each
proxel is an abstraction that encapsulates a self-contained part of the processing pipeline, such
as specific algorithms, file writers or even parts of a graphical user interface (GUI). Data flows
between proxels are realised through connected ports, which are objects that provide different,
type-safe communication schemes through a common interface. A proxel typically has input
ports for receiving or requesting data and output ports for providing results. The proxels and
ports are managed in a container class called Graph, which offers a convenient way to start and
stop the processing graph, add and connect proxels, monitor the status of the processing graph,
and more.
In order to simplify the creation of a graph and to be flexible to changes in content and structure,
Superflow provides tools for parsing configuration files that contains lists of proxels, parameters
and connections. These can be used to create and start graphs automatically without recompiling
any code.
The design of Superflow makes it simple to combine different sensors, algorithms, and processing
stages and to dynamically reconfigure established processing pipelines. The framework supports
parallel processing, branching, and merging of pipelines as well as synchronisation through
barriers and latches. This is all performed in an efficient, type-safe, and extensible communication
scheme based on modern C++.
This report contains a description of the main components in Superflow, followed by a short
tutorial that will get you started on using Superflow in your own applications. Denne rapporten beskriver Superflow, et generisk rammeverk for dataprosessering skrevet i
C++.
Superflow er laget for å konstruere og kjøre dataprosesseringsgrafer, hvor nodene i grafen er
individuelle prosesseringssteg, og kantene representerer dataflyt mellom nodene.
Prosesseringsstegene representeres ved hjelp av en egen datatype, kalt proxel (processing
element), slik at hver proxel er en abstraksjon som innkapsler en selvstendig del av prosesseringskjeden.
En proxel kan for eksempel inneholde en spesiell algoritme, lesing og skriving til fil
eller presentasjon av et grafisk brukergrensesnitt (GUI). Hver proxel kan kjøres i en egen tråd,
slik at ulike prosesseringer foregår samtidig og i parallell. Dataflyten mellom proxler realiseres
gjennom sammenkoblede porter. Porter er egne klasser som tilbyr ulike former for multitråd- eller
multiprosesskommunikasjon bak et felles grensesnitt. En proxel har typisk input-porter for å motta
eller å be om data og output-porter for å levere fra seg resultater. Proxlene administreres ved
hjelp av en egen klasse kalt Graph, som gjør at man enkelt kan starte og stoppe prosesseringen,
legge til og koble sammen proxler, overvåke gjeldende status for grafen osv.
Superflow tilbyr verktøy for å lese inn konfigurasjonsfiler, noe som forenkler oppsettet av grafer
og gjør det enkelt å tilpasse grafens innhold og struktur. En konfigurasjonsfil definerer hvilke
proxler som skal inngå i grafen, hvordan portene kobles sammen, og eventuelle parametere
som justerer proxlenes virkemåte. Dette kan brukes til å generere og starte en graf automatisk,
uten å måtte rekompilere noe kode.
Virkemåten til Superflow gjør det enkelt å sette sammen ulike sensorer, algoritmer og prosesseringssteg
på en dynamisk måte. Rammeverket støtter parallell prosessering med forgrening, sammenfletting
og synkronisering av prosesseringsløyper. Alt dette er kodet inn i et effektivt, typesikkert
og utvidbart system basert på moderne C++.
Rapporten inneholder en beskrivelse av hovedkomponentene i Superflow, etterfulgt av et kort
praktisk eksempel som hjelper deg å komme i gang med å bruke Superflow til dine egne
anvendelser.