CORRECTNESS ¡CRITERIA ¡FOR ¡ CONCURRENCY ¡& ¡ PARALLELISM ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
1 ¡
CORRECTNESS CRITERIA FOR CONCURRENCY & PARALLELISM 2 - - PowerPoint PPT Presentation
1 6/16/2010 Correctness Criteria for Parallelism & Concurrency CORRECTNESS CRITERIA FOR CONCURRENCY & PARALLELISM 2 6/16/2010 Correctness Criteria for
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
1 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
2 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
3 ¡
¡ ¡int ¡Divide(int ¡n, ¡int ¡d) ¡{ ¡ ¡ ¡ ¡ ¡ ¡return ¡n/d; ¡ ¡ ¡} ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
4 ¡
¡ ¡int ¡Divide(int ¡n, ¡int ¡d) ¡{ ¡ ¡ ¡ ¡ ¡Contract.Requires( ¡0 ¡!= ¡d ¡); ¡ ¡ ¡ ¡ ¡return ¡n/d; ¡ ¡ ¡} ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
5 ¡
¡ ¡int ¡Divide(int ¡n, ¡int ¡d) ¡{ ¡ ¡ ¡ ¡ ¡Contract.Requires( ¡0 ¡!= ¡d ¡); ¡ ¡ ¡ ¡ ¡Contract.Ensures( ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Contract.Result<int>() ¡* ¡d ¡<= ¡n ¡&& ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Contract.Result<int>() ¡* ¡d ¡> ¡n-‑d ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡); ¡ ¡ ¡ ¡ ¡return ¡n/d; ¡ ¡ ¡} ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
6 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
7 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
8 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
9 ¡
Vending ¡ Machine ¡ Sort ¡ Coins ¡ accept ¡ reject ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
10 ¡
SortCoins(…) ¡{ ¡ ¡ ¡ ¡ ¡Contract.Requires(…); ¡ ¡ ¡ ¡ ¡Contract.Ensures(…); ¡ } ¡
SequenGal ¡ ImplementaGon ¡
SortCoins(…) ¡{ ¡ ¡ ¡ ¡ ¡Contract.Requires(…); ¡ ¡ ¡ ¡ ¡Contract.Ensures(…); ¡ } ¡
Parallel ¡ ImplementaGon ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
11 ¡
SequenIal ¡ SortCoins ¡ accept ¡ reject ¡ Parallel ¡ SortCoins ¡ accept ¡ reject ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
12 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
13 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
14 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
15 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
16 ¡
int ComputeSum ( IEnumerable<int> input) { Contract.Requires ( input != null); Contract.Ensures ( Contract.Result<int>() == input.Sum(i => i) )); //implementation }
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
17 ¡
interleavings ¡for ¡a ¡given ¡input ¡
int ComputeSum ( IEnumerable<int> input) { Contract.Requires ( input != null); IsDeterministic ( Contract.Result<int>(), input ); //implementation }
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
18 ¡
Contract.IsDeterministic (
Contract.Ensures (
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
19 ¡
Contract.IsDeterministic (
Contract.Ensures ( comp(output, F ( input1, input2, … ) )
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
20 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
21 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
22 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
23 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
24 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
25 ¡
q = new ConcurrentQueue (); q.Add(10) t=q.TryTake() Assert( ? )
q = new ConcurrentQueue (); q.Add(10) t=q.TryTake()
Assert: q.Size() is 0 or 1
q = new ConcurrentQueue (); q.Add(10); t=q.TryTake(); Assert: t = fail && q.size() = 1 || t = 10 && q.size() = 0
q = new ConcurrentQueue (); q.Add(10) t=q.TryTake() q.Add(20) u = q.TryTake()
Assert ( ? )
q = new ConcurrentQueue();
Assert: q.Size() == 0 t = 10 || t = 20 u = 10 || t = 20 u != t
q.Add(10) t=q.TryTake() q.Add(20) u = q.TryTake()
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
31 ¡
Add ¡10 ¡ return ¡ Add ¡20 ¡ return ¡ TryTake ¡ return10 ¡ TryTake ¡ return ¡“empty” ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
32 ¡
Add ¡10 ¡ return ¡ Add ¡20 ¡ return ¡ TryTake ¡ return10 ¡ TryTake ¡ return ¡“empty” ¡
Add ¡10 ¡ return ¡ Add ¡20 ¡ return ¡ TryTake ¡ return20 ¡ TryTake ¡ return ¡“empty” ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
33 ¡
Add ¡10 ¡ return ¡ Add ¡20 ¡ return ¡ TryTake ¡ return10 ¡ TryTake ¡ return ¡“empty” ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
34 ¡
atomically ¡at ¡a ¡single ¡temporal ¡point ¡ ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
35 ¡
atomically ¡at ¡a ¡single ¡temporal ¡point ¡ ¡
temporal ¡point ¡ ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
36 ¡
Add ¡10 ¡ return ¡ TryTake ¡ return ¡“empty” ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
37 ¡
Add ¡10 ¡ return ¡ TryTake ¡ return ¡“empty” ¡ Add ¡10 ¡ return ¡ TryTake ¡ return ¡“empty” ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
38 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
39 ¡
Add ¡10 ¡ return ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
40 ¡
Add ¡10 ¡ return ¡ TryTake ¡ return ¡“empty” ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
41 ¡
Add ¡10 ¡ return ¡ TryTake ¡ return ¡“empty” ¡ We ¡will ¡only ¡focus ¡on ¡ single ¡object ¡histories ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
42 ¡
Add ¡10 ¡ return ¡ TryTake ¡ return ¡“empty” ¡ Also, ¡we ¡will ¡only ¡focus ¡
every ¡call ¡has ¡a ¡return ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
43 ¡
Add ¡10 ¡ return ¡ TryTake ¡ return ¡“empty” ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
44 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
45 ¡
Add ¡10 ¡ return ¡ Add ¡20 ¡ return ¡ TryTake ¡ return10 ¡
Add ¡10 ¡ return ¡ Add ¡20 ¡ return ¡ TryTake ¡ return10 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
46 ¡
Add ¡10 ¡ return ¡ TryTake ¡ return ¡“empty” ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
47 ¡
Add ¡10 ¡ return ¡ Add ¡20 ¡ return ¡ TryTake ¡ return10 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
48 ¡
6/16/2010 ¡ Correctness ¡Criteria ¡for ¡Parallelism ¡& ¡Concurrency ¡
49 ¡