MPI-Checker Static Analysis for MPI Alexander Droste, Michael Kuhn, - - PowerPoint PPT Presentation

mpi checker static analysis for mpi
SMART_READER_LITE
LIVE PREVIEW

MPI-Checker Static Analysis for MPI Alexander Droste, Michael Kuhn, - - PowerPoint PPT Presentation

MPI-Checker Static Analysis for MPI Alexander Droste, Michael Kuhn, Thomas Ludwig November 15, 2015 Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work Motivation 2 / 39 Motivation Clang Static Analyzer


slide-1
SLIDE 1

MPI-Checker – Static Analysis for MPI

Alexander Droste, Michael Kuhn, Thomas Ludwig November 15, 2015

slide-2
SLIDE 2

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Motivation

2 / 39

slide-3
SLIDE 3

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Why is runtime analysis in HPC challenging?

Large amount of resources are used State of the program can get very complex → Hard to survey Long run duration Is there a way to complement dynamic tooling?

3 / 39

slide-4
SLIDE 4

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Why is runtime analysis in HPC challenging?

Large amount of resources are used State of the program can get very complex → Hard to survey Long run duration Is there a way to complement dynamic tooling?

3 / 39

slide-5
SLIDE 5

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Static analysis

Extensive static analysis of the source code Executed in the frontend Verify focused aspects of the code In contrast to ’normal’ compiler errors, warnings: More computational resources are used Better suited for domain specific checks

4 / 39

slide-6
SLIDE 6

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

What are the benefits of static analysis for MPI?

Analysis without running the program Unrelated to runtime resources Not affected by the commonness of a sequence at runtime Low maintenance effort

5 / 39

slide-7
SLIDE 7

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Clang Static Analyzer

6 / 39

slide-8
SLIDE 8

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Clang Static Analyzer

Framework for static analysis: Core and checkers Provides two techniques to base a checker upon:

AST-based analysis Path-sensitive analysis

Descriptive HTML reports Extensible

7 / 39

slide-9
SLIDE 9

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

AST-based analysis

1

void memory(int x) {

2

int * i = malloc ( sizeof (int) ) ;

3

if (x < 2) f r e e ( i ) ;

4

if (x > 0) f r e e ( i ) ;

5

}

N0 N1 N2 (x < 2) || !(x < 2) (x > 0) || !(x > 0) malloc range of x is unknown

Works if a check can verify an invariant locally No differentiation of distinct paths No assumptions can be made about the range of x

8 / 39

slide-10
SLIDE 10

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Path-sensitive analysis

1

void memory(int x) {

2

int * i = malloc ( sizeof (int) ) ;

3

if (x < 2) f r e e ( i ) ;

4

if (x > 0) f r e e ( i ) ;

5

}

  • Distincts path sequences

Symbolic execution Higher level of abstraction

9 / 39

slide-11
SLIDE 11

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Symbolic execution

Symbolic representation of values, memory regions Variables are defined by constraints to ranges Each node represents a program point and state Operations are conceptually transitions between nodes

10 / 39

slide-12
SLIDE 12

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

MPI-Checker

11 / 39

slide-13
SLIDE 13

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

MPI-Checker

Realised as a Clang Static Analyzer checker Hybrid: Provides AST-based and path-sensitive checks Can verify C and C++ code Checks are MPI implementation independent

12 / 39

slide-14
SLIDE 14

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Path-sensitive Checks

13 / 39

slide-15
SLIDE 15

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Path-sensitive checks

Check aspects of nonblocking communication Based on MPI request usage verification Request can be in different last user states

Unused, used by nonblocking call, used by wait

Requests are tracked by their symbolic memory region

14 / 39

slide-16
SLIDE 16

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Double nonblocking

Nonblocking call using a request that is already in use by a nonblocking call Checked when a call is symbolically executed

unused used by nb double nb nb nb

Makes it impossible to wait for both nonblocking calls

15 / 39

slide-17
SLIDE 17

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Unmatched wait

Checks for waits on requests not used by a nonblocking call

unused unmatched wait wait

Request is in an undefined state → undefined behavior

16 / 39

slide-18
SLIDE 18

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Missing wait

Checks if a nonblocking call is not matched by a wait Checked when a symbol goes out of scope

unused used by nb missing wait nb

  • os

Nonblocking operation might not complete

17 / 39

slide-19
SLIDE 19

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

AST-based Checks

18 / 39

slide-20
SLIDE 20

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Type mismatch

1

int buf ;

2

MPI_Send(&buf , * , MPI_DOUBLE, * , * , *) ;

Buffer type, MPI datatype tag correspondence Clang already has type checking support limited to MPICH → MPI-Checker is MPI implementation independent

19 / 39

slide-21
SLIDE 21

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Type mismatch

1

int buf ;

2

MPI_Send(&buf , * , MPI_DOUBLE, * , * , *) ;

Buffer type, MPI datatype tag correspondence Clang already has type checking support limited to MPICH → MPI-Checker is MPI implementation independent

19 / 39

slide-22
SLIDE 22

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Type mismatch

1

int buf ;

2

MPI_Send(&buf , * , MPI_DOUBLE, * , * , *) ;

Buffer type, MPI datatype tag correspondence Support for all types defined by the MPI 3.1 standard Skipped: Custom buffer types, nullpointer constants, custom MPI types, MPI_BYTE, MPI_DATATYPE_NULL

20 / 39

slide-23
SLIDE 23

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Incorrect buffer referencing

1

int **buf ;

2

MPI_Send( buf , * , MPI_INT, * , * , *) ;

MPI functions specify void * as their buffer type Allows passing pointers not sufficiently dereferenced Subroutine of the type mismatch check

21 / 39

slide-24
SLIDE 24

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Invalid argument type

1

int x = 0;

2

MPI_Send(* , 1.1 + x , * , * , * , *) ;

Check if non-integer types are used for rank, count or tag Can handle expressions of arbitrary complexity Corresponds to -Wfloat-conversion

  • Wfloat-conversion can produce a lot of output
  • Wfloat-conversion is neither included in -Wall nor -Wextra

Convenience check

22 / 39

slide-25
SLIDE 25

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Unmatched point-to-point call

1

MPI_Send(* , 1 , MPI_INT, f () + N + 3 + rank + 1 , 0 , C) ;

2

MPI_Recv(* , 1 , MPI_INT, N + f () + 3 + rank

  • 1 , 0 , C, *) ;

Checks for unmatched point-to-point operations Names, values must be equal Rank needs a specific notation Will be changed to a path-sensitive check

Partner a: rank x Partner b: rank y +c

  • c

23 / 39

slide-26
SLIDE 26

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Unreachable call

1

if ( rank = = 0) {

2

MPI_Send(* , 1 , MPI_INT, rank + 1 , 0 , C) ;

3

MPI_Recv(* , 1 , MPI_INT, rank + 1 , 0 , C, *) ;

4

}

5

else if ( rank = = 1) {

6

MPI_Send(* , 1 , MPI_INT, rank

  • 1 , 0 , C) ;

7

MPI_Recv(* , 1 , MPI_INT, rank

  • 1 , 0 , C, *) ;

8

}

Checks for deadlocks caused by blocking calls Based on the same point-to-point matching mechanism

24 / 39

slide-27
SLIDE 27

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Limitations

25 / 39

slide-28
SLIDE 28

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Limitations

No assumption about runtime dependent results can be made

→ MPI_Waitany or MPI_Waitsome are not taken into account

Heap allocated MPI_Request variables are not taken into account Analysis is limited to the scope of a translation unit

26 / 39

slide-29
SLIDE 29

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Evaluation

27 / 39

slide-30
SLIDE 30

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Evaluation

AMG2013 ~75KLOC, 10x CombBLAS ~40KLOC, 2x OpenFFT ~5KLOC, 4x No false positives but the likeliness of appearance differs Point-to-point checks were excluded

28 / 39

slide-31
SLIDE 31

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

AMG2013 - Report overview

29 / 39

slide-32
SLIDE 32

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

AMG2013 - Detail report - Missing wait

30 / 39

slide-33
SLIDE 33

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

AMG2013 - Detail report - Missing wait

31 / 39

slide-34
SLIDE 34

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

AMG2013 - Detail report - Type mismatch

32 / 39

slide-35
SLIDE 35

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Future Work

33 / 39

slide-36
SLIDE 36

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Future work

Merge MPI-Checker into Clang Detect race condition on buffer between nonblocking call and wait Path-sensitive point-to-point matching Possibility to type match custom types Analysis for a given process count ... → Adding new checks will now be a lot easier

34 / 39

slide-37
SLIDE 37

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Current State

35 / 39

slide-38
SLIDE 38

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Current state

GitHub: https://github.com/0ax1/MPI-Checker Range of checks Limitations Examples Planned: Evaluation

36 / 39

slide-39
SLIDE 39

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Acknowledgments

37 / 39

slide-40
SLIDE 40

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Acknowledgments

Hal Finkel Anna Zaks Dmitri Gribenko Devin Coughlin Jeff Hammond + Clang mailing list

38 / 39

slide-41
SLIDE 41

Motivation Clang Static Analyzer MPI-Checker Limitations Evaluation Future Work

Questions?

39 / 39