Top Banner
Programming Language Semantics Axiomatic Semantics of Parallel Programs
31

Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Dec 21, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Programming Language Semantics

Axiomatic Semantics of Parallel Programs

Page 2: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Tentative Schedule

• 15/6 Parallel Programs

• 22/6 Rely/Guarantee Reasoning– Assignment 2

• 29/6 Separation Logic

• 6, 3/7 Type Inference– Assignment 3

Page 3: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Plan

• More on Hoare Proof Rules

• Proof Rules for Concurrent Programs

Page 4: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Hoare Proof Rules for Partial Correctness

{A} skip {A}

{B[a/X]} X:=a {B} (Assignment Rule)

{P} c0 {C} {C} c1 {Q}

{P} c0;c1{Q}

{Pb} c0 {Q} {P b} c1 {Q}

{P} if b then c0 else c1{Q}

{Ib} c {I}

{I} while b do c{Ib}

P P’ {P’} c {Q’} Q’ Q

{P} c {Q}

(Composition Rule)

(Conditional Rule)

(Loop Rule)

(Consequence Rule)

Page 5: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Potential Language Extensions

• Blocks

• Procedures– Procedures as parameters

• Abstract data types

• Non-determinism

• Parallelism

• Arrays, Pointers, and Dynamic allocations

Page 6: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

More Rules

{P1} c {Q1} {P2} c {Q2}

{P1 P2} c {Q1 Q2}(Conjunction Rule)

{P} c {P} where Mod(c)Var(P) = (Invariance Rule)

Page 7: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Underlying Principles of Hoare Rules

• Commands are predicate transformers• Different behaviors for different

preconditions• Commands can be partial

– Resource restriction– Implementation restriction

• In {P} comm {Q}– P and Q are contracts with the clients of comm

Page 8: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

An Axiomatic Proof Technique for Parallel Programs

Owicky & Gries

Verification of Sequential and Concurrent Programs

Apt & Oldrog

Chapters 4-6

Page 9: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

IMP+ Parallel Constructs

• Abstract syntaxcom::= X := a | skip | com1 ; com2 | if b then com1 else com2 | while b do com| cobegin com1 || com2 … || comk coend

• All the interleavings of are executed• Example

– cobegin X := 1 || (X :=2 ; X := X+2) coend

Page 10: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

A First Attempt

{P1} c1 {Q1} {P2} c2 {Q2}.. {Pk} ck {Qk}

{P1 P2 … Pk} cobegin c1 || c2 || …|| cn coend {Q1 Q2 … Qk}(Parallel Rule)

Page 11: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Simple Examples

{true} X := 1 { X >0 } {true} Y:= 1 {Y>0}

{true} cobegin X :=1 || Y := 1 coend{X>0 Y >0}

{true} X := 1 { X >0 } {true} X:=2 ; X := X+2 {X>0}

{true} cobegin X :=1 || X:=2 ; X := X+2 coend{X>0 }

Page 12: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Unsoundness

{Y=1} X := 0 { Y=1 } {true} Y:=0 {true}

{Y=1} cobegin X :=0 || Y:=0 coend {Y=1 }

Page 13: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Modified Parallel Rule

{P1} c1 {Q1} {P2} c2 {Q2}.. {Pk} ck {Qk}

{P1 P2 … Pk} cobegin c1 || c2 || …|| ck coend {Q1 Q2 … Qk}

Mod(cj)Var(Pi) =

Mod(cj)Var(Qi) =

ij

Page 14: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Unsoundness from sharing

{true} X := 1 { X >0 } {true} X:=2 ; X := X+2 {X>3}

{true} cobegin X :=1 || X:=2 ; X := X+2 coend {X>3 }

Page 15: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Handling Shared Variables

• Carefully design the proofs of every thread to make them local

• Show that the code of other threads do not interfere with the proofs of other threads

Page 16: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Interference

• A command T with a precondition pre(T) does not interfere with the proof of {P} C {Q} if:– {Q pre(T) } T {Q}– For any command C’ inside C with a precondition

pre(C’)• {pre(C’) pre(T) } T {pre(C’)}

• {P1} c1 {Q1} {P2} c2 {Q2}.. {Pk} ck {Qk} are interference free if for every i j and for every assignment in T in ci does not interfere with {Pj} cj {Qj}

Page 17: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Modified Parallel Rule

{P1} c1 {Q1} {P2} c2 {Q2}.. {Pk} ck {Qk}

{P1 P2 … Pk} cobegin c1 || c2 || …|| ck coend {Q1 Q2 … Qk}

{P1} c1 {Q1} {P2} c2 {Q2}.. {Pk} ck {Qk} are interference free

Page 18: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

No unsoundness from sharing

{true} X := 1 { X >0 } {true} X:=2 ; X := X+2 {X>3}

{true} cobegin X :=1 || X:=2 ; X := X+2 coend {X>3 }

Page 19: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

A Realistic ExampleFindpos: begin

initialize: i :=2 ; j :=1; eventop = M+1 ; oddtop := M+1;

search: cobegin

Evensearch: while i < min(oddtop, eventop) do

if (x(i) > 0) then eventop := i

else i := i + 2;

|| Oddsearch: while j < min(oddtop, eventop) do if (x(j) > 0) then oddtop := j else j := j + 2;

coendk := min(eventop, oddtop)end {k M+1 (l: 1 l <k x(l) 0) (k M x(k)>0)}

ES=eventopM+1

even(i)

l: (even(l) 0<l<i) x(l)0

eventopM x(eventop)>0

OS=oddtopM+1

odd(j)

l: (odd(l) 0<l<j) x(l)0

oddtopM x(oddtop)>0

Page 20: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Incompleteness

• There exist correct programs which cannot be verified by the parallelization rule– {X = Y} cobegin X := X + 1 || Y := Y+1 coend {X=Y}

Page 21: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

An Informal Proof of {X = Y} cobegin X := X + 1 || Y := Y+1 coend {X=Y}

{X = Z} X : = X + 1 { X = Z +1}

{Y = Z} Y : = Y + 1 { Y = Z +1}

{X = Z Y = Z} cobegin X := X + 1 || Y := Y+1 coend {X=Z+1 Y= Z+1}

{X = Z Y = Z} cobegin X := X + 1 || Y := Y+1 coend {X=Y}

{X = Y} Z : = X { X = Y Y = Z}

{X =Y } Z : = X ; cobegin X := X + 1 || Y := Y+1 coend {X=Y}

{X =Y } cobegin X := X + 1 || Y := Y+1 coend {X=Y}

Page 22: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Auxiliary Variables

• Record history information

• A set of variables AV is auxiliary for a command S if each variable from AV only occurs in assignments of the form X := t where X AV

• Auxiliary variable elimination rule{P} S {Q}

{P} S’ {Q}

Where A is auxiliary for SFV(Q) A =

FV(P) A =

S’ results from S by deleting all assignments in to variables in S

Page 23: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

A Formal Proof of {X = Y} cobegin X := X + 1 || Y := Y+1 coend {X=Y}

{X = Z} X : = X + 1 { X = Z +1}

{Y = Z} Y : = Y + 1 { Y = Z +1}

{X = Z Y = Z} cobegin X := X + 1 || Y := Y+1 coend {X=Z+1 Y= Z+1}

{X = Z Y = Z} cobegin X := X + 1 || Y := Y+1 coend {X=Y}

{X = Y} Z : = X { X = Y Y = Z}

{X =Y } Z : = X ; cobegin X := X + 1 || Y := Y+1 coend {X=Y}

{X =Y } cobegin X := X + 1 || Y := Y+1 coend {X=Y}

(Assign-Rule)

(Assign-Rule)

(Par-Rule)

(Cons.-Rule)(Assign-Rule)

(Comp.-Rule)

(Aux.-Rule)

Page 24: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Synchronization Primitives

• Support for atomic sections and communication• A High Level Construct

await B then S– No parallelization in S– Blocked until B holds– If B is true then S is executed atomically

• Examples– await true then S– Await “some condition” then skip– Semaphore

• P(sem): await sem >0 then sem := sem – 1• V(sem): await true then sem := sem + 1

Page 25: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Interference (modified)

• A command T with a precondition pre(T) does not interfere with the proof of {P} C {Q} if:– {Q pre(T) } T {Q}– For any command C’ inside C but not within await with

a precondition pre(C’)• {pre(C’) pre(T) } T {pre(C’)}

• {P1} c1 {Q1} {P2} c2 {Q2}.. {Pk} ck {Qk} are interference free if for every i j and for every assignment not inside await or an await T in ci does not interfere with {Pj} cj {Qj}

Page 26: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

An Inference Rule for Await

{P b} c {Q}

{P } await B then c {Q}

Page 27: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Producer-Consumer

• Two processes communicating via a shared bounded buffer• Consumer waits for the buffer to be filled• Producer waits for the buffer to be non-full and fills the buffer• buffer[0..N-1]• in – the number of elements added• out – the number of elements deleted• buffer[out mod N], … buffer[(out + in – out -1) mod N] elements

Page 28: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

in := 0; out := 0 ;

cobegin

producer: …

await in-out < N then skip

add: buffer(in mod N) := next value;

markin: in := in +1;

|| consumer: … await in-out >0 then skip remove: this value := buffer(out mod N); markout: out := out +1; …coend

Producer/Consumer Code

Page 29: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

in := 0; out := 0 ; i := 1; j :=1;

{M 0}

cobegin

producer: while i M do

begin x:= A[i];

await in-out <N then skip;

add: buffer[in mod N] := x ;

markin: in := in + 1;

i := i + 1

end

|| consumer: while j M do begin await in-out >0 then skip; remove: y := buffer[out mod N] ; markout: out := out + 1; B[j] := y; j := j + 1 endcoend {k: 1 k M B[k] = A[k]}

I= k: out < k M buffer[(k-1} mod N] = A[k]

0 in-out N

0 i M+1

0 j M+1

Page 30: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

{I i = in+1=1 j=out+1=1}

cobegin

{I i = in+1=1}

producer: while i M do

begin x:= A[i];

await in-out <N then skip;

add: buffer[in mod N] := x ;

markin: in := in + 1;

i := i + 1

end {I i = in+1=M+1}

|| {I j = out+1=1} consumer: while j M do begin await in-out >0 then skip; remove: y := buffer[out mod N] ; markout: out := out + 1; B[j] := y; j := j + 1 end {I k: 1 k M B[k] = A[k]}}coend {k: 1 k M B[k] = A[k]}

I= k: out < k M buffer[(k-1} mod N] = A[k]

0 in-out N

0 i M+1

0 j M+1

Page 31: Programming Language Semantics Axiomatic Semantics of Parallel Programs.

Summary

• Reasoning about concurrent programs is difficult• Aweeki-Gries suggest to carefully design the

sequential proofs to simplify the proof procedure• The use of auxiliary variables can make proofs

difficult• Can have difficulties with fine-grained

concurrency– Benign dataraces

• Rely/Guarantee style can allow more elegant/general reasoning (next lesson)