ABSTRACT
Data generation, collection, and processing is an important workload of modern computer architectures. Stream or high-intensity data flow applications are commonly employed in extracting and interpreting the information contained in this data. Due to the computational complexity of these applications, high-performance ought to be achieved using parallel computing. Indeed, the efficient exploitation of available parallel resources from the architecture remains a challenging task for the programmers. Techniques and methodologies are required to help shift the efforts from the complexity of parallelism exploitation to specific algorithmic solutions. To tackle this problem, we propose a methodology that provides the developer with a suitable abstraction layer between a clean and effective parallel programming interface targeting different multi-core parallel programming frameworks. We used standard C++ code annotations that may be inserted in the source code by the programmer. Then, a compiler parses C++ code with the annotations and generates calls to the desired parallel runtime API. Our experiments demonstrate the feasibility of our methodology and the performance of the abstraction layer, where the difference is negligible in four applications with respect to the state-of-the-art C++ parallel programming frameworks. Additionally, our methodology allows improving the application performance since the developers can choose the runtime that best performs in their system.
- Marco Aldinucci, Marco Danelutto, Peter Kilpatrick, and Massimo Torquati. 2014. FastFlow: High-Level and Efficient Streaming on Multi-core. In Programming Multi-core and Many-core Computing Systems (PDC), Vol. 1. Wiley, 14.Google Scholar
- Henrique Andrade, Buğa Gedik, and Deepak S Turaga. 2014. Fundamentals of Stream Processing: Application Design, Systems, and Analytics. Cambridge University Press. Google ScholarDigital Library
- Marco Danelutto, Tiziano De Matteis, Daniele De Sensi, Gabriele Mencagli, Massimo Torquati, Marco Aldinucci, and Peter Kilpatrick. 2019. The RePhrase Extended Pattern Set for Data Intensive Parallel Computing. International Journal of Parallel Programming 47, 1 (01 Feb 2019), 74--93. Google ScholarDigital Library
- M. Danelutto and M. Torquati. 2014. Loop Parallelism: A New Skeleton Perspective on Data Parallel Patterns. In 2014 22nd Euromicro International Conference on Parallel, Distributed, and Network-Based Processing. 52--59. Google ScholarDigital Library
- David del Rio Astorga, Manuel F. Dolz, Luis Miguel Sanchez, Javier García Blas, and J. Daniel García. 2016. A C++ Generic Parallel Pattern Interface for Stream Processing. In Algorithms and Architectures for Parallel Processing, Jesus Carretero, Javier Garcia-Blas, Ryan K.L. Ko, Peter Mueller, and Koji Nakano (Eds.). Springer International Publishing, Cham, 74--87.Google Scholar
- David del Rio Astorga, Manuel F Dolz, Luis Miguel SÃąnchez, J Daniel GarcÃŋa, Marco Danelutto, and Massimo Torquati. 2018. Finding parallel patterns through static analysis in C++ applications. The International Journal of High Performance Computing Applications 32, 6 (2018), 779--788. Google ScholarDigital Library
- August Ernstsson, Lu Li, and Christoph Kessler. 2018. SkePU2:Flexible and Type-Safe Skeleton Programming for Heterogeneous Parallel Systems. International Journal of Parallel Programming 46 (2018), 62--80. Google ScholarDigital Library
- Dalvan Griebler. 2016. Domain-Specific Language & Support Tool for High-Level Stream Parallelism. Ph.D. Dissertation. Faculdade de Informática - PPGCC - PUCRS, Porto Alegre, Brazil.Google Scholar
- Dalvan Griebler, Marco Danelutto, Massimo Torquati, and Luiz Gustavo Fernandes. 2017. SPar: ADSL for High-Level and Productive Stream Parallelism. Parallel Processing Letters 27, 01 (March 2017), 1740005.Google ScholarCross Ref
- Dalvan Griebler, Renato B. Hoffmann, Marco Danelutto, and Luiz Gustavo Fernandes. 2018. High-Level and Productive Stream Parallelism for Dedup, Ferret, and Bzip2. International Journal of Parallel Programming 47, 1 (February 2018), 253--271. Google ScholarDigital Library
- Dalvan Griebler, Renato B. Hoffmann, Marco Danelutto, and Luiz Gustavo Fernandes. 2018. Stream Parallelism with Ordered Data Constraints on Multi-Core Systems. Journal of Supercomputing 75, 8 (July 2018), 4042--4061.Google Scholar
- Re'Em Harel, Idan Mosseri, Harel Levin, Lee-Or Alon, Matan Rusanovsky, and Gal Oren. 2019. Source-to-Source Parallelization Compilers for Scientific Shared-Memory Multi-core and Accelerated Multiprocessing: Analysis, Pitfalls, Enhancement and Potential. International Journal of Parallel Programming (08 2019).Google Scholar
- John L. Hennessy and David A. Patterson. 2019. Computer Architecture: A Quantitative Approach. Morgan Kaufman. Google ScholarDigital Library
- 14882:2014 ISO/IEC. 2014. Information Technology - Programming Languages - C++. Technical Report. International Standard, Geneva, Switzerland.Google Scholar
- Timothy G. Mattson, Beverly A. Sanders, and Berna L. Massingill. 2005. Patterns for Parallel Programming. Addison-Wesley, Boston, USA. Google ScholarDigital Library
- Michael McCool, Arch Robison, and James Reinders. 2012. Structured Parallel Programming: Patterns for Efficient Computation. Elsevier Science. Google ScholarDigital Library
- A. Navarro, R. Asenjo, S. Tabik, and C. Cascaval. 2009. Analytical Modeling of Pipeline Parallelism. In 2009 18th International Conference on Parallel Architectures and Compilation Techniques. 281--290. Google ScholarDigital Library
- James Reinders. 2007. Intel Threading Building Blocks. O'Reilly, Sebastopol, CA, USA. Google ScholarDigital Library
- Rephrase. accessed october 1, 2019. The Rephrase project. https://rephrase-eu.weebly.com/Google Scholar
- Stream Parallelism Annotations for Multi-Core Frameworks
Recommendations
High-Level Stream and Data Parallelism in C++ for GPUs
SBLP '22: Proceedings of the XXVI Brazilian Symposium on Programming LanguagesGPUs are massively parallel processors that allow solving problems that are not viable to traditional processors like CPUs. However, implementing applications for GPUs is challenging to programmers as it requires parallel programming to efficiently ...
High-Level Stream and Data Parallelism in C++ for Multi-Cores
SBLP '21: Proceedings of the 25th Brazilian Symposium on Programming LanguagesStream processing applications have seen an increasing demand with the increased availability of sensors, IoT devices, and user data. Modern systems can generate millions of data items per day that require to be processed timely. To deal with this ...
Structured Stream Parallelism for Rust
SBLP '19: Proceedings of the XXIII Brazilian Symposium on Programming LanguagesStructured parallel programming has been studied and applied in several programming languages. This approach has proven to be suitable for abstracting low-level and architecture-dependent parallelism implementations. Our goal is to provide a structured ...
Comments