Parallel programming models such as MPI and OpenSHMEM enable the use of large-scale distributed-memory computers in HPC. However, programmers often miss subtle rules regarding their APIs,such as properly synchronizing local memory accesses with communication and releasing acquired resources. Existing correctness tools aim to detect these issues automatically, but are typically model-specific. We propose the use of model-independent function annotations to avoid this dependency:Contracts allow the specification of generic pre- and postconditions at function declarations. We specify requirements that must be satisfied at each call site to avoid common MPI errors such as resource leaks and local data races. In contrast to traditional checkers, the transparent nature of contracts also allows for maintainability and extensibility of checks by the end user,as well as adapting the specific analyses to their use case. This paper presents a contract language and CoVer, an extensible static verifier to check the use of library-based parallel programming models. It applies data-flow analysis using the LLVM framework to verify these contract annotations. We compare detection accuracy against the static tools PARCOACH and MPI-Checker using RMARaceBench and MPI-BugBench, and compile-time overhead based on the mini-apps LULESH, miniVite, and the PRK Stencil Kernel. CoVer improved the detection accuracy by covering a wide variety of issues, while maintaining comparable overhead.

错误:搜索内容不能为空,请输入英文关键词
错误:关键词超出字数限制,请精简
高级检索

Verifying MPI API Usage Requirements with Contracts

  • Yussur Mustafa Oraji,
  • Simon Schwitanski,
  • Alexander Hück,
  • Joachim Jenke,
  • Sebastian Kreutzer,
  • Christian Bischof

摘要

Parallel programming models such as MPI and OpenSHMEM enable the use of large-scale distributed-memory computers in HPC. However, programmers often miss subtle rules regarding their APIs,such as properly synchronizing local memory accesses with communication and releasing acquired resources. Existing correctness tools aim to detect these issues automatically, but are typically model-specific. We propose the use of model-independent function annotations to avoid this dependency:Contracts allow the specification of generic pre- and postconditions at function declarations. We specify requirements that must be satisfied at each call site to avoid common MPI errors such as resource leaks and local data races. In contrast to traditional checkers, the transparent nature of contracts also allows for maintainability and extensibility of checks by the end user,as well as adapting the specific analyses to their use case. This paper presents a contract language and CoVer, an extensible static verifier to check the use of library-based parallel programming models. It applies data-flow analysis using the LLVM framework to verify these contract annotations. We compare detection accuracy against the static tools PARCOACH and MPI-Checker using RMARaceBench and MPI-BugBench, and compile-time overhead based on the mini-apps LULESH, miniVite, and the PRK Stencil Kernel. CoVer improved the detection accuracy by covering a wide variety of issues, while maintaining comparable overhead.