The design philosophy of xSTreamC is to provide a simple to use language to describe data-flow graphs of deterministic semi-sequential tasks that communicate via virtual queues; in this sense the distributed model of computation supported by the language resembles a classical Kahn process network; with obvious additional constraints in the bounded length of the queues.
The language syntax is a superset of ANSI C, with the introduction of few additional keywords that allow the definition of constructs such as filters and pipelines.
The xSTreamC language has been used to successfully map real-world applications onto an array of computing engines, and allows for progressive migration of existing or legacy codebases onto the streaming model; in fact the language allows full ANSI C backward compatibility and mixing and matching of standard C code with streaming sections.
The xSTreamC compiler doesn't target a specific instruction set but it's rather a source to source translator that converts the input language to pure C that can be compiled with any compliant compiler for the target architecture.
In principle this allows the deployment of xSTreamC programs on heterogeneous computing architectures, although the approach was developed for feeding code to a symmetrical array of compute engines. The compiler transforms specific sections of the input code marked by the extended keywords according to a template definition file, which in itself is a standard C file with placeholders that are replaced by the compiler during compilation time.
This approach allows to easily retarget the xSTreamC translator to accommodate different kinds of architectures and low-level streaming APIs. The genesis of the language was heavily influenced by the streamIT language developed at MIT, although there are a number of differences between the two.
This project provides both the compiler and a functional simulation library called nstream that can be used to run the generated code for testing purposes.
For additional information:
Default filter library
Description of a JPEG codec example
The xSTreamC language was conceived prevalently from the work of Giuseppe Desoli, Laurent Romieux, Vittorio Zaccaria and Thierry Strudel with notable contributions of many other members of the xSTream project at the STMicrolectronics AST advanced computing group: Bruno Jego, Gilbert Richard, Richard Hersemeule, Jean-Philippe Cousin, Gilles Pellissier, Jean-Jose Berenguer.
The authors wish to thank STMicroelectronics for the permission to contribute this work to the open source communit