You are currently viewing a new version of our website. To view the old version click .
Symmetry
  • Article
  • Open Access

20 September 2020

Parallel Hybrid Testing Techniques for the Dual-Programming Models-Based Programs

,
,
,
,
,
and
1
Department of Software Engineering, College of Computer Science and Engineering, University of Jeddah, Jeddah 21493, Saudi Arabia
2
Department of Computer Science, Faculty of Computing and Information Technology, King Abdulaziz University, Jeddah 21589, Saudi Arabia
3
Department of Information Systems, Faculty of Computing and Information Technology, King Abdulaziz University, Jeddah 21589, Saudi Arabia
4
Department of Computer Science and Artificial Intelligence, College of Computer Science and Engineering, University of Jeddah, Jeddah 21493, Saudi Arabia
This article belongs to the Section Computer

Abstract

The importance of high-performance computing is increasing, and Exascale systems will be feasible in a few years. These systems can be achieved by enhancing the hardware’s ability as well as the parallelism in the application by integrating more than one programming model. One of the dual-programming model combinations is Message Passing Interface (MPI) + OpenACC, which has several features including increased system parallelism, support for different platforms with more performance, better productivity, and less programming effort. Several testing tools target parallel applications built by using programming models, but more effort is needed, especially for high-level Graphics Processing Unit (GPU)-related programming models. Owing to the integration of different programming models, errors will be more frequent and unpredictable. Testing techniques are required to detect these errors, especially runtime errors resulting from the integration of MPI and OpenACC; studying their behavior is also important, especially some OpenACC runtime errors that cannot be detected by any compiler. In this paper, we enhance the capabilities of ACC_TEST to test the programs built by using the dual-programming models MPI + OpenACC and detect their related errors. Our tool integrated both static and dynamic testing techniques to create ACC_TEST and allowed us to benefit from the advantages of both techniques reducing overheads, enhancing system execution time, and covering a wide range of errors. Finally, ACC_TEST is a parallel testing tool that creates testing threads based on the number of application threads for detecting runtime errors.

1. Introduction

Exascale systems will be available in a few years. These systems can be achieved by enhancing hardware ability as well as parallelism in the application by integrating different programming models using dual- and tri-programming models. Exascale systems can achieve 1018 floating-point operations per second with thousands or millions of threads, which will involve several difficulties including runtime errors.
Parallel programs built by using programming models have been targeted by different testing tools. In particular, high-level programming models targeting Graphics Processing Unit (GPU) need more effort. Because of the integration between different programming models, errors will be more frequent and unpredictable and therefore need testing techniques to detect them. As a result, building a testing tool targeting parallel programs is not an easy task, especially when these parallel programs are built using integrated programming models. In addition, there is a shortage of testing tools targeting parallel systems, which use dual-programming models.
Previously, we proposed an architecture for a parallel testing tool targeting programs built with heterogeneous architecture, including the dual-programming models Message Passing Interface (MPI) + OpenACC, and covering different errors [1,2,3]. In addition, we proposed a static testing approach that targets OpenACC-related programs [4]. We then improved that to create a hybrid testing tool that targets OpenACC-related programs by integrating static and dynamic approaches; we named it ACC_TEST [5,6].
Parallelism and performance can be enhanced by integrating several programming models along with the ability to work in heterogeneous platforms. Using hybrid programming models helps move towards Exascale, which needs programming models for supporting massively parallel systems. The programming models can be classified into three levels: single-level programming model: MPI [7]; dual-level programming model: MPI + OpenMP [8]; and tri-level programming model: MPI + OpenMP + CUDA [9].
In this paper, the dual-programming model MPI + OpenACC has been chosen, as combining MPI and OpenACC enhances parallelism and performance and reduces programming efforts. OpenACC can be compiled to work in different hardware architecture as well as multiple device types, and MPI will be used for exchanging data between different nodes. The dual-programming model combines the advantages of both programming models, including programmability and portability from OpenACC and high performance, scalability, and portability from MPI [10].
We chose this combination because OpenACC has allowed non-computer science specialists to parallelize their programs, which can possibly lead to errors when OpenACC directives and clauses are misused. OpenACC uses high-level directives without considering much detail, which is one of its main features. In addition, OpenACC has the ability to work on any GPU platform, which gives it high portability. We believe that this combination needs to be considered for testing because there is a high possibility of runtime errors occurring when programmers use MPI + OpenACC. Some researchers claim that MPI + CUDA [9], a hybrid programming model, can be applicable on heterogeneous cluster systems. However, this combination only works on NVIDIA GPU devices and CUDA is considered a low-level programming model that needs various details. In addition, the combination of MPI + OpenMP [8] targets homogenous architecture through shared memory, which does not serve the purpose of using the GPU in accelerating the user codes.
The first part of the chosen combination is Message-Passing Interface (MPI), the first version of which was released in 1994 [11]. MPI supports parallelism in C, C++, and Fortran by using message passing to establish standard efficient, portable, and flexible message passing programs. MPI has the ability to be integrated with other programming models, including shared memory-related programming models like OpenMP and GPU-related programming models like OpenACC. In addition, MPI has two types of communication, including point-to-point and collective, which can be blocking or non-blocking. Finally, MPI has released the latest version MPI 4.0, which has the ability to better support hybrid-programming models [11].
The second part is OpenACC, which has been released to support parallelism and accelerate C, C++, and Fortran codes for heterogeneous CPU/GPU systems by using high-level directives. OpenACC has three directive types, including compute, data management, and synchronization directives. In November 2019, the latest OpenACC version 3.0 [12] was released to include many features to support parallelism, including portability, flexibility, compatibility, and less programming effort and time.
In this paper, the ACC_TEST has been improved upon to have the ability to test programs built using MPI + OpenACC dual-programming models and detect related errors. Our solution aimed at covering a wide range of errors that occur in the dual-programming models MPI + OpenACC with less overhead and better system execution time. Finally, our testing tool works in parallel by detecting runtime errors with testing threads created based on application threads numbers.
This paper is structured as follows: Section 2 provides a related work, including testing tools classified by the testing techniques that were used. We explain our techniques for testing the programs based on dual-programming models in Section 3. We discuss our implementation, testing, and evaluation of ACC_TEST in Section 4 and show some results from our experiments. The conclusion and future scope will be discussed in Section 5.

4. Discussion and Evaluation

Our tool has been implemented and tested for verifying and validating the ACC_TEST. Several experiments have been conducted, covering several scenarios and test suites for testing our proposed solution and ensuring ACC_TEST’s capability to detect different types of errors in MPI, OpenACC, and MPI + OpenACC dual-programming models. Because of the lack of the dual-programming models MPI + OpenACC benchmarks, we created our own hybrid programming models’ test suites for evaluating our testing techniques as well as the error coverage. We built several test cases for testing our proposed techniques and our testing tool, as shown in Table 1. Because of the lack of MPI + OpenACC benchmarks, we created our own hybrid programming models test suites for evaluating our testing techniques as well as the error coverage. These test suites include both OpenACC and MPI directives for building parallel programs using the dual-programming models MPI + OpenACC. We built these test suites for evaluating our hybrid-testing tool and examining its ability to cover the runtime errors that we targeted and to measure different overheads, including size, compilation, and execution overheads.
Table 1. Our test cases for evaluating ACC_TEST.
Table 2 shows our hybrid testing tool’s ability to detect errors, which occur in MPI + OpenACC dual-programming models. We collected all errors that can be identified by our OpenACC and MPI testers and examine them on our hybrid testing tool for the dual-programming model. We found that our integrated tool could detect all errors targeted.
Table 2. ACC_TEST error coverage for MPI + OpenACC dual-programming model.
In the following, Figure 12 displays the number of detected errors detected by our tool, including the number of errors detected by our static and dynamic approaches.
Figure 12. No. of detected errors for MPI + OpenACC hybrid programs.
In terms of size overheads, we used Equation (1) for measuring the size overhead, as shown in Figure 13. We noted that the size overheads range between 79% and 135%, based on the nature of the source code and its behavior. However, these size overheads will not affect the user code because all the inserted statements will be considered by the compiler as a comment, as they all start with the comment character. These inserted statements will affect the user source code only on the testing house and when these codes pass our instrumenter. We believe that these size overheads are needed because of the nature of runtime errors, which cannot be detected during our static phase analysis and need to be tested during runtime:
S i z e   O v e r h e a d = S i z e   w i t h   i n s e r t e d   t e s t   c o d e   S i z e   w i t h o u t   i n s e r t e d   t e s t   c o d e S i z e   w i t h o u t   i n s e r t e d   t e s t   c o d e .
Figure 13. MPI + OpenACC hybrid program size overhead (by bytes).
In terms of compilation and execution times, we measure our test cases and compare the compilation and execution times before and after our insertion process. Figure 14 shows the average compilation time in milliseconds, which is 198 milliseconds before insertion and 230 milliseconds after insertion.
Figure 14. MPI + OpenACC hybrid program compilation time.
In terms of the execution time, there are differences in the execution time based on the number of processes. The average time before insertion ranges between 230 milliseconds in the 4 processes and 1578 milliseconds in the 128 processes. After the insertion, the execution time ranges between 241 and 1765 milliseconds for the 4 and 128 processes, respectively.
Compilation Time (CT) or Execution Time (ET) overheads will be calculated using the following Equation (2):
C T / E T   O v e r h e a d s =   T   w i t h   i n s e r t e d   t e s t   c o d e   T   w i t h o u t   i n s e r t e d   t e s t   c o d e T   w i t h o u t   i n s e r t e d   t e s t   c o d e .
Figure 15 shows the compilation time overhead resulting from ACC_TEST. The compilation overheads range from 12% to 27%, which is considered acceptable and can vary based on the used compiler and system behavior. In terms of measuring the overheads and their relation to the number of MPI processes, Figure 16 shows the execution time overhead for MPI + OpenACC-related test cases.
Figure 15. Compilation time overheads for MPI + OpenACC hybrid programs.
Figure 16. Execution time overheads for MPI + OpenACC hybrid programs.
We successfully minimized the execution overheads to be under 18%; the execution overheads range between 1% and below 18% based on the system behavior, the machine status, and the number of processes.
Finally, Figure 17 shows the execution time for testing programs built using MPI + OpenACC dual-programming models, for which the average testing time is 115 milliseconds.
Figure 17. Testing time for MPI + OpenACC hybrid programs.
In comparison to the MPI testing techniques published in [47], our testing tool minimizes the size overhead for testing MPI-related programs because we avoid adding unnecessary messaging (communications) to test the connection between senders and receivers to detect deadlock. Another main advantage of ACC_TEST is that we used distributed testing techniques, unlike some other tools [48,49], which used a centralized manager for detecting MPI-related errors, causing a single point of failure and single point of attack.
OpenACC has been used for building ACC_TEST, which makes it portable and hardware architecture-independent. It therefore works with any type of GPU accelerator, hardware, platform, and operating system. In addition, ACC_TEST is easy to maintain and requires less effort because of the high maintainability of OpenACC. Our insertion techniques help increase the reliability of ACC_TEST because this technique avoids centralized control and single-point-of-failure problems as well as increase performance by distributing our testing tasks and avoiding centralized controlled testing. ACC_TEST also helps produce more high-quality systems without errors.
In Table 3, we summarize the comparative study conducted in our research. Because there is no published work or existing testing tool that detects OpenACC errors or the dual-programming model MPI + OpenACC, we chose the closest work to compare with our techniques in different attribute.
Table 3. Comparative study summary.
ACC_TEST has the capability to cover different types of errors in OpenACC, MPI, and dual-programming models. In addition, ACC_TEST used hybrid-testing techniques for covering a wide range of errors while minimizing overheads. ACC_TEST is built based on a distributed mechanism, which avoids single point of failures. Additionally, the dual-programming models MPI + OpenACC have been supported by ACC_TEST for the first time in the research field. ACC_TEST is scalable and adaptable and can run on any platform.

5. Conclusions and Future Work

To conclude, good effort has been made in testing parallel systems to detect runtime errors, but it still insufficient, especially for systems using heterogeneous programming models as well as dual- and tri-level programming models. The integration of different programming models into the same system will need new testing techniques to detect runtime errors in heterogeneous parallel systems. We believe that in order to achieve good systems that can be used in Exascale supercomputers, we should focus on testing those systems because of their massively parallel natures as well as their huge size, which increases difficulties and issues. We enhanced the capabilities of ACC_TEST to detect errors occurring in the hybrid dual-programming models MPI + OpenACC. In addition, ACC_TEST works in parallel by detecting runtime errors with testing threads created based on the targeted application threads. Additionally, our tool can work with any heterogeneous architecture, which will increase the portability of ACC_TEST. We have implemented our solution and evaluated its ability to detect runtime errors. Using our parallel hybrid testing techniques will yield benefits, such as reduction of overhead, enhanced system execution time, and coverage of a wide range of errors.
MPI + OpenACC applications errors have been successfully detected by using ACC_TEST hybrid-testing techniques. Helping to increase reliability and ensure error-free codes are the main objectives of creating our testing tool. Our tool also achieves covering range of errors with execution overhead in an acceptable level, which is less than 20%. Because of using the testing techniques that provide overheads, the testing processes will be used only in the testing house and will not affect the delivered user applications. Finally, to the best of our knowledge, ACC_TEST is the first parallel testing tool built to test applications programmed by using the dual-programming model MPI + OpenACC. ACC_TEST focuses only on the integration of MPI and OpenACC and the resulting errors that can occur in this integration as well as in MPI and OpenACC individually.
In future works, ACC_TEST will be enhanced to cover errors that occur in tri-programming models MPI + OpenACC + X. In addition, we will enhance our techniques to run on real Exascale systems when they become available. Finally, we will enhance ACC_TEST to be intelligent using AI techniques for generating test cases automatically and using deep learning while testing.

Data Availability

The data used to support the findings of this study are available from the corresponding author upon request.

Author Contributions

Conceptualization, Data curation, Formal analysis, Methodology, Resources, Funding acquisition, Software, Visualization and Writing—original draft: A.M.A.; Methodology, Resources, Supervision, Validation and Formal analysis: F.E.E.; Methodology, Project administration, Validation and Formal analysis: M.A.K.; Methodology, Project administration, Resources, Supervision, and Validation: A.S.A.-M.A.-G.; Software, Supervision, Validation, Writing—review & editing and Formal analysis: A.S.A. (Ahmed S. Alfakeeh); Formal analysis, Visualization, Validation, Writing—review & editing: A.S.A (Abdullah S. Alshahrani); Formal analysis, Visualization, Validation, Writing—review & editing: A.A.A. All authors have read and agreed to the published version of the manuscript.

Funding

This research was funded by [King Abdulaziz University] grant number [RG-9-611-40] and the APC was funded by [Deanship of Scientific Research].

Acknowledgments

This project was funded by the Deanship of Scientific Research (DSR) at King Abdulaziz University, Jeddah, under Grant no. (RG-9-611-40). The authors, therefore, acknowledge with thanks the DSR’s technical and financial support.

Conflicts of Interest

The authors declare that they have no conflicts of interest.

References

  1. Alghamdi, A.M.; Elbouraey, F. A Parallel Hybrid-Testing Tool Architecture for a Dual-Programming Model. Int. J. Adv. Comput. Sci. Appl. 2019, 10, 394–400. [Google Scholar] [CrossRef]
  2. Alghamdi, A.M.; Eassa, F.E. Proposed Architecture for a Parallel Hybrid-Testing Tool for a Dual-Programming Model. IJCSNS Int. J. Comput. Sci. Netw. Secur. 2019, 19, 54–61. [Google Scholar]
  3. Alghamdi, A.M.; Eassa, F.E. Parallel Hybrid Testing Tool for Applications Developed by Using MPI + OpenACC Dual-Programming Model. Adv. Sci. Technol. Eng. Syst. J. 2019, 4, 203–210. [Google Scholar] [CrossRef]
  4. Alghamdi, A.M.; Eassa, F.E. OpenACC Errors Classification and Static Detection Techniques. IEEE Access 2019, 7, 113235–113253. [Google Scholar] [CrossRef]
  5. Eassa, F.E.; Alghamdi, A.M.; Haridi, S.; Khemakhem, M.A.; Al-Ghamdi, A.S.A.-M.; Alsolami, E.A. ACC_TEST: Hybrid Testing Approach for OpenACC-Based Programs. IEEE Access 2020, 8, 80358–80368. [Google Scholar] [CrossRef]
  6. Alghamdi, A.S.A.; Alghamdi, A.M.; Eassa, F.E.; Khemakhem, M.A. ACC_TEST: Hybrid Testing Techniques for MPI-Based Programs. IEEE Access 2020, 8, 91488–91500. [Google Scholar] [CrossRef]
  7. Message Passing Interface Forum. MPI: A Message-Passing Interface Standard; University of Tennessee: Knoxville, Tennesee, 2015. [Google Scholar]
  8. Ashraf, M.U.; Fouz, F.; Eassa, F.A. Empirical Analysis of HPC Using Different Programming Models. Int. J. Mod. Educ. Comput. Sci. 2016, 8, 27–34. [Google Scholar] [CrossRef]
  9. Ashraf, M.U.; Eassa, F.A.; Albeshri, A.A.; Algarni, A. Performance and Power Efficient Massive Parallel Computational Model for HPC Heterogeneous Exascale Systems. IEEE Access 2018, 6, 23095–23107. [Google Scholar] [CrossRef]
  10. Kim, J.; Lee, S.; Vetter, J.S. IMPACC: A Tightly Integrated MPI+OpenACC Framework Exploiting Shared Memory Parallelism. In Proceedings of the 25th ACM International Symposium on High-Performance Parallel and Distributed Computing—HPDC’16, Kyoto, Japan, 31 May–4 June 2016; pp. 189–201. [Google Scholar] [CrossRef]
  11. Message Passing Interface Forum. MPI Forum. 2017. Available online: http://mpi-forum.org/docs (accessed on 19 September 2019).
  12. OpenACC Standards Org. The OpenACC Application Programming Interface Version 3.0. Adv. Sci. Technol. Eng. Syst. J. 2019, 4.2, 203–210. [Google Scholar]
  13. Alghamdi, A.M.; Eassa, F.E. Software Testing Techniques for Parallel Systems: A Survey. IJCSNS Int. J. Comput. Sci. Netw. Secur. 2019, 19, 176–186. [Google Scholar]
  14. Chatarasi, P.; Shirako, J.; Kong, M.; Sarkar, V. An Extended Polyhedral Model for SPMD Programs and Its Use in Static Data Race Detection. In Proceedings of the 23rd International Workshop on Languages and Compilers for Parallel Computing, Houston, TX, USA, 7–9 September 2010; Springer: Cham, Switzerland, 2017; pp. 106–120. [Google Scholar]
  15. Bardsley, E.; Betts, A.; Chong, N.; Collingbourne, P.; Deligiannis, P.; Donaldson, A.F.; Ketema, J.; Liew, D.; Qadeer, S. Engineering a Static Verification Tool for GPU Kernels. In International Conference on Computer Aided Verification; Springer: Cham, Switzerland, 2014; pp. 226–242. [Google Scholar] [CrossRef]
  16. Nakade, R.; Mercer, E.; Aldous, P.; McCarthy, J. Model-Checking Task Parallel Programs for Data-Race. Innov. Syst. Softw. Eng. 2019, 15, 289–306. [Google Scholar] [CrossRef]
  17. Basupalli, V.; Yuki, T.; Rajopadhye, S.; Morvan, A.; Derrien, S.; Quinton, P.; Wonnacott, D. ompVerify: Polyhedral Analysis for the OpenMP Programmer. In International Workshop on OpenMP; Springer: Berlin/Heidelberg, Germany, 2011; pp. 37–53. [Google Scholar] [CrossRef]
  18. Droste, A.; Kuhn, M.; Ludwig, T. MPI-Checker. In Proceedings of the Second Workshop on the LLVM Compiler Infrastructure in HPC, Austin, TX, USA, 15 November 2015; pp. 1–10. [Google Scholar] [CrossRef]
  19. The Open MPI Organization. Open MPI: Open Source High Performance Computing. 2018. Available online: https://www.open-mpi.org/ (accessed on 19 September 2019).
  20. RWTH Aachen University. MUST: MPI Runtime Error Detection Tool. JCSNS Int. J. Comput. Sci. Netw. Secur. 2018, 19, 54–61. [Google Scholar]
  21. Arnold, D.C.; Ahn, D.H.; de Supinski, B.R.; Lee, G.L.; Miller, B.P.; Schulz, M. Stack Trace Analysis for Large Scale Debugging. In Proceedings of the 2007 IEEE International Parallel and Distributed Processing Symposium, Rome, Italy, 26–30 March 2007; pp. 1–10. [Google Scholar] [CrossRef]
  22. Kowalewski, R.; Fürlinger, K. Nasty-MPI: Debugging Synchronization Errors in MPI-3 One-Sided Applications. In European Conference on Parallel Processing Euro-Par 2016; Springer: Cham, Switzerland, 2016; pp. 51–62. [Google Scholar] [CrossRef]
  23. Samofalov, V.; Krukov, V.; Kuhn, B.; Zheltov, S.; Konovalov, A.; DeSouza, J. Automated Correctness Analysis of MPI Programs with Intel Message Checker. In Proceedings of the International Conference ParCo, Malaga, Spain, 13–16 September 2005; pp. 901–908. [Google Scholar]
  24. Luecke, G.; Chen, H.; Coyle, J.; Hoekstra, J.; Kraeva, M.; Zou, Y. MPI-CHECK: A Tool for Checking Fortran 90 MPI Programs. Concurr. Comput. Pract. Exp. 2003, 15, 93–100. [Google Scholar] [CrossRef]
  25. Humphrey, A.; Derrick, C.; Gopalakrishnan, G.; Tibbitts, B. GEM: Graphical Explorer of MPI Programs. In Proceedings of the 39th International Conference on Parallel Processing Workshops, San Diego, CA, USA, 13–16 September 2010; Available online: http://ieeexplore.ieee.org/document/5599207/ (accessed on 19 September 2019).
  26. Ganai, M.K. Dynamic Livelock Analysis of Multi-threaded Programs. In International Conference on Runtime Verification; Springer: Berlin/Heidelberg, Germany, 2013; pp. 3–18. [Google Scholar]
  27. Clemencon, C.; Fritscher, J.; Ruhl, R. Visualization, Execution Control and Replay of Massively Parallel Programs within Annai’s Debugging Tool. High-Perform. Comput. Symp. (HPCS’95) 1995, 393–404. [Google Scholar] [CrossRef]
  28. Kranzlmueller, D.; Schaubschlaeger, C.; Volkert, J. A Brief Overview of the MAD Debugging Activities. In Proceedings of the Fourth International Workshop on Automated Debugging, Ithaca, NY, USA, 16 December 2000. [Google Scholar]
  29. Do-Mai, A.T.; Diep, T.D.; Thoai, N. Race condition and deadlock detection for large-scale applications. In Proceedings of the 15th International Symposium on Parallel and Distributed Computing, ISPDC, Fuzhou, China, 8–10 July 2016; pp. 319–326. [Google Scholar] [CrossRef]
  30. Forejt, V.; Joshi, S.; Kroening, D.; Narayanaswamy, G.; Sharma, S. Precise Predictive Analysis for Discovering Communication Deadlocks in MPI Programs. ACM Trans. Program. Lang. Syst. 2017, 39, 1–27. [Google Scholar] [CrossRef]
  31. Gopalakrishnan, G.; Kirby, R.M.; Vakkalanka, S.; Vo, A.; Yang, Y. ISP (In-situ Partial Order): A dynamic verifier for MPI Programs. University of Utah, School of Computing. 2009. Available online: http://formalverification.cs.utah.edu/ISP-release/ (accessed on 19 September 2019).
  32. Park, M.-Y.; Shim, S.J.; Jun, Y.-K.; Park, H.-R. MPIRace-Check: Detection of Message Races in MPI Programs. In International Conference on Grid and Pervasive Computing GPC; Springer: Berlin/Heidelberg, Germany, 2007; pp. 322–333. [Google Scholar] [CrossRef]
  33. Boyer, M.; Skadron, K.; Weimer, W. Automated Dynamic Analysis of CUDA Programs. In Proceedings of the Third Workshop on Software Tools for MultiCore Systems (STMCS), Boston, MA, USA, 6 April 2008. [Google Scholar]
  34. Mekkat, V.; Holey, A.; Zhai, A. Accelerating Data Race Detection Utilizing On-Chip Data-Parallel Cores. In International Conference on Runtime Verification; Springer: Berlin/Heidelberg, Germany, 2013; pp. 201–218. [Google Scholar] [CrossRef]
  35. Gupta, S.; Sultan, F.; Cadambi, S.; Ivancic, F.; Rotteler, M. Using hardware transactional memory for data race detection. In Proceedings of the 2009 IEEE International Symposium on Parallel & Distributed Processing, Rome, Italy, 23–29 May 2009; pp. 1–11. [Google Scholar] [CrossRef]
  36. Bekar, C.; Elmas, T.; Okur, S.; Tasiran, S. KUDA: GPU accelerated split race checker. In Proceedings of the Workshop on Determinism and Correctness in Parallel Programming (WoDet), Istanbul, Turkey, 6 March 2012. [Google Scholar]
  37. Sharma, R.; Bauer, M.; Aiken, A. Verification of producer-consumer synchronization in GPU programs. ACM Sigplan Not. 2015, 50, 88–98. [Google Scholar] [CrossRef]
  38. Hilbrich, T.; Müller, M.S.; Krammer, B. MPI Correctness Checking for OpenMP/MPI Applications. Int. J. Parallel Program. 2009, 37, 277–291. [Google Scholar] [CrossRef]
  39. Lawrence Livermore National Laboratory, University of Utah, and RWTH Aachen University. Archer. GitHub 2018. Available online: https://github.com/PRUNERS/archer (accessed on 19 September 2019).
  40. Hernandez, O.; Liao, C.; Chapman, B. Dragon: A Static and Dynamic Tool for OpenMP. In International Workshop on OpenMP Applications and Tools; Springer: Berlin/Heidelberg, Germany, 2004; pp. 53–66. [Google Scholar] [CrossRef]
  41. Zheng, M.; Ravi, V.T.; Qin, F.; Agrawal, G. GMRace: Detecting Data Races in GPU Programs via a Low-Overhead Scheme. IEEE Trans. Parallel Distrib. Syst. 2014, 25, 104–115. [Google Scholar] [CrossRef]
  42. Dai, Z.; Zhang, Z.; Wang, H.; Li, Y.; Zhang, W. Parallelized Race Detection Based on GPU Architecture. In Advanced Computer Architecture. Communications in Computer and Information Science; Springer: Berlin/Heidelberg, Germany, 2014; pp. 113–127. [Google Scholar]
  43. Saillard, E.; Carribault, P.; Barthou, D. PARCOACH: Combining static and dynamic validation of MPI collective communications. Int. J. High Perform. Comput. Appl. 2014, 28, 425–434. [Google Scholar] [CrossRef]
  44. Ma, H.; Wang, L.; Krishnamoorthy, K. Detecting Thread-Safety Violations in Hybrid OpenMP/MPI Programs. In Proceedings of the 2015 IEEE International Conference on Cluster Computing, Chicago, IL, USA, 8–11 September 2015; pp. 460–463. [Google Scholar] [CrossRef]
  45. Ahmad, K.; Wolfe, M. Automatic Testing of OpenACC Applications. In 4th International Workshop on Accelerator Programming Using Directives; Springer: Cham, Switzerland, 2018; pp. 145–159. [Google Scholar]
  46. Krammer, B.; Resch, M.M. Runtime Checking of MPI Applications with MARMOT. Perform. Comput. 2006, 33, 1–8. [Google Scholar]
  47. Luecke, G.R.; Zou, Y.; Coyle, J.; Hoekstra, J.; Kraeva, M. Deadlock detection in MPI programs. Concurr. Comput. Pract. Exp. 2002, 14, 911–932. [Google Scholar] [CrossRef]
  48. Krammer, B.; Resch, M.M. Correctness Checking of MPI One-Sided Communication Using Marmot. In Proceedings of the European Parallel Virtual Machine/Message Passing Interface Users’ Group Meeting, Bonn, Germany, 17–20 September 2006; pp. 105–114. [Google Scholar] [CrossRef]
  49. Hilbrich, T.; Protze, J.; Schulz, M.; de Supinski, B.R.; Müller, M.S. MPI runtime error detection with MUST: Advances in deadlock detection. Sci. Program. 2013, 21, 109–121. [Google Scholar] [CrossRef]

Article Metrics

Citations

Article Access Statistics

Multiple requests from the same IP address are counted as one view.