ppt

advertisement
It Ain’t the Meat, it’s the
Notion
Why Theory is Essential to Teaching
Concurrent Programming
Maurice Herlihy
Brown University
In many areas of CS
• Systems research fought all the hard
battles
– FORTRAN  complexity theory
– UDP/IP  network algorithms
• Theory researchers arrived later to
shoot the wounded
• But concurrency is different
Multicore Programming
Education
2
Vive la Différence
• Concurrent programmers are made,
not born (mostly)
• Students have little experience with
concurrency (today)
• Develop intuition by
– Idealized examples first
– Logical reasoning
Multicore Programming
Education
3
Homework Challenge
Devise Wait-Free 1Enqueuer, 1-Dequeuer
Buffer using only reads
& writes
Multicore Programming
Education
4
Another Homework Challenge
How about two
dequeuers?
Multicore Programming
Education
5
Shared Memory
Atomic reads and
writes to individual
variables
write
read
Multicore Programming
Education
6
Snapshot Challenge
Wait-Free
algorithm to read
multiple variables
atomically?
Read
both
Read
both
Multicore Programming
Education
7
Snapshot Challenge
Wait-Free
algorithm to
write multiple
variables
atomically?
write
both
write
both
Multicore Programming
Education
8
Bakery Algorithm
class Bakery implements Lock {
boolean[] flag;
6
Label[] label;
2
0
n-1
public Bakery (int n) {
flag = new boolean[n]; f f t f f t f f
label = new Label[n];
0 0 4 0 0 5 0 0
for (intfirst-comei = 0; i < n; i++) {
Classic,
firstflag[i]
served= false;
mutuallabel[i] = 0;
}
exclusion
algorithm
}
…
Critical Section
Multicore Programming
Education
9
Is Locked?
isLocked(
)
True means was locked at
some instant, false means
was free at some instant.
Multicore Programming
Education
Bakery Lock
10
I Can Has Lock?
tryLock()
Acquire lock if free &
return true, otherwise
immediately return false.
Multicore Programming
Education
Bakery Lock
11
Our Experience Teaching
Concurrency
• Brown (10 years)
• Tel-Aviv (10 years)
• Industry
Multicore Programming
Education
12
Mutual Exclusion
• Peterson, Bakery, space lower bounds
• Teaches
– Deadlock
– Livelock
– Fairness, first-come-first-served, …
Multicore Programming
Education
13
Linearizability
• How to describe a concurrent object?
– By “equivalence” to sequential
• What is a concurrent API?
• How do we reason about correctness?
– Even informally!
• Learn the rules before you break
them
Multicore Programming
Education
14
Consensus Numbers
• Certain synchronization primitives are
mathematically stronger than others
• No, you can’t build lock-free X from Y
– So do not waste your time trying
• Yes, you can build lock-free X from Z
– The rest is optimization
Multicore Programming
Education
15
Uh, Oh, Spin Locks
bad
Test&test&set
less bad
Test&set
• Inexplicable in
idealized model
• Well, kids …
– We didn’t actually
lie to you
– But the architects
gave us caches
– And you have to
outwit them …
Multicore Programming
Education
16
Then What?
• Implement simple T&S lock
– Dreadful performance
• Implement T&T&S lock
– Improved performance
Multicore Programming
Education
17
Homework Challenge
Devise Wait-Free 1Enqueuer, 1-Dequeuer
Buffer using only reads
& writes
Multicore Programming
Education
18
Homework Challenge
Multicore Programming
Education
19
Another Homework Challenge
How about two
dequeuers?
Multicore Programming
Education
20
Maybe?
“hence [any wait-free object] can be written
without a CAS/LL/SC. Instead LL/SC is used
to make it more efficient but LL/SC isn't
*required* to make it wait-free.”
Found in a blog
Multicore Programming
Education
21
Another Homework Challenge
Multicore Programming
Education
22
What If we have Test&Set?
Multicore Programming
Education
23
What If we have Test&Set?
Multicore Programming
Education
24
What If we have
Compare&Swap?
Multicore Programming
Education
25
What if We Have
Compare&Sswap?
Multicore Programming
Education
26
Snapshot Challenge
Wait-Free
algorithm to read
multiple variables
atomically?
Reads from
0 and 1
Reads from
1 and 2
Multicore Programming
Education
27
27
Snapshot Challenge
Wait-Free
algorithm to read
multiple variables
atomically?
Reads from
0 and 1
Reads from
1 and 2
Multicore Programming
Education
28
28
Multiple Assignment Challenge
Wait-Free
algorithm to
write multiple
variables
atomically?
Writes to 0
and 1
Writes to 1
and 2
Multicore Programming
Education
29
29
Multiple Assignment Challenge
Wait-Free
algorithm to
write multiple
variables
atomically?
Writes to 0
and 1
Writes to 1
and 2
Multicore Programming
Education
30
30
Is Locked?
isLocked(
)
True means was locked at
some instant, false means
was free at some instant.
Multicore Programming
Education
Bakery Lock
31
Is Locked?
isLocked(
)
True means was locked at
some instant, false means
was free at some instant.
Multicore Programming
Education
Bakery Lock
32
I Can Has Lock?
tryLock()
Acquire lock if free &
return true, otherwise
immediately return false.
Multicore Programming
Education
Bakery Lock
33
I Can Has Lock?
tryLock()
Acquire lock if free &
return true, otherwise
immediately return false.
Multicore Programming
Education
Bakery Lock
34
My Very Last Slide
• Teaching theory first
– Develops intuition
– Imposes order on chaos
• Idealized problems
– Prepare for realistic, complicated ones
• Impossibility results
– Save time and effort
Multicore Programming
Education
35
Download