A Tool for Translating Sequential Source Code to Parallel Code Written in C++ and OpenACC

In this paper, we introduce a translation tool that translates any sequential C++ source code into parallel source code written in C++ and OpenACC programming model. The tool generates different types of dependency graphs: class, method, loop, and block-of-statements graphs. The class and method dependency graphs are created for the sequential code, and the loop and block-of-statements dependency graphs are created for each method. From the class dependency graph, the dependency analyser identifies the independent classes, where the objects of the independent classes can run in parallel, and from the method dependency graph, the method analyser detects the methods that can run in parallel. For each block, the analyser detects the statements that run in parallel, where there is no data dependency between statements, and the loop analyser detects the type of parallelism in the loop-block: parallel statements, pipeline, or data partitions.

[1]  Francisco Heron de Carvalho Junior,et al.  An object-oriented parallel programming language for distributed-memory parallel computing platforms , 2014, Sci. Comput. Program..

[2]  Kevin Hammond,et al.  Finding parallel functional pearls: Automatic parallel recursion scheme detection in Haskell functions via anti-unification , 2018, Future Gener. Comput. Syst..

[3]  Sheena Mathew,et al.  Parallel for Loop and Parallel Reduction: An SMP Comparison of four Languages☆ , 2015 .

[4]  Rafael Asenjo,et al.  Automatic parallelization of irregular applications , 2000, Parallel Comput..

[5]  Luis Miguel Sánchez,et al.  Finding parallel patterns through static analysis in C++ applications , 2018, Int. J. High Perform. Comput. Appl..

[6]  Vinay G. Vaidya,et al.  A Review of Parallelization Tools and Introduction to Easypar , 2012 .

[7]  Jean Roman,et al.  Design and Analysis of a Task-based Parallelization over a Runtime System of an Explicit Finite-Volume CFD Code with Adaptive Time Stepping , 2017, J. Comput. Sci..

[8]  Jisha P Abraham,et al.  Automatic Code Parallelization with OpenMP task constructs , 2016, 2016 International Conference on Information Science (ICIS).

[9]  Vinay G. Vaidya,et al.  Automatic Sequential to Parallel Code Conversion , 2014 .

[10]  Mark D. Hill,et al.  Amdahl's Law in the Multicore Era , 2008 .

[11]  Fernando Magno Quintão Pereira,et al.  Automatic parallelization of canonical loops , 2013, Sci. Comput. Program..

[12]  Arthur Charguéraud,et al.  Parallel Work Inflation, Memory Effects, and their Empirical Analysis , 2017, ArXiv.

[13]  Nancy Hitschfeld-Kahler,et al.  A Survey on Parallel Computing and its Applications in Data-Parallel Problems Using GPU Architectures , 2014 .

[14]  Yuzhong Shen,et al.  Parallel implementations of structural similarity based no-reference image quality assessment , 2017, Adv. Eng. Softw..

[15]  Kevin Hammond,et al.  Automatically deriving cost models for structured parallel processes using hylomorphisms , 2018, Future Gener. Comput. Syst..

[16]  Maaz Bin Safeer Ahmad,et al.  Optimizing Data-Intensive Applications Automatically By Leveraging Parallel Data Processing Frameworks , 2017, SIGMOD Conference.

[17]  Bruno Cabral,et al.  Controlling the granularity of automatic parallel programs , 2016, J. Comput. Sci..

[18]  Changbo Chen,et al.  MetaFork: A Compilation Framework for Concurrency Models Targeting Hardware Accelerators , 2017 .

[19]  J. J. Collins,et al.  An empirical study of data decomposition for software parallelization , 2017, J. Syst. Softw..

[20]  Sesha Kalyur,et al.  ParaCite: Auto-parallelization of a sequential program using the Program Dependence Graph , 2016, 2016 International Conference on Computation System and Information Technology for Sustainable Solutions (CSITSS).

[21]  Bin Cong,et al.  Scalable Parallel Computing: Technology, Architecture, Programming , 1999, Scalable Comput. Pract. Exp..