Top Banner
Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming
156

Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

Mar 27, 2015

Download

Documents

Elijah Burton
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: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

Foundations of Shared Memory

Companion slides forThe Art of Multiprocessor Programming

by Maurice Herlihy & Nir Shavit

Art of Multiprocessor Programming

Page 2: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

2

Last Lecture

• Defined concurrent objects using linearizability and sequential consistency

• Fact: implemented linearizable objects (Two thread FIFO Queue) in read-write memory without mutual exclusion

• Fact: hardware does not provide linearizable read-write memory

Art of Multiprocessor Programming

Page 3: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

3

Fundamentals

• What is the weakest form of communication that supports mutual exclusion?

• What is the weakest shared object that allows shared-memory computation?

Art of Multiprocessor Programming

Page 4: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

4

Alan Turing

• Showed what is and is not computable on a sequential machine.

• Still best model there is.

Art of Multiprocessor Programming

Page 5: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

5

Turing Computability

• Mathematical model of computation• What is (and is not) computable• Efficiency (mostly) irrelevant

0 1 1 0 1 01

Art of Multiprocessor Programming

Page 6: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

6

Shared-Memory Computability?

• Mathematical model of concurrent computation• What is (and is not) concurrently computable• Efficiency (mostly) irrelevant

1001110011

Shared Memory

Art of Multiprocessor Programming

Page 7: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

7

Foundations of Shared Memory

To understand modern multiprocessors we need to ask some

basic questions …

To understand modern multiprocessors we need to ask some

basic questions …

Art of Multiprocessor Programming

Page 8: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

8

Foundations of Shared Memory

To understand modern multiprocessors we need to ask some

basic questions …

To understand modern multiprocessors we need to ask some

basic questions …

What is the weakest useful form of shared memory?

What is the weakest useful form of shared memory?

Art of Multiprocessor Programming

Page 9: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

9

Foundations of Shared Memory

To understand modern multiprocessors we need to ask some

basic questions …

To understand modern multiprocessors we need to ask some

basic questions …

What is the weakest useful form of shared memory?

What is the weakest useful form of shared memory?What can it do?What can it do?

Art of Multiprocessor Programming

Page 10: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

10

Register*

1001110011

Holds a (binary) value

* A memory location: name is historicalArt of Multiprocessor Programming

Page 11: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

11

Register

Can be read

10011

Art of Multiprocessor Programming

1001110011

Page 12: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

1001110011

12

Register

Can be written

01100

Art of Multiprocessor Programming

Page 13: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

13

public interface Register<T> { public T read(); public void write(T v);}

Registers

Art of Multiprocessor Programming

Page 14: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

14

public interface Register<T> { public T read(); public void write(T v);}

Registers

Type of register(usually Boolean or m-bit Integer)

Art of Multiprocessor Programming

Page 15: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

1001110011

15

Single-Reader/Single-Writer Register

01100

10011

Art of Multiprocessor Programming

Page 16: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

16

Multi-Reader/Single-Writer Register

10011

Art of Multiprocessor Programming

100111001101100

Page 17: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

1001110011

17

mumble

mumble

11011

Multi-Reader/Multi-Writer Register

mumble

1001110011

01010

Art of Multiprocessor Programming

Page 18: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

18

Jargon Watch

• SRSW– Single-reader single-writer

• MRSW– Multi-reader single-writer

• MRMW– Multi-reader multi-writer

Art of Multiprocessor Programming

Page 19: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

19

Safe Register

write(1001)

read(1001)

OK if reads and writes

don’t overlap

Art of Multiprocessor Programming

Page 20: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

20

Safe Register

write(1001)

Some valid value if reads and writes do

overlap

read(????)

0000 1001 1111

$*&v

Art of Multiprocessor Programming

Page 21: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

21

Regular Register

write(0)

read(1)

write(1)

read(0)

• Single Writer• Readers return:

– Old value if no overlap (safe)– Old or one of new values if overlap

Art of Multiprocessor Programming

Page 22: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

22

Regular or Not?

write(0)

read(1)

write(1)

read(0)

Art of Multiprocessor Programming

Page 23: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

23

Regular or Not?

write(0)

read(1)

write(1)

read(0)

Overlap: returns new value

Art of Multiprocessor Programming

Page 24: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

24

Regular or Not?

write(0) write(1)

read(0)

Overlap: returns old value

Art of Multiprocessor Programming

Page 25: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

25

Regular or Not?

write(0)

read(1)

write(1)

read(0)

regular

Art of Multiprocessor Programming

Page 26: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

26

Regular ≠ Linearizable

write(0)

read(1)

write(1)

read(0)

write(1) already happened

can’t explain this!

Art of Multiprocessor Programming

Page 27: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

27

Atomic Register

write(1001)

read(1001)

Linearizable to sequential safe register

write(1010)

read(1010)

read(1010)

Art of Multiprocessor Programming

Page 28: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

28

Atomic Register

write(1001)

read(1001)

write(1010)

read(1010)

read(1010)

Art of Multiprocessor Programming

Page 29: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

29

Register Space

MRMW

MRSW

SRSW

SafeRegular

Atomic

m-valued

Boolean

Art of Multiprocessor Programming

Page 30: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

30

Weakest Register

1

0 11

Single readerSingle writer

Safe Boolean register

Art of Multiprocessor Programming

Page 31: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

31

Weakest Register

Single readerSingle writer

Get correct reading if not during state transition

flipflop0 1 0 0 1 0

Art of Multiprocessor Programming

Page 32: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

32

Results

• From SRSW safe Boolean register– All the other registers– Mutual exclusion

• But not everything!– Consensus hierarchy

Foundations of the field

The really cool stuff …

Art of Multiprocessor Programming

Page 33: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

33

Locking within Registers

• Not interesting to rely on mutual exclusion in register constructions

• We want registers to implement mutual exclusion!

• It’s cheating to use mutual exclusion to implement itself!

Art of Multiprocessor Programming

Page 34: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

34

Definition

An object implementation is wait-free if every method call completes in a finite number of steps

An object implementation is wait-free if every method call completes in a finite number of steps

No mutual exclusion– Thread could halt in critical section– Build mutual exclusion from registers

Art of Multiprocessor Programming

Page 35: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

Art of Multiprocessor Programming

35

From Safe SRSW Boolean to Atomic Snapshots

MRMW

MRSW

SRSW

SafeRegular

Atomic

M-valued

Boolean

Snapshot

Page 36: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

36

Road Map

• SRSW safe Boolean

• MRSW safe Boolean

• MRSW regular Boolean

• MRSW regular

• MRSW atomic

• MRMW atomic

• Atomic snapshot

Art of Multiprocessor Programming

Page 37: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

37

Road Map

• SRSW safe Boolean

• MRSW safe Boolean

• MRSW regular Boolean

• MRSW regular

• MRSW atomic

• MRMW atomic

• Atomic snapshot

Next

Art of Multiprocessor Programming

Page 38: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

38

public class SafeBoolMRSWRegister

implements Register<Boolean> {

public boolean read() { … } public void write(boolean x) { … }}

Register Names

Art of Multiprocessor Programming

Page 39: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

39

public class SafeBoolMRSWRegister

implements Register<Boolean> {

public boolean read() { … } public void write(boolean x) { … }}

Register Names

property

Art of Multiprocessor Programming

Page 40: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

40

public class SafeBoolMRSWRegister

implements Register<Boolean> {

public boolean read() { … } public void write(boolean x) { … }}

Register Names

property

type

Art of Multiprocessor Programming

Page 41: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

41

public class SafeBoolMRSWRegister

implements Register<Boolean> {

public boolean read() { … } public void write(boolean x) { … }}

(3)

Register Names

property

type

how many readers & writers?

Art of Multiprocessor Programming

Page 42: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

42

Safe Boolean MRSW fromSafe Boolean SRSW

0

000

00

00

0

00

0

00

00

0

zzzreaders

writer

Art of Multiprocessor Programming

Page 43: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

43

Safe Boolean MRSW fromSafe Boolean SRSW

0

000

00

00

0

00

0

00

00

0

Let’s write 1!

Art of Multiprocessor Programming

Page 44: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

44

Safe Boolean MRSW fromSafe Boolean SRSW

0 or 1

110

00

00

0

00

0

00

00

0

Art of Multiprocessor Programming

Page 45: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

45

Safe Boolean MRSW fromSafe Boolean SRSW

11

0 or 1

11

00

0

00

0

00

00

0

1

Art of Multiprocessor Programming

Page 46: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

46

Safe Boolean MRSW fromSafe Boolean SRSW

1

111

11

0 or 1

00

0

00

0

00

11

Art of Multiprocessor Programming

Page 47: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

47

Safe Boolean MRSW fromSafe Boolean SRSW

1

111

11

11

1

11

1

11

1

Whew!

Art of Multiprocessor Programming

Page 48: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

48

Safe Boolean MRSW fromSafe Boolean SRSW

public class SafeBoolMRSWRegister implements Register<Boolean> { private SafeBoolSRSWRegister[] r = new SafeBoolSRSWRegister[N]; public void write(boolean x) { for (int j = 0; j < N; j++) r[j].write(x); } public boolean read() { int i = ThreadID.get(); return r[i].read(); }}

Art of Multiprocessor Programming

Page 49: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

49

Safe Boolean MRSW fromSafe Boolean SRSW

public class SafeBoolMRSWRegister implements BooleanRegister { private SafeBoolSRSWRegister[] r = new SafeBoolSRSWRegister[N]; public void write(boolean x) { for (int j = 0; j < N; j++) r[j].write(x); } public boolean read() { int i = ThreadID.get(); return r[i].read(); }}

Each thread has own safe SRSW register

Art of Multiprocessor Programming

Page 50: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

50

Safe Boolean MRSW fromSafe Boolean SRSW

public class SafeBoolMRSWRegister implements BooleanRegister { private SafeBoolSRSWRegister[] r = new SafeBoolSRSWRegister[N]; public void write(boolean x) { for (int j = 0; j < N; j++) r[j].write(x); } public boolean read() { int i = ThreadID.get(); return r[i].read(); }}

write method

Art of Multiprocessor Programming

Page 51: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

51

Safe Boolean MRSW fromSafe Boolean SRSW

public class SafeBoolMRSWRegister implements BooleanRegister { private SafeBoolSRSWRegister[] r = new SafeBoolSRSWRegister[N]; public void write(boolean x) { for (int j = 0; j < N; j++) r[j].write(x); } public boolean read() { int i = ThreadID.get(); return r[i].read(); }}

Write each thread’s register

one at a time

Art of Multiprocessor Programming

Page 52: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

52

Safe Boolean MRSW fromSafe Boolean SRSW

public class SafeBoolMRSWRegister implements BooleanRegister { private SafeBoolSRSWRegister[] r = new SafeBoolSRSWRegister[N]; public void write(boolean x) { for (int j = 0; j < N; j++) r[j].write(x); } public boolean read() { int i = ThreadID.get(); return r[i].read(); }}

read method

Art of Multiprocessor Programming

Page 53: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

53

Safe Boolean MRSW fromSafe Boolean SRSW

public class SafeBoolMRSWRegister implements BooleanRegister { private SafeBoolSRSWRegister[] r = new SafeBoolSRSWRegister[N]; public void write(boolean x) { for (int j = 0; j < N; j++) r[j].write(x); } public boolean read() { int i = ThreadID.get(); return r[i].read(); }}

Read my own register

Art of Multiprocessor Programming

Page 54: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

54

1000100010001000

10001000

Safe Multi-Valued MRSW fromSafe Multi-Valued SRSW?

1011

101110111011

any value in range1000

1000 Yes, it works!10111011

Art of Multiprocessor Programming

Page 55: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

55

Road Map

• SRSW safe Boolean

• MRSW safe Boolean

• MRSW regular Boolean

• MRSW regular

• MRSW atomic

• MRMW atomic

• Atomic snapshot

Questions?

Art of Multiprocessor Programming

Page 56: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

56

Road Map

• SRSW safe Boolean

• MRSW safe Boolean

• MRSW regular Boolean

• MRSW regular

• MRSW atomic

• MRMW atomic

• Atomic snapshot

Next

Art of Multiprocessor Programming

Page 57: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

57

Regular Boolean MRSW fromSafe Boolean MRSW

0

0

0011

0

1

1

1

Art of Multiprocessor Programming

Page 58: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

58

Regular Boolean MRSW fromSafe Boolean MRSW

0

0

0000

0

1

1

1

Art of Multiprocessor Programming

Uh, oh!

Page 59: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

59

Regular Boolean MRSW fromSafe Boolean MRSW

0

0

0000

0

Last written:

00

Art of Multiprocessor Programming

Page 60: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

60

Regular Boolean MRSW fromSafe Boolean MRSW

public class RegBoolMRSWRegister

implements Register<Boolean> {

private boolean old;

private SafeBoolMRSWRegister value;

public void write(boolean x) {

if (old != x) {

value.write(x);

old = x;

}}

public boolean read() {

return value.read();

}}

Art of Multiprocessor Programming

Page 61: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

61

Regular Boolean MRSW fromSafe Boolean MRSW

public class RegBoolMRSWRegister

implements Register<Boolean> {

threadLocal boolean old;

private SafeBoolMRSWRegister value;

public void write(boolean x) {

if (old != x) {

value.write(x);

old = x;

}}

public boolean read() {

return value.read();

}}

Last bit this thread wrote(made-up syntax)

Art of Multiprocessor Programming

Page 62: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

62

Regular Boolean MRSW fromSafe Boolean MRSW

public class RegBoolMRSWRegister

implements Register<Boolean> {

threadLocal boolean old;

private SafeBoolMRSWRegister value;

public void write(boolean x) {

if (old != x) {

value.write(x);

old = x;

}}

public boolean read() {

return value.read();

}}Actual value

Art of Multiprocessor Programming

Page 63: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

63

Regular Boolean MRSW fromSafe Boolean MRSW

public class RegBoolMRSWRegister

implements Register<Boolean> {

threadLocal boolean old;

private SafeBoolMRSWRegister value;

public void write(boolean x) {

if (old != x) {

value.write(x);

old = x;

}}

public boolean read() {

return value.read();

}}

Is new value different from last value I wrote?

Art of Multiprocessor Programming

Page 64: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

64

Regular Boolean MRSW fromSafe Boolean MRSW

public class RegBoolMRSWRegister

implements Register<Boolean> {

threadLocal boolean old;

private SafeBoolMRSWRegister value;

public void write(boolean x) {

if (old != x) {

value.write(x);

old = x;

}}

public boolean read() {

return value.read();

}}

If so, change it (otherwise don’t!)

Art of Multiprocessor Programming

Page 65: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

65

Regular Boolean MRSW fromSafe Boolean MRSW

public class RegBoolMRSWRegister

implements Register<Boolean>{

threadLocal boolean old;

private SafeBoolMRSWRegister value;

public void write(boolean x) {

if (old != x) {

value.write(x);

old = x;

}}

public boolean read() {

return value.read();

}}

Overlap? What overlap?No problemeither Boolean value works

Art of Multiprocessor Programming

Page 66: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

66

Regular Multi-Valued MRSW from Safe Multi-Valued MRSW?

0101

01010101Does not work!

0101

Art of Multiprocessor Programming

Safe register can return any value in range when value

changes

Regular register can return only old or new when value changes

Page 67: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

67

Road Map

• SRSW safe Boolean

• MRSW safe Boolean

• MRSW regular Boolean

• MRSW regular

• MRSW atomic

• MRMW atomic

• Atomic snapshotQuestions?

Art of Multiprocessor Programming

Page 68: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

68

Road Map

• SRSW safe Boolean

• MRSW safe Boolean

• MRSW regular Boolean

• MRSW regular

• MRSW atomic

• MRMW atomic

• Atomic snapshot

Next

Art of Multiprocessor Programming

Page 69: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

69

Representing m Values

0 1 2 3 4 5 6 7

1 00001

Initially 0

Unary representation: bit[i] means value i

0 0

Art of Multiprocessor Programming

Page 70: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

70

Writing m-Valued Register

1 00001

Write 5

Art of Multiprocessor Programming

0 1 2 3 4 5 6 7

Page 71: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

71

Writing m-Valued Register

1 10000

Write 5

Initially 0

Art of Multiprocessor Programming

0 1 2 3 4 5 6 7

Page 72: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

0 1 2 3 4 5 6 7

72

Writing m-Valued Register

1 10000

Write 5

5

0

Art of Multiprocessor Programming

Page 73: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

73

MRSW Regular m-valued from MRSW Regular Boolean

public class RegMRSWRegister implements Register{ RegBoolMRSWRegister[M] bit;

public void write(int x) { this.bit[x].write(true); for (int i=x-1; i>=0; i--) this.bit[i].write(false); }

public int read() { for (int i=0; i < M; i++) if (this.bit[i].read()) return i; }}

Art of Multiprocessor Programming

Page 74: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

74

MRSW Regular m-valued from MRSW Regular Boolean

public class RegMRSWRegister implements Register{ RegBoolMRSWRegister[M] bit;

public void write(int x) { bit[x].write(true); for (int i=x-1; i>=0; i--) bit[i].write(false); }

public int read() { for (int i=0; i < M; i++) if (bit[i].read()) return i; }}

Unary representation: bit[i] means value i

Art of Multiprocessor Programming

Page 75: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

75

MRSW Regular m-valued from MRSW Regular Boolean

public class RegMRSWRegisterimplements Register { RegBoolMRSWRegister[m] bit;

public void write(int x) { bit[x].write(true); for (int i=x-1; i>=0; i--) bit[i].write(false); }

public int read() { for (int i=0; i < M; i++) if (bit[i].read()) return i; }}

set bit x

Art of Multiprocessor Programming

Page 76: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

76

MRSW Regular m-valued from MRSW Regular Boolean

public class RegMRSWRegisterimplements Register { RegBoolMRSWRegister[m] bit;

public void write(int x) { bit[x].write(true); for (int i=x-1; i>=0; i--) bit[i].write(false); }

public int read() { for (int i=0; i < M; i++) if (bit[i].read()) return i; }}

Clear bits from higher

to lower

Art of Multiprocessor Programming

Page 77: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

77

MRSW Regular m-valued from MRSW Regular Boolean

public class RegMRSWRegisterimplements Register { RegBoolMRSWRegister[m] bit;

public void write(int x) { bit[x].write(true); for (int i=x-1; i>=0; i--) bit[i].write(false); }

public int read() { for (int i=0; i < M; i++) if (bit[i].read()) return i; }}

Scan from lower to higher & return

first bit set

Art of Multiprocessor Programming

Page 78: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

78

Road Map

• SRSW safe Boolean

• MRSW safe Boolean

• MRSW regular Boolean

• MRSW regular

• MRSW atomic

• MRMW atomic

• Atomic snapshotQuestions?

Art of Multiprocessor Programming

Page 79: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

79

Road Map

• SRSW safe Boolean

• MRSW safe Boolean

• MRSW regular Boolean

• MRSW regular

• MRSW atomic

• MRMW atomic

• Atomic snapshot

Art of Multiprocessor Programming

Page 80: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

80

Road Map (Slight Detour)

• SRSW safe Boolean

• MRSW safe Boolean

• MRSW regular Boolean

• MRSW regular

• MRSW atomic

• MRMW atomic

• Atomic snapshot

SRSW Atomic

Art of Multiprocessor Programming

Page 81: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

ConcurrentReading

81

SRSW Atomic From SRSW Regular

1234

Regular writer

Regular reader

123456785678

Instead of 5678…

When is this a problem?

Art of Multiprocessor Programming

Page 82: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

82

SRSW Atomic From SRSW Regular

1234

Regular writer

Regular reader

567856785678

time

write(5678)

read(5678)

Initially 1234

Art of Multiprocessor Programming

Same as

Atomic

Page 83: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

83

SRSW Atomic From SRSW Regular

1234

Regular writer

Regular reader

123456785678

Instead of 5678…

time

write(5678)

read(1234)

Initially 1234

Same as

Atomic

Art of Multiprocessor Programming

Page 84: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

84

SRSW Atomic From SRSW Regular

1234

Regular writer

Regular reader

123456785678

Instead of 5678…

time

write(5678)

read(1234)

Initially 1234

Reg read(5678)

not

Atomic!

Write 5678 happened Art of Multiprocessor Programming

Page 85: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

85

Timestamped Values

Writer writes value and stamp together

Reader saves last value & stamp read

returns new value only if stamp is higher

12341:4556782:00 56782:00

Art of Multiprocessor Programming

12341:4556782:00

Page 86: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

86

SRSW Atomic From SRSW Regular

writer

reader

1:45 1234 < 2:00 5678 So stick with 5678

time

write(2:00 5678)

read(1:45 1234)

1:45 1234

read(2:00 5678)

Art of Multiprocessor Programming

12341:45 56782:00

Same as

Atomic

Page 87: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

87

Atomic Single-Reader to Atomic Multi-Reader

1:45 12341:45 1234

1:45 1234

1:45 1234

stamp value

One per reader

Art of Multiprocessor Programming

Page 88: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

88

Another Scenario

1:45 12342:00 5678

1:45 1234

1:45 1234

stamp value

Writer starts write…

Art of Multiprocessor Programming

Page 89: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

89

Another Scenario

1:45 12342:00 5678

1:45 1234

1:45 1234

stamp valuereader reads

2:00, 5678zzz…

1:45 1234

later reader

Yellow was completely after Blue but read earlier value…not linearizable!

Art of Multiprocessor Programming

Page 90: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

90

Multi-Reader Redux

1:45 1234 1:45 12341:45 1234

1:45 1234 1:45 1234

1:45 1234

one per thread

1:45 1234

1:45 1234

1:45 1234

1 2 3

1

23

Art of Multiprocessor Programming

Page 91: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

91

Multi-Reader Redux

1:45 1234 1:45 12341:45 1234

1:45 1234 1:45 1234

1:45 1234

1:45 1234

1:45 1234

Writer writes column…

2:00 5678

2:00 56782:00 5678

1:45 1234

reader reads row

2:00, 5678

1

1 2 3

1

23

2

Art of Multiprocessor Programming

Page 92: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

92

Multi-Reader Redux

1:45 1234 1:45 12341:45 1234

1:45 1234 1:45 1234

1:45 1234

1:45 1234

1:45 1234

2:00 5678 1:45 1234

reader writes column to notify others of what it read

1

1 2 3

1

23

2

2:00 5678

2:00 56782:00 5678

2:00 5678

zzz…after second write

2:00, 5678

Yellow reader will read new value in column written by earlier Blue reader

Art of Multiprocessor Programming

Page 93: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

93

Can’t Yellow Miss Blue’s Update? … Only if Readers Overlap…

time

write(2:00 5678)

read(1:45 1234)

1:45 1234

read(2:00 5678)

In which case its OK to read 1234

Art of Multiprocessor Programming

Page 94: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

94

Bad Case Only When Readers Don’t Overlap

time

write(2:00 5678)

read(2:00 5678)

1:45 1234

read(2:00 5678)

In which case Blue will complete writing

2:00 5678 to its column

Art of Multiprocessor Programming

Page 95: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

95

Road Map

• SRSW safe Boolean

• MRSW safe Boolean

• MRSW regular Boolean

• MRSW regular

• MRSW atomic

• MRMW atomic

• Atomic snapshot

Next

Art of Multiprocessor Programming

Page 96: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

96

Multi-Writer Atomic From Multi-Reader Atomic

1:45 12341:45 1234

1:45 1234

1:45 1234

stamp value

Readers read all and take max(Lexicographic like Bakery)

Each writer reads all then writes Max+1 to its register

2:00 5678

2:15 XYZW

Max is 2:15, return XYZW

Art of Multiprocessor Programming

Page 97: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

97

Atomic Execution Means it is Linearizable

time

write(1)

time

Read(max= 2) write(4)

write(2) write(3) Read(max = 3)

Read (max = 1) write(2) Read(max = 4)

Art of Multiprocessor Programming

Page 98: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

98

Linearization Points

time

write(1)

time

Read(max= 2) write(4)

write(2) write(3) Read(max = 3)

Read (max = 1) write(2) Read(max = 4)

Art of Multiprocessor Programming

Page 99: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

99

Linearization Points

time

write(1)

time

Look at Writes First

write(4)

write(2) write(3)

write(2)

Art of Multiprocessor Programming

Page 100: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

100

Linearization Points

time

write(1)

time

write(4)

write(2) write(3)

write(2)

Order writes by TimeStamp

Art of Multiprocessor Programming

Page 101: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

101

Linearization Points

time

write(1)

time

write(4)

write(2) write(3)

write(2)

Read(max= 2)

Read(max = 3)

Read (max = 1) Read(max = 4)

Order reads by max stamp read

Art of Multiprocessor Programming

Page 102: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

102

Linearization Points

time

write(1)

time

write(4)

write(2) write(3)

write(2)

Read(max= 2)

Read(max = 3)

Read (max = 1) Read(max = 4)

Order reads by max stamp read

Art of Multiprocessor Programming

Page 103: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

103

Linearization Points

time

write(1)

time

write(4)

write(2) write(3)

write(2)

Read(max= 2)

Read(max = 3)

Read (max = 1) Read(max = 4)

The linearization point depends on the execution (not a line in the code)!

Art of Multiprocessor Programming

Page 104: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

104

Road Map

• SRSW safe Boolean

• MRSW safe Boolean

• MRSW regular Boolean

• MRSW regular

• MRSW atomic

• MRMW atomic

• Atomic snapshot

Questions?

Art of Multiprocessor Programming

Page 105: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

105

Road Map

• SRSW safe Boolean

• MRSW safe Boolean

• MRSW regular Boolean

• MRSW regular

• MRSW atomic

• MRMW atomic

• Atomic snapshotNext

Art of Multiprocessor Programming

Page 106: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

106

Atomic Snapshot

updatescan

Art of Multiprocessor Programming

Page 107: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

107

Atomic Snapshot

• Array of SWMR atomic registers

• Take instantaneous snapshot of all

• Generalizes to MRMW registers …

Art of Multiprocessor Programming

Page 108: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

108

Snapshot Interface

public interface Snapshot { public int update(int v); public int[] scan();}

Art of Multiprocessor Programming

Page 109: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

109

Snapshot Interface

public interface Snapshot { public int update(int v); public int[] scan();}

Thread i writes v to its register

Art of Multiprocessor Programming

Page 110: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

110

Snapshot Interface

public interface Snapshot { public int update(int v); public int[] scan();}

Instantaneous snapshot of all theads’ registers

Art of Multiprocessor Programming

Page 111: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

111

Atomic Snapshot

• Collect– Read values one at a time

• Problem– Incompatible concurrent collects– Result not linearizable

Art of Multiprocessor Programming

Page 112: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

112

Clean Collects

• Clean Collect– Collect during which nothing changed– Can we make it happen?– Can we detect it?

Art of Multiprocessor Programming

Page 113: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

113

Simple Snapshot

• Put increasing labels on each entry

• Collect twice

• If both agree,– We’re done

• Otherwise,– Try again

x

yz

w

r

zx

=

Collect 2Collect 1

x

yz

w

r

zx

Problem: Scanner might not be collecting a snapshot!

Art of Multiprocessor Programming

Page 114: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

114

Claim: We Must Use Labels

time

x y x y

z z

x z x zScanner

Updater

Updater

But scanner sees x and z together!

x and z are never in memory

together

w

Art of Multiprocessor Programming

Page 115: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

115

Must Use Labels

time

1,x 2,y 3,x 4,y

1,z 3,z

1,x 1,z 3,x 3,zScanner

Updater

Updater2,w

Scanner reads x and z with different labels and recognizes

collect not clean

Art of Multiprocessor Programming

Page 116: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

116

Simple Snapshot

• Collect twice

• If both agree,– We’re done

• Otherwise,– Try again

1

221

7

13

1812

=

Collect 2Collect 1

1

221

7

13

1812

Art of Multiprocessor Programming

Page 117: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

117

Simple Snapshot: Update

public class SimpleSnapshot implements Snapshot {

private AtomicMRSWRegister[] register;

public void update(int value) {

int i = Thread.myIndex(); LabeledValue oldValue = register[i].read();

LabeledValue newValue =

new LabeledValue(oldValue.label+1, value);

register[i].write(newValue);

}

Art of Multiprocessor Programming

Page 118: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

118

Simple Snapshot: Update

public class SimpleSnapshot implements Snapshot {

private AtomicMRSWRegister[] register;

public void update(int value) {

int i = Thread.myIndex();

LabeledValue oldValue = register[i].read();

LabeledValue newValue =

new LabeledValue(oldValue.label+1, value);

register[i].write(newValue);

}

One single-writer register per thread

Art of Multiprocessor Programming

Page 119: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

119

Simple Snapshot: Update

public class SimpleSnapshot implements Snapshot {

private AtomicMRSWRegister[] register;

public void update(int value) {

int i = Thread.myIndex();

LabeledValue oldValue = register[i].read();

LabeledValue newValue =

new LabeledValue(oldValue.label+1, value);

register[i].write(newValue);

}

Write each time with higher label

Art of Multiprocessor Programming

Page 120: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

120

Simple Snapshot: Collect

private LabeledValue[] collect() {

LabeledValue[] copy =

new LabeledValue[n];

for (int j = 0; j < n; j++)

copy[j] = this.register[j].read();

return copy;

}

Art of Multiprocessor Programming

Page 121: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

121

Simple Snapshot

private LabeledValue[] collect() {

LabeledValue[] copy =

new LabeledValue[n];

for (int j = 0; j < n; j++)

copy[j] = this.register[j].read();

return copy;

}

Just read each register into array

Art of Multiprocessor Programming

Page 122: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

122

Simple Snapshot: Scan

public int[] scan() {

LabeledValue[] oldCopy, newCopy;

oldCopy = collect();

collect: while (true) {

newCopy = collect();

if (!equals(oldCopy, newCopy)) {

oldCopy = newCopy;

continue collect;

}

return getValues(newCopy);

}}

Art of Multiprocessor Programming

Page 123: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

123

Simple Snapshot: Scan

public int[] scan() {

LabeledValue[] oldCopy, newCopy;

oldCopy = collect();

collect: while (true) {

newCopy = collect();

if (!equals(oldCopy, newCopy)) {

oldCopy = newCopy;

continue collect;

}

return getValues(newCopy);

}}

Collect once

Art of Multiprocessor Programming

Page 124: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

124

Simple Snapshot: Scan

public int[] scan() {

LabeledValue[] oldCopy, newCopy;

oldCopy = collect();

collect: while (true) {

newCopy = collect();

if (!equals(oldCopy, newCopy)) {

oldCopy = newCopy;

continue collect;

}

return getValues(newCopy);

}}

Collect once

Collect twice

Art of Multiprocessor Programming

Page 125: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

125

Simple Snapshot: Scan

public int[] scan() {

LabeledValue[] oldCopy, newCopy;

oldCopy = collect();

collect: while (true) {

newCopy = collect();

if (!equals(oldCopy, newCopy)) {

oldCopy = newCopy;

continue collect;

}

return getValues(newCopy);

}}

Collect once

Collect twice

On mismatch, try again

Art of Multiprocessor Programming

Page 126: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

126

Simple Snapshot: Scan

public int[] scan() {

LabeledValue[] oldCopy, newCopy;

oldCopy = collect();

collect: while (true) {

newCopy = collect();

if (!equals(oldCopy, newCopy)) {

oldCopy = newCopy;

continue collect;

}

return getValues(newCopy);

}}

Collect once

Collect twice

On match, return values

Art of Multiprocessor Programming

Page 127: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

127

Simple Snapshot

• Linearizable

• Update is wait-free– No unbounded loops

• But Scan can starve– If interrupted by concurrent update

Art of Multiprocessor Programming

Page 128: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

128

Wait-Free Snapshot

• Add a scan before every update

• Write resulting snapshot together with update value

• If scan is continuously interrupted by updates, scan can take the update’s snapshot

Art of Multiprocessor Programming

Page 129: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

129

Wait-free Snapshot

If A’s scan observes that B movedtwice, then B completed an updatewhile A’s scan was in progress

time

Update

B

≠ ≠26

24

12

Collect

26

24

12

Collect

26

24

12

Collect

Art of Multiprocessor Programming

Page 130: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

130

Wait-free Snapshot

time

≠ ≠26

24

12

Collect

26

24

12

Collect

26

24

12

Collect

Update

A

B

Art of Multiprocessor Programming

Page 131: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

131

Wait-free Snapshot

time

≠ ≠26

24

12

Collect

26

24

12

Collect

26

24

12

Collect

A

B Scan Write

Update

Art of Multiprocessor Programming

Page 132: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

132

Wait-free Snapshot

time

≠ ≠26

24

12

Collect

26

24

12

Collect

26

24

12

Collect

A

B Scan Write

Update

Scan Write

B’s 1st update must have written during 1st collect

So scan of B’s second update mustbe within interval of A’s scan

So A can steal result of B’s scan

Art of Multiprocessor Programming

Page 133: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

133

Wait-free Snapshot

time

≠ ≠26

24

12

Collect

26

24

12

Collect

26

24

12

Collect

A

B Scan WriteScan Write

But no guarantee that scanof B’s 1st update can be used…Why?

Art of Multiprocessor Programming

Page 134: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

134

Once is not Enough

time

≠26

24

12

Collect

26

24

12

Collect

Update

A

B Scan Write

Why can’t A steal B’s scan?

Because another update might have interferedbefore the scan

Update

Art of Multiprocessor Programming

Page 135: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

135

Someone Must Move Twice

time

Update

B

≠ ≠26

24

12

Collect

26

24

12

Collect

26

24

12

Collect

If we collect n times…some thread must move twice (pigeonhole principle)

Art of Multiprocessor Programming

Page 136: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

136

Scan is Wait-free

scan

update

So some thread must have had clean collect

scan

update

scan

At most n-1

depth

Art of Multiprocessor Programming

Page 137: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

137

Wait-Free Snapshot Label

public class SnapValue { public int label; public int value; public int[] snap; }

Art of Multiprocessor Programming

Page 138: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

138

Wait-Free Snapshot Label

public class SnapValue { public int label; public int value; public int[] snap; }

Counter incremented with each snapshot

Art of Multiprocessor Programming

Page 139: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

139

Wait-Free Snapshot Label

public class SnapValue { public int label; public int value; public int[] snap; }

Actual value

Art of Multiprocessor Programming

Page 140: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

140

Wait-Free Snapshot Label

public class SnapValue { public int label; public int value; public int[] snap; }

most recent snapshot

Art of Multiprocessor Programming

Page 141: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

141

Wait-Free Snapshot Label

11011110101000101100…00

label

value

Last snapshot

Art of Multiprocessor Programming

Page 142: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

142

Wait-free Update

public void update(int value) {

int i = Thread.myIndex();

int[] snap = this.scan();

SnapValue oldValue = r[i].read();

SnapValue newValue =

new SnapValue(oldValue.label+1,

value, snap);

r[i].write(newValue);

}

Art of Multiprocessor Programming

Page 143: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

143

Wait-free Scan

public void update(int value) {

int i = Thread.myIndex();

int[] snap = this.scan();

SnapValue oldValue = r[i].read();

SnapValue newValue =

new SnapValue(oldValue.label+1,

value, snap);

r[i].write(newValue);

}

Take scan

Art of Multiprocessor Programming

Page 144: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

144

Wait-free Scan

public void update(int value) {

int i = Thread.myIndex();

int[] snap = this.scan();

SnapValue oldValue = r[i].read();

SnapValue newValue =

new SnapValue(oldValue.label+1,

value, snap);

r[i].write(newValue);

}

Take scan

Label value with scan

Art of Multiprocessor Programming

Page 145: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

145

Wait-free Scan

public int[] scan() {

SnapValue[] oldCopy, newCopy;

boolean[] moved = new boolean[n];

oldCopy = collect();

collect: while (true) {

newCopy = collect();

for (int j = 0; j < n; j++) {

if (oldCopy[j].label != newCopy[j].label) {

}}

return getValues(newCopy);

}}}

Art of Multiprocessor Programming

Page 146: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

146

Wait-free Scan

public int[] scan() {

SnapValue[] oldCopy, newCopy;

boolean[] moved = new boolean[n];

oldCopy = collect();

collect: while (true) {

newCopy = collect();

for (int j = 0; j < n; j++) {

if (oldCopy[j].label != newCopy[j].label) {

}}

return getValues(newCopy);

}}}

Keep track of who moved

Art of Multiprocessor Programming

Page 147: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

147

Wait-free Scan

public int[] scan() {

SnapValue[] oldCopy, newCopy;

boolean[] moved = new boolean[n];

oldCopy = collect();

collect: while (true) {

newCopy = collect();

for (int j = 0; j < n; j++) {

if (oldCopy[j].label != newCopy[j].label) {

}}

return getValues(newCopy);

}}}Repeated double collect

Art of Multiprocessor Programming

Page 148: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

148

Wait-free Scan

public int[] scan() {

SnapValue[] oldCopy, newCopy;

boolean[] moved = new boolean[n];

oldCopy = collect();

collect: while (true) {

newCopy = collect();

for (int j = 0; j < n; j++) {

if (oldCopy[j].label != newCopy[j].label) {

}}

return getValues(newCopy);

}}}If mismatch detected…

Art of Multiprocessor Programming

Page 149: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

149

Mismatch Detected

if (oldCopy[j].label != newCopy[j].label) {

if (moved[j]) { // second move

return newCopy[j].snap;

} else {

moved[j] = true;

oldCopy = newCopy;

continue collect;

}}}

return getValues(newCopy);

}}}

Art of Multiprocessor Programming

Page 150: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

150

Mismatch Detected

if (oldCopy[j].label != newCopy[j].label) {

if (moved[j]) {

return newCopy[j].snap;

} else {

moved[j] = true;

oldCopy = newCopy;

continue collect;

}}}

return getValues(newCopy);

}}}

If thread moved twice, just steal its second

snapshot

Art of Multiprocessor Programming

Page 151: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

151

Mismatch Detected

if (oldCopy[j].label != newCopy[j].label) {

if (moved[j]) { // second move

return newCopy[j].snap;

} else {

moved[j] = true;

oldCopy = newCopy;

continue collect;

}}}

return getValues(newCopy);

}}}

Remember that thread moved

Art of Multiprocessor Programming

Page 152: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

152

Observations

• Uses unbounded counters– can be replaced with 2 bits

• Assumes SWMR registers– for labels– can be extended to MRMW

Art of Multiprocessor Programming

Page 153: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

153

Summary

• We saw we could implement MRMW multi valued snapshot objects

• From SRSW binary safe registers (simple flipflops)

• But what is the next step to attempt with read-write registers?

Art of Multiprocessor Programming

Page 154: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

154

Grand Challenge

• Snapshot means– Write any one array element– Read multiple array elements

Art of Multiprocessor Programming

Page 155: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

155

Grand Challenge

Writes to 0 and 1

Writes to 1 and 2

What about atomic writes to

multiple locations?

Write many andsnapshot

Art of Multiprocessor Programming

Page 156: Foundations of Shared Memory Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit Art of Multiprocessor Programming.

156

         This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.

• You are free:– to Share — to copy, distribute and transmit the work – to Remix — to adapt the work

• Under the following conditions:– Attribution. You must attribute the work to “The Art of

Multiprocessor Programming” (but not in any way that suggests that the authors endorse you or your use of the work).

– Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license.

• For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to– http://creativecommons.org/licenses/by-sa/3.0/.

• Any of the above conditions can be waived if you get permission from the copyright holder.

• Nothing in this license impairs or restricts the author's moral rights.

Art of Multiprocessor Programming