Parallel Hybrid Testing Tool for Applications Developed by Using MPI + OpenACC Dual-Programming Model

Article history: Received: 24 January, 2019 Accepted: 21 March, 2019 Online: 26 March, 2019 Building massively parallel applications has become increasingly important with coming Exascale related technologies. For building these applications, a combination of programming models is needed to increase the system's parallelism. One of these combinations is the dual-programming model (MPI+X) which has many structures that increase parallelism in heterogeneous systems that include CPUs and GPUs. MPI + OpenACC programming model has many advantages and features that increase parallelism with respect heterogeneous architecture and support different platform with more performance, productivity, and programmability. The main problem in building systems with different programming models that it is a hard job for programmers and it is more error-prone, which is not easy to test. Also, testing parallel applications is a difficult task, because of the non-determined behavior of the parallel application. Even after detecting the errors and modifying the source code, it is not easy to determine whether the errors have been corrected or remain hidden. Furthermore, integrating two different programming models inside the same application makes it even more difficult to test. Also, the misusage of OpenACC can lead to several run-time errors that compilers cannot detect, and the programmers will not know about them. To solve this problem, we proposed a parallel hybrid testing tool for detecting run-time errors for systems implemented in C++ and MPI + OpenACC. The hybrid techniques combine static and dynamic testing techniques for detecting real and potential run-time errors by analyzing the source code and during run time. Using parallel hybrid techniques will enhance the testing time and cover a wide range of errors. Also, we propose a new assertion language for helping in detecting potential run-time errors. Finally, to the best of our knowledge, identifying and classifying OpenACC errors has not been done before, and there is no parallel testing tool designed to test applications programmed by using the dualprogramming model MPI + OpenACC or the single-programming models OpenACC.

[1]  Malay K. Ganai Dynamic Livelock Analysis of Multi-threaded Programs , 2012, RV.

[2]  Denis Barthou,et al.  MPI Thread-Level Checking for MPI+OpenMP Applications , 2015, Euro-Par.

[3]  Chip Freitag,et al.  Exploring Parallel Programming Models for Heterogeneous Computing Systems , 2015, 2015 IEEE International Symposium on Workload Characterization.

[4]  Liqiang Wang,et al.  Detecting Thread-Safety Violations in Hybrid OpenMP/MPI Programs , 2015, 2015 IEEE International Conference on Cluster Computing.

[5]  Martin Schulz,et al.  AutomaDeD: Automata-based debugging for dissimilar parallel tasks , 2010, 2010 IEEE/IFIP International Conference on Dependable Systems & Networks (DSN).

[6]  John West,et al.  Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis , 2016, SC.

[7]  Nam Thoai,et al.  Race Condition and Deadlock Detection for Large-Scale Applications , 2016, 2016 15th International Symposium on Parallel and Distributed Computing (ISPDC).

[8]  Ben Ashbaugh,et al.  Khronos™ group , 2015, IWOCL.

[9]  Yu Huang An Analyzer for Message Passing Programs , 2016 .

[10]  Khalid Ahmad,et al.  Automatic Testing of OpenACC Applications , 2017, WACCPD@SC.

[11]  Daniel Kroening,et al.  Precise Predictive Analysis for Discovering Communication Deadlocks in MPI Programs , 2014, FM.

[12]  Julien Jaeger,et al.  Correctness Analysis of MPI-3 Non-Blocking Communications in PARCOACH , 2015, EuroMPI.

[13]  Michael M. Resch,et al.  Runtime Checking of MPI Applications with MARMOT , 2005 .

[14]  Christian Terboven,et al.  Classification of Common Errors in OpenMP Applications , 2014, IWOMP.

[15]  Aditya Kanade,et al.  Static deadlock detection for asynchronous C# programs , 2017, PLDI.

[16]  Stephen A. Jarvis,et al.  Achieving Portability and Performance through OpenACC , 2014, 2014 First Workshop on Accelerator Programming using Directives.

[17]  Sunita Chandrasekaran,et al.  OpenACC 2.5 Validation Testsuite Targeting Multiple Architectures , 2017, ISC Workshops.

[18]  Yan Cai,et al.  Dynamic Testing for Deadlocks via Constraints , 2016, IEEE Transactions on Software Engineering.

[19]  Hongyu Liu,et al.  UNDEAD: Detecting and preventing deadlocks in production software , 2017, 2017 32nd IEEE/ACM International Conference on Automated Software Engineering (ASE).

[20]  Leon J. Osterweil,et al.  AIDA: a dynamic analyser for Ada programs , 1994, Inf. Softw. Technol..

[21]  Jungwon Kim,et al.  IMPACC: A Tightly Integrated MPI+OpenACC Framework Exploiting Shared Memory Parallelism , 2016, HPDC.

[22]  Nobuko Yoshida,et al.  Static deadlock detection for concurrent go by global session graph synthesis , 2016, CC.

[23]  N. G. Bhuvaneswari Amma,et al.  Clasp: Detecting potential deadlocks and its removal by iterative method , 2015, 2015 Online International Conference on Green Engineering and Technologies (IC-GET).

[24]  Man Cao,et al.  Efficient, Practical Dynamic Program Analyses for Concurrency Correctness , 2017 .

[25]  Cheng Wang,et al.  A Validation Testsuite for OpenACC 1.0 , 2014, 2014 IEEE International Parallel & Distributed Processing Symposium Workshops.

[26]  Sandeep S. Kulkarni,et al.  Automatic repair for multi-threaded programs with Deadlock/Livelock using maximum satisfiability , 2014, ISSTA 2014.

[27]  Beverly Klemme Software Testing of Parallel Programming Frameworks , 2016 .

[28]  Vivek Sarkar,et al.  An Extended Polyhedral Model for SPMD Programs and Its Use in Static Data Race Detection , 2016, LCPC.