Pattern-driven Design of a Multiparadigm Parallel Programming Framework

published in Proceedings of the 15th International Conference on Evaluation of Novel Approaches to Software Engineering – Volume 1: ENASE, pp. 50-61, DOI: 10.5220/0009344100500061, 2020.

Cite as

Full paper is available for free on SciTePress website:

Pattern-driven Design of a Multiparadigm Parallel Programming Framework

Authors

Virginia Niculescu*, Frédéric Loulergue**, Darius Bufnea*, Adrian Sterca*
* Department of Computer Science, Faculty of Mathematics and Computer Science, Babeș-Bolyai University of Cluj-Napoca, Romania
** School of Informatics, Computing and Cyber Systems, Northern Arizona University, U.S.A.,
Univ. Orleans, INSA Centre Val de Loire, LIFO EA 4022, Orléans, France

Abstract

Parallel programming is more complex than sequential programming. It is therefore more difficult to achieve the same software quality in a parallel context. High-level parallel programming approaches are intermediate approaches where users are offered simplified APIs. There is a trade-off between expressivity and programming productivity, while still offering good performance. By being less error-prone, high-level approaches can improve application quality. From the API user point of view, such approaches should provide ease of programming without hindering performance. From the API implementor point of view, such approaches should be portable across parallel paradigms and extensible. JPLF is a framework for the Java language based on the theory of Powerlists, which are parallel recursive data structures. It is a high-level parallel programming approach that possesses the qualities mentioned above. This paper reflects on the design of JPLF: it explains the design choices and highlight s the design patterns and design principles applied to build JPLF.

Key words

Parallel Programming, Software Engineering, Recursive Data Structures, Design Patterns, Separation of Concerns.

BibTeX bib file

niculescu-2020.bib

References

  • Aldinucci, M., Danelutto, M., and Teti, P. (2003). An advanced environment supporting structured parallel programming in Java. Future Generation Comp. Syst., 19(5):611-626.
  • Caromel, D. and Leyton, M. (2007). Fine tuning algorithmic skeletons. In Euro-Par 2007, Parallel Processing, 13th International Euro-Par Conference, Rennes, France, August 28-31, 2007, Proceedings, pages 72-81.
  • Cole, M. (1991). Algorithmic Skeletons: Structured Management of Parallel Computation. MIT Press, Cambridge, MA, USA.
  • Cooley, J. and Tukey, J. (1965). An algorithm for the machine calculation of complex Fourier series. Mathematics of Computation, 19(90):297-301.
  • Cosmo, R. D., Li, Z., Pelagatti, S., and Weis, P. (2008). Skeletal Parallel Programming with OcamlP3l 2.0. 18(1):149-164.
  • Danelutto, M. and Torquati, M. (2015). Structured parallel programming with ”core” fastflow. Central European Functional Programming School. CEFP 2013. Lecture Notes in Computer Science, 8606:29-75.
  • Di Cosmo, R. and Danelutto, M. (2012). A “minimal disruption” skeleton experiment: seamless map & reduce embedding in OCaml. In International Conference on Computational Science (ICCS), volume 9, pages 1837-1846. Elsevier.
  • Falcou, J., Sérot, J., Chateau, T., and Lapresté, J.-T. (2006). Quaff: Efficient C++ Design for Parallel Skeletons. Parallel Computing, 32:604-615.
  • Gamma, E., Helm, R., Johnson, R., and Vlissides, J. (1995). Design Patterns: Elements of Reusable Object-oriented Software. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA.
  • Hammond, K. and Portillo, Á. J. R. (1999). Haskskel: Algorithmic skeletons in Haskell. In IFL, volume 1868 of LNCS, pages 181-198. Springer.
  • Intel (2019). Intel MPI library developer reference for Linux OS: Java bindings for MPI-2 routines. Accessed: 20-November-2019.
  • Javed, A., Qamar, B., Jameel, M., Shafi, A., and Carpenter, B. (2016). Towards scalable Java HPC with hybrid and native communication devices in MPJ Express. International Journal of Parallel Programming, 44(6):1142-1172.
  • Kornerup, J. (1997). Data Structures for Parallel Recursion. Ph.d. dissertation, University of Texas.
  • Légaux, J., Loulergue, F., and Jubertie, S. (2013). OSL: an algorithmic skeleton library with exceptions. In International Conference on Computational Science (ICCS), pages 260-269, Barcelona, Spain. Elsevier.
  • Leyton, M. and Piquer, J. M. (2010). Skandium: Multicore programming with algorithmic skeletons. In 18th Euromicro Conference on Parallel, Distributed and Network-based Processing (PDP), pages 289-296. IEEE Computer Society.
  • Loulergue, F. and Philippe, J. (2019). Automatic Optimization of Python Skeletal Parallel Programs. In Algorithms and Architectures for Parallel Processing (ICA3PP), LNCS, pages 183-197, Melbourne, Australia. Springer.
  • Marlow, S., editor (2010). Haskell 2010 Language Report. Minsky, Y. (2011). OCaml for the masses. Communications of the ACM, 54(11):53-58.
  • Misra, J. (1994). Powerlist: A structure for parallel recursion. ACM Trans. Program. Lang. Syst., 16(6):1737-1767.
  • MPI. Mpi: A message-passing interface standard. https://www.mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf. Accessed: 20-November-2019.
  • Niculescu, V., Bufnea, D., and Sterca, A. (2019). MPI scaling up for powerlist based parallel programs. In 27th Euromicro International Conference on Parallel, Distributed and Network-Based Processing, PDP 2019, Pavia, Italy, February 13-15, 2019, pages 199-204. IEEE.
  • Niculescu, V. and Loulergue., F. (2018). Transforming powerlist based divide&conquer programs for an improved execution model. In High Level Parallel Programming and Applications (HLPP), Orleans, France.
  • Niculescu, V., Loulergue, F., Bufnea, D., and Sterca, A. (2017). A Java framework for high level parallel programming using powerlists. In 18th International Conference on Parallel and Distributed Computing, Applications and Technologies, PDCAT 2017, Taipei, Taiwan, December 18-20, 2017, pages 255-262. IEEE.
  • Oracle. The Java tutorials: ForkJoinPool. https://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html. Accessed: 20-November-2019.
  • Pelagatti, S. (1998). Structured Development of Parallel Programs. Taylor & Francis.
  • Philippe, J. and Loulergue, F. (2019). PySke: Algorithmic skeletons for Python. In International Conference on High Performance Computing and Simulation (HPCS), pages 40-47. IEEE.
  • Qamar, B., Javed, A., Jameel, M., Shafi, A., and Carpenter, B. (2014). Design and implementation of hybrid and native communication devices for Java HPC. In Proceedings of the International Conference on Computational Science, ICCS 2014, Cairns, Queensland, Australia, 10-12 June, 2014, pages 184-197.
  • Vega-Gisbert, O., Román, J. E., and Squyres, J. M. (2016). Design and implementation of Java bindings in Open MPI. Parallel Computing, 59:1-20.
  • Veldhuizen, T. (2000). Techniques for Scientific C++. Computer science technical report 542, Indiana University.

Darius Bufnea