ACC_TEST: Hybrid Testing Techniques for MPI-Based Programs

Abdullah Saad Almalaise Alghamdi, Ahmed Mohammed Alghamdi, Fathy Elbouraey Eassa, Maher Ali Khemakhem
2020 IEEE Access  
Recently, MPI has become widely used in many scientific applications, including different non-computer science fields, for parallelizing their applications. An MPI programming model is used for supporting parallelism in several programming languages, including C, C++, and Fortran. MPI also supports integration with some programming models and has several implementations from different vendors, including open-source and commercial implementations. However, testing parallel programs is a
more » ... task, especially when using programming models with different behaviours and types of error based on the programming model type. In addition, the increased use of these programming models by non-computer science specialists can cause several errors due to lack of experience in programming, which needs to be considered when using any testing tools. We noticed that dynamic testing techniques have been used for testing the majority of MPI programs. The dynamic testing techniques detect errors by analyzing the source code during runtime, which will cause overheads, and this will affect the program's performance, especially when targeting massive parallel applications generating thousands or millions of threads. In this paper, we enhance ACC_TEST to have the ability to test MPI-based programs and detect runtime errors occurring with different types of MPI communications. We decided to use hybrid-testing techniques by combining both static and dynamic testing techniques to gain the benefit of each and reduce the cost. INDEX TERMS MPI, MPI testing tool, hybrid testing techniques, parallel programming, ACC_TEST. 91488 This work is licensed under a Creative Commons Attribution 4.0 License. For more information, see https://creativecommons.org/licenses/by/4.0/ VOLUME 8, 2020 ACC_TEST to see if the connection is completed or not, and if it is completed, determine whether there is matching between the source and the tag of this connection. However, if the connection is not received, this indicates that this connection has deadlock, and if it uses the MPI_Recv, the program will freeze. In Figure 3 , ACC_TEST inserts several statements for detecting deadlock in point-to-point blocking communication for testing MPI_Send and MPI_Recv. FIGURE 3. Insert test code for testing deadlock in point-to-point blocking communication (MPI_Send/MPI_Recv). FIGURE 4. Insert test code for testing race condition in point-to-point blocking communication (MPI_Send/MPI_Recv).
doi:10.1109/access.2020.2994172 fatcat:u34qzbzoezgtbkgaiyiomq323e