Paving the way towards high-level parallel pattern interfaces for data stream processing - del Rio Astorga, David; Dolz, Manuel F.; Fernández, Javier; García, J. Daniel (Future generation computer systems, 2018)
The emergence of the Internet of Things (IoT) data stream applications has posed a number of new challenges to existing infrastructures, processing engines, and programming models. In this sense, high-level interfaces, encapsulating algorithmic aspects in pattern-based constructions, have considerably reduced the development and parallelization efforts of this type of applications. An example of parallel pattern interface is GrPPI, a C++ generic high-level library that acts as a layer between developers and existing parallel programming frameworks, such as C++ threads, OpenMP and Intel TBB. In this paper, we complement the basic patterns supported by GrPPI with the new stream operators Split-Join and Window, and the advanced parallel patterns Stream-Pool, Windowed-Farm and Stream-Iterator for the aforementioned back ends. Thanks to these new stream operators, complex compositions among streaming patterns can be expressed. On the other hand, the collection of advanced patterns allows users to tackle some domain-specific applications, ranging from the evolutionary to the real-time computing areas, where compositions of basic patterns are not capable of fully mimicking the algorithmic behavior of their original sequential codes. The experimental evaluation of the new advanced patterns and the stream operators on a set of domain-specific use-cases, using different back ends and pattern-specific parameters, reports considerable performance gains with respect to the sequential versions. Additionally, we demonstrate the benefits of the GrPPI pattern interface from the usability, flexibility and readability points of view. •We provide the stream operators Window and Split-Join, able to modify stream flows.•We provide the advanced patterns: Stream-Pool, Windowed-Farm, and Stream-Iterator.•We prove the flexibility and the composability of the stream operators and patterns.•We assess the pattern usability w.r.t. lines of code (LOC) and cyclomatic complexity.•We evaluate patterns performance on different use cases and real stream applications.