Professional Documents
Culture Documents
Multiprocessor
Synchronization
Staff
8 Homeworks (40%)
3 Midterms (40%)
NOT Permitted
obtaining the answer directly from
anyone or anything else in any
form.
TA Hours
Piazza
Clock
speed
flattening
sharply
cpu
memory
shared memory
Niagara 1
User code
Traditional
Uniprocessor
User code
Multicore
User code
Multicore
• Fundamentals
– Models, algorithms, impossibility
• Real-World programming
– Architectures
– Techniques
thread
memory
object object
Art of Multiprocessor Programming 19
Concurrent Computation
memory
object object
Art of Multiprocessor Programming 20
Asynchrony
P0 P1 … P9
void primePrint {
int i = ThreadID.get(); // IDs in {0..9}
for (j = i*109+1, j<(i+1)*109; j++) {
if (isPrime(j))
print(j);
}
}
19
18 each thread
takes a number
17
Art of Multiprocessor Programming 30
Procedure for Thread i
void primePrint {
long j = 0;
while (j < 1010) {
j = counter.getAndIncrement();
if (isPrime(j))
print(j);
}
}
void primePrint {
long j = 0;
while (j < 1010) {
j = counter.getAndIncrement();
if (isPrime(j)) Shared counter
print(j);
object
}
}
}
}
if (isPrime(j))
print(j);
Local
variables
code
shared
1 memory
shared counter
void primePrint {
long j = 0;
while (j < 1010) {
j = counter.getAndIncrement();
if (isPrime(j))
print(j);
Stop when every
}
} value taken
void primePrint {
long j = 0;
while (j < 1010) {
j = counter.getAndIncrement();
if (isPrime(j))
print(j);
}
} Increment & return each
new value
Art of Multiprocessor Programming 35
Counter Implementation
read write
1 2
time
Art of Multiprocessor Programming 40
Is this problem inherent?
!! !!
write
read
write read
A B
A B
A B
A B
cola
cola
A B
cola
A B
A B
A B
A B
• Raise flag
• Wait until Bob’s flag is down
• Unleash pet
• Lower flag when pet returns
• Raise flag
• Wait until Alice’s flag is down
• Unleash pet
• Lower flag when pet returns
• Raise flag
• While Alice’s flag is up
– Lower flag
– Wait for Alice’s flag to go down
– Raise flag
• Unleash pet
• Lower flag when pet returns
Bob defers
• Raise flag to Alice
• While Alice’s flag is up
– Lower flag
– Wait for Alice’s flag to go down
– Raise flag
• Unleash pet
• Lower flag when pet returns
time
Pick a
point
Pick a
point
mmm… B
mmm…
A B
cola
A B
cola
A B
A yum… B
yum…
A B
cola
while (true) {
while (can.isUp()){};
pet.release();
pet.recapture();
can.reset();
}
Alice’s code
Art of Multiprocessor Programming 91
Pseudocode
while (true) {
while (can.isUp()){};
pet.release();
Bob’s code
pet.recapture();
can.reset(); while (true) {
} while (can.isDown()){};
pond.stockWithFood();
can.knockOver();
}
Alice’s code
Art of Multiprocessor Programming 92
Correctness
• Mutual Exclusion
– Pets and Bob never together in pond
A B
B D Letter
A C E
1
3
3
2
Tiles
1
From Scrabble™ box
Art of Multiprocessor Programming 101
Write One Letter at a Time …
W A S
4 1 1
H 4
B D
A C E
1
3
3
2
W A S H T H E C A R
4 1 1 4 1 4 1 3 1 1
whew
L A
S E L L L A V A 1
1
M PS
1 1 1 1 1 1 4 1
3 3 1
S E L L
1 1 1 1
T H E
1 4 1
C A R
3 1 1
L 1
OK
1
Speedup=
𝑝
1 −𝑝+
𝑛
Parallel
fraction
1
Speedup=
𝑝
1 −𝑝+
𝑛
Sequential
fraction Parallel
fraction
1
Speedup=
𝑝
1 −𝑝+
𝑛
Sequential
fraction Parallel
fraction
1
Speedup=
𝑝
1 −𝑝+
𝑛
Number of
threads
1
Speedup = 2.17= 0 .6
1 − 0 .6 +
10
1
Speedup = 3.57= 0 .8
1 − 0 .8 +
10
1
Speedup = 5.26= 0 .9
1 − 0 .9 +
10
1
Speedup = 9.17= 0.99
1 − 0.99 +
10
User code
Multicore
Not reducing
sequential % of code
Art of Multiprocessor Programming
Shared Data Structures
Coarse Fine
Grained Grained
25% 25%
Shared Shared
75% 75%
Unshared Unshared
Shared Data Structures
Honk!
Honk!
Honk!
Why only 2.9 speedup
Coarse Fine
Grained Grained
25% 25%
Shared Shared
75% 75%
Unshared Unshared
Shared Data Structures
Honk!
Honk! Why fine-grained
Honk! parallelism maters
Coarse Fine
Grained Grained
25% 25%
Shared Shared
75% 75%
Unshared Unshared
Diminishing Returns
4.5
4
3.5
3
2.5
speedup
2
1.5
1
0.5
0