Error Handling via the Happens-Before Relation Nicholas D. Matsakis - - PowerPoint PPT Presentation

error handling via the happens before relation
SMART_READER_LITE
LIVE PREVIEW

Error Handling via the Happens-Before Relation Nicholas D. Matsakis - - PowerPoint PPT Presentation

Error Handling via the Happens-Before Relation Nicholas D. Matsakis Thomas R. Gross ETH Zurich 1 Sunday, April 18, 2010 Exception Handling Goal of this talk: Extend exception handling into a parallel setting 2 Sunday, April 18,


slide-1
SLIDE 1

Error Handling via the Happens-Before Relation

Nicholas D. Matsakis Thomas R. Gross ETH Zurich

1

Sunday, April 18, 2010

slide-2
SLIDE 2

Exception Handling

  • Goal of this talk:
  • Extend exception handling into a parallel

setting

2

Sunday, April 18, 2010

slide-3
SLIDE 3

Sequential Exceptions

void child() { statement 1; statement 2; statement 3; }

3

Sunday, April 18, 2010

slide-4
SLIDE 4

Sequential Exceptions

void child() { statement 1; statement 2; statement 3; }

3

Sunday, April 18, 2010

slide-5
SLIDE 5

Sequential Exceptions

void child() { statement 1; statement 2; statement 3; }

3

Sunday, April 18, 2010

slide-6
SLIDE 6

Sequential Exceptions

void child() { statement 1; statement 2; statement 3; }

3

Sunday, April 18, 2010

slide-7
SLIDE 7

Sequential Exceptions

void child() { statement 1; statement 2; statement 3; }

3

Sunday, April 18, 2010

slide-8
SLIDE 8

Sequential Exceptions

void child() { statement 1; statement 2; statement 3; }

3

Sunday, April 18, 2010

slide-9
SLIDE 9

Sequential Exceptions

void child() { statement 1; statement 2; statement 3; }

4

Sunday, April 18, 2010

slide-10
SLIDE 10

Sequential Exceptions

void child() { statement 1; statement 2; statement 3; }

4

Sunday, April 18, 2010

slide-11
SLIDE 11

Sequential Exceptions

void child() { statement 1; statement 2; statement 3; }

!

4

Sunday, April 18, 2010

slide-12
SLIDE 12

Sequential Exceptions

void child() { statement 1; statement 2; statement 3; }

!

4

Sunday, April 18, 2010

slide-13
SLIDE 13

Sequential Exceptions

void child() { statement 1; statement 2; statement 3; }

!

Subsequent statements are skipped.

4

Sunday, April 18, 2010

slide-14
SLIDE 14

Sequential Exceptions

void parent() { child(); ...; }

5

Sunday, April 18, 2010

slide-15
SLIDE 15

Sequential Exceptions

void parent() { child(); ...; }

!

5

Sunday, April 18, 2010

slide-16
SLIDE 16

Sequential Exceptions

void parent() { child(); ...; }

!

5

Sunday, April 18, 2010

slide-17
SLIDE 17

Sequential Exceptions

void parent() { child(); ...; }

!

Subsequent statements in outer scopes are also skipped.

5

Sunday, April 18, 2010

slide-18
SLIDE 18

Sequential Exceptions

void grandparent() { try { parent(); ... } catch (...) { } }

6

Sunday, April 18, 2010

slide-19
SLIDE 19

Sequential Exceptions

void grandparent() { try { parent(); ... } catch (...) { } }

!

6

Sunday, April 18, 2010

slide-20
SLIDE 20

Sequential Exceptions

void grandparent() { try { parent(); ... } catch (...) { } }

!

6

Sunday, April 18, 2010

slide-21
SLIDE 21

Sequential Exceptions

void grandparent() { try { parent(); ... } catch (...) { } } Continues until caught.

!

6

Sunday, April 18, 2010

slide-22
SLIDE 22

Key Points

7

  • After an error occurs:
  • Subsequent statements are skipped
  • Until the error is caught in some

enclosing scope

Sunday, April 18, 2010

slide-23
SLIDE 23

Exceptions and Threads

  • In a sequential setting, subsequent

statements are easy to identify.

  • Not with threads.

8

Sunday, April 18, 2010

slide-24
SLIDE 24

Threads

Producer Consumer

Buffer

write read

9

Sunday, April 18, 2010

slide-25
SLIDE 25

Threads

Producer Consumer

Buffer

write read

9

Sunday, April 18, 2010

slide-26
SLIDE 26

Threads

Producer Consumer

Buffer

write read

9

Sunday, April 18, 2010

slide-27
SLIDE 27

Threads

Producer Consumer

Buffer

write read

9

Sunday, April 18, 2010

slide-28
SLIDE 28

Threads

Producer Consumer

Buffer

write read

9

Sunday, April 18, 2010

slide-29
SLIDE 29

Threads

Producer Consumer

Buffer

write read

10

Sunday, April 18, 2010

slide-30
SLIDE 30

Threads

Producer Consumer

Buffer

write read

10

Sunday, April 18, 2010

slide-31
SLIDE 31

Threads

Producer Consumer

Buffer

write read

10

Sunday, April 18, 2010

slide-32
SLIDE 32

Threads

Producer Consumer

Buffer

write read

!

10

Sunday, April 18, 2010

slide-33
SLIDE 33

Threads

Producer Consumer

Buffer

write read

!

10

Sunday, April 18, 2010

slide-34
SLIDE 34

Threads

Producer Consumer

Buffer

write read

!

10

Sunday, April 18, 2010

slide-35
SLIDE 35

Invisible Ordering

  • Ordering between statements in different

threads is never stated explicitly

  • Created by side-effects
  • signals, locks

11

Sunday, April 18, 2010

slide-36
SLIDE 36

Intervals

  • An alternative model for parallel programs
  • Based on an explicit happens-before relation

12

Sunday, April 18, 2010

slide-37
SLIDE 37

Interval

Interval a = interval { statement 1; statement 2; }; a

13

Sunday, April 18, 2010

slide-38
SLIDE 38

Interval

Interval a = interval {...}; Interval b = interval {...}; Interval c = interval {...}; a b c

14

Sunday, April 18, 2010

slide-39
SLIDE 39

Happens Before

Interval a = interval {...}; Interval b = interval {...}; Interval c = interval {...}; a.end.addHb(c.start); b.end.addHb(c.start); a b c

15

Sunday, April 18, 2010

slide-40
SLIDE 40

Happens Before

Interval a = interval {...}; Interval b = interval {...}; Interval c = interval {...}; a.end.addHb(c.start); b.end.addHb(c.start); a b c

15

Sunday, April 18, 2010

slide-41
SLIDE 41

Happens Before

Interval a = interval {...}; Interval b = interval {...}; Interval c = interval {...}; a.end.addHb(c.start); b.end.addHb(c.start); a b c

15

Sunday, April 18, 2010

slide-42
SLIDE 42

Hierarchy

void method(Interval par) { a = interval(par) {...} b = interval(par) {...} c = interval(par) {...} a.end.addHb(c.start); b.end.addHb(c.start); } par a b c

16

Sunday, April 18, 2010

slide-43
SLIDE 43

Hierarchy

void method(Interval par) { a = interval(par) {...} b = interval(par) {...} c = interval(par) {...} a.end.addHb(c.start); b.end.addHb(c.start); } par a b c

16

Sunday, April 18, 2010

slide-44
SLIDE 44

Hierarchy

void method(Interval par) { a = interval(par) {...} b = interval(par) {...} c = interval(par) {...} a.end.addHb(c.start); b.end.addHb(c.start); } par a b c

16

Sunday, April 18, 2010

slide-45
SLIDE 45

Hierarchy

void method(Interval par) { a = interval(par) {...} b = interval(par) {...} c = interval(par) {...} a.end.addHb(c.start); b.end.addHb(c.start); } par a b c

16

Sunday, April 18, 2010

slide-46
SLIDE 46

Hierarchy

void method(Interval par) { a = interval(par) {...} b = interval(par) {...} c = interval(par) {...} a.end.addHb(c.start); b.end.addHb(c.start); } par a b c

16

Sunday, April 18, 2010

slide-47
SLIDE 47

Two-Phase Execution

par = interval { doSomething(); method(par); doSomethingElse(); } par

17

Sunday, April 18, 2010

slide-48
SLIDE 48

Two-Phase Execution

par = interval { doSomething(); method(par); doSomethingElse(); } par

17

Sunday, April 18, 2010

slide-49
SLIDE 49

Two-Phase Execution

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

17

Sunday, April 18, 2010

slide-50
SLIDE 50

Two-Phase Execution

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

17

Sunday, April 18, 2010

slide-51
SLIDE 51

Two-Phase Execution

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

17

Sunday, April 18, 2010

slide-52
SLIDE 52

Error Handling

  • If an exception is thrown at point P and

caught at point Q:

  • Statements that happen after P and

before Q are skipped.

  • An interval may catch errors that occur in

it or its children.

18

Sunday, April 18, 2010

slide-53
SLIDE 53

Everything Goes Well

par = interval { doSomething(); method(par); doSomethingElse(); } par

19

Sunday, April 18, 2010

slide-54
SLIDE 54

Everything Goes Well

par = interval { doSomething(); method(par); doSomethingElse(); } par

19

Sunday, April 18, 2010

slide-55
SLIDE 55

Everything Goes Well

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

19

Sunday, April 18, 2010

slide-56
SLIDE 56

Everything Goes Well

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

19

Sunday, April 18, 2010

slide-57
SLIDE 57

Everything Goes Well

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

19

Sunday, April 18, 2010

slide-58
SLIDE 58

Everything Goes Well

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

19

Sunday, April 18, 2010

slide-59
SLIDE 59

Everything Goes Well

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

19

Sunday, April 18, 2010

slide-60
SLIDE 60

Child Fails

par = interval { doSomething(); method(par); doSomethingElse(); } par

20

Sunday, April 18, 2010

slide-61
SLIDE 61

Child Fails

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

20

Sunday, April 18, 2010

slide-62
SLIDE 62

Child Fails

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

!

20

Sunday, April 18, 2010

slide-63
SLIDE 63

Child Fails

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

!

20

Sunday, April 18, 2010

slide-64
SLIDE 64

Child Fails

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

!

S

20

Sunday, April 18, 2010

slide-65
SLIDE 65

Child Fails

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

!

S

20

Sunday, April 18, 2010

slide-66
SLIDE 66

Parent Fails

par = interval { doSomething(); method(par); doSomethingElse(); } par

21

Sunday, April 18, 2010

slide-67
SLIDE 67

Parent Fails

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

21

Sunday, April 18, 2010

slide-68
SLIDE 68

Parent Fails

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

!

21

Sunday, April 18, 2010

slide-69
SLIDE 69

Parent Fails

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

!

21

Sunday, April 18, 2010

slide-70
SLIDE 70

Parent Fails

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

!

21

S S S

Sunday, April 18, 2010

slide-71
SLIDE 71

Multiple Children Fail

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

!

S

22

Sunday, April 18, 2010

slide-72
SLIDE 72

Multiple Children Fail

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

!

S

22

!

Sunday, April 18, 2010

slide-73
SLIDE 73

Multiple Children Fail

par = interval { doSomething(); method(par); doSomethingElse(); } par a b c

!

S

22

!

Sunday, April 18, 2010

slide-74
SLIDE 74

Catching Errors

  • An interval may catch errors that occur in

it or its children.

23

Sunday, April 18, 2010

slide-75
SLIDE 75

Catching Errors

24

interval { ... } catch(Set<Throwable> errors) { // The default: handle no // errors at all. return errors; }

Sunday, April 18, 2010

slide-76
SLIDE 76

Catching Errors

par = interval { doSomething(); method(par); doSomethingElse(); } catch (...) { ... } par a b c

!

S

25

!

Sunday, April 18, 2010

slide-77
SLIDE 77

Catching Errors

par = interval { doSomething(); method(par); doSomethingElse(); } catch (...) { ... } par a b c

!

S

25

!

Sunday, April 18, 2010

slide-78
SLIDE 78

Producer Consumer

Producer Consumer

1 1

26

2 3 2

Parent

Sunday, April 18, 2010

slide-79
SLIDE 79

Producer Consumer

Producer Consumer

1 1

26

2 3 2

Parent

Sunday, April 18, 2010

slide-80
SLIDE 80

Producer Consumer

Producer Consumer

1 1

26

2 3 2

!

Parent

Sunday, April 18, 2010

slide-81
SLIDE 81

Producer Consumer

Producer Consumer

1 1

26

2 3 2

!

S Parent

Sunday, April 18, 2010

slide-82
SLIDE 82

Producer Consumer

Producer Consumer

1 1

26

2 3 2

!

S S Parent

Sunday, April 18, 2010

slide-83
SLIDE 83

Experience

  • Interval library is publicly available
  • http://intervals.inf.ethz.ch
  • Used to implement a number of examples
  • Bounded-Buffer Producer-Consumer
  • Java Grande Forum
  • etc

27

Sunday, April 18, 2010

slide-84
SLIDE 84

Related Work

  • JCilk:
  • Purely hierarchical model.
  • Sibling computations aborted as well.
  • Microsoft Parallel Extensions:
  • Errors must be “observed”
  • Failboxes:
  • Propagate errors through data structures

rather than control flow.

28

Sunday, April 18, 2010

slide-85
SLIDE 85

Conclusions

  • Typical threaded model does not provide

enough information to propagate errors.

  • Explicit happens-before relation allows

sequential exception handling to be generalized to a parallel setting.

  • Our model provides a deterministic, well-

specified set of points where an error can be handled.

29

Sunday, April 18, 2010

slide-86
SLIDE 86

Backup Slides

30

Sunday, April 18, 2010

slide-87
SLIDE 87

Successors

31

Producer Consumer

1 1 2 3 2

!

S S Parent

Sunday, April 18, 2010

slide-88
SLIDE 88

Successors

31

Producer Consumer

1 1 2 3 2

!

S S Parent

Handled here?

Sunday, April 18, 2010

slide-89
SLIDE 89

Successors

31

Producer Consumer

1 1 2 3 2

!

S S Parent

Sunday, April 18, 2010

slide-90
SLIDE 90

Successors

31

Producer Consumer

1 1 2 3 2

!

S S Parent

Handled here?

Sunday, April 18, 2010

slide-91
SLIDE 91

Successors

31

Producer Consumer

1 1 2 3 2

!

S S Parent

Handled here? Handled here?

Sunday, April 18, 2010

slide-92
SLIDE 92

Successors

31

Producer Consumer

1 1 2 3 2

!

S S Parent

Sunday, April 18, 2010

slide-93
SLIDE 93

Wrapping

32

1 2

Sunday, April 18, 2010

slide-94
SLIDE 94

Wrapping

32

1 2

!

Sunday, April 18, 2010

slide-95
SLIDE 95

Wrapping

32

1 2

!

Sunday, April 18, 2010

slide-96
SLIDE 96

Wrapping

33

1 2

Sunday, April 18, 2010

slide-97
SLIDE 97

Wrapping

33

1 2

!

Sunday, April 18, 2010

slide-98
SLIDE 98

Wrapping

33

1 2

!

Sunday, April 18, 2010