The Relative Power of Synchronization Operations Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit.

Slides:



Advertisements
Similar presentations
1 Radio Maria World. 2 Postazioni Transmitter locations.
Advertisements

Números.
Trend for Precision Soil Testing % Zone or Grid Samples Tested compared to Total Samples.
Trend for Precision Soil Testing % Zone or Grid Samples Tested compared to Total Samples.
AGVISE Laboratories %Zone or Grid Samples – Northwood laboratory
Variations of the Turing Machine
PDAs Accept Context-Free Languages
ALAK ROY. Assistant Professor Dept. of CSE NIT Agartala
/ /17 32/ / /
Reflection nurulquran.com.
EuroCondens SGB E.
Worksheets.
Sequential Logic Design
Copyright © 2013 Elsevier Inc. All rights reserved.
Universality of Consensus Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit.
RM WD-97 WD-101 WD-102 WD-124 a IIIh-H : RM110 (2.1) Hainan c agGY Ia-1 (2) Anhui agGY Ia-2 (3) agGY Ia WD-2 WD-8 WD-36 agGY Ia
Addition and Subtraction Equations
Multiplication X 1 1 x 1 = 1 2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5 6 x 1 = 6 7 x 1 = 7 8 x 1 = 8 9 x 1 = 9 10 x 1 = x 1 = x 1 = 12 X 2 1.
Division ÷ 1 1 ÷ 1 = 1 2 ÷ 1 = 2 3 ÷ 1 = 3 4 ÷ 1 = 4 5 ÷ 1 = 5 6 ÷ 1 = 6 7 ÷ 1 = 7 8 ÷ 1 = 8 9 ÷ 1 = 9 10 ÷ 1 = ÷ 1 = ÷ 1 = 12 ÷ 2 2 ÷ 2 =
By John E. Hopcroft, Rajeev Motwani and Jeffrey D. Ullman
1 When you see… Find the zeros You think…. 2 To find the zeros...
Western Public Lands Grazing: The Real Costs Explore, enjoy and protect the planet Forest Guardians Jonathan Proctor.
EQUS Conference - Brussels, June 16, 2011 Ambros Uchtenhagen, Michael Schaub Minimum Quality Standards in the field of Drug Demand Reduction Parallel Session.
Add Governors Discretionary (1G) Grants Chapter 6.
CALENDAR.
Summative Math Test Algebra (28%) Geometry (29%)
Introduction to Turing Machines
ASCII stands for American Standard Code for Information Interchange
The 5S numbers game..
突破信息检索壁垒 -SciFinder Scholar 介绍
A Fractional Order (Proportional and Derivative) Motion Controller Design for A Class of Second-order Systems Center for Self-Organizing Intelligent.
The basics for simulations
1 Searching in a Graph Jeff Edmonds York University COSC 3101 Lecture 5 Generic Search Breadth First Search Dijkstra's Shortest Paths Algorithm Depth First.
Blessed Sacrament Altar Servers
Ordered linked list implementation of a set
Chapter 12 – Data Structures
Multicore Programming Skip list Tutorial 10 CS Spring 2010.
MM4A6c: Apply the law of sines and the law of cosines.
Figure 3–1 Standard logic symbols for the inverter (ANSI/IEEE Std
The Camo Bots Hiding Since Team Members Mr. Brian Landry - Advisor Mr. Patrick Farley - Advisor Mr. Marty OHora - Advisor Doug Yatsonsky.
Universality of Consensus Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit.
Dynamic Access Control the file server, reimagined Presented by Mark on twitter 1 contents copyright 2013 Mark Minasi.
Copyright © [2002]. Roger L. Costello. All Rights Reserved. 1 XML Schemas Reference Manual Roger L. Costello XML Technologies Course.
Progressive Aerobic Cardiovascular Endurance Run
Making Landmark or Friendly Numbers. Category 1 Designed to be one away from a landmark or friendly number.
When you see… Find the zeros You think….
2011 WINNISQUAM COMMUNITY SURVEY YOUTH RISK BEHAVIOR GRADES 9-12 STUDENTS=1021.
Before Between After.
2011 FRANKLIN COMMUNITY SURVEY YOUTH RISK BEHAVIOR GRADES 9-12 STUDENTS=332.
ST/PRM3-EU | | © Robert Bosch GmbH reserves all rights even in the event of industrial property rights. We reserve all rights of disposal such as copying.
Subtraction: Adding UP
Numeracy Resources for KS2
1 Non Deterministic Automata. 2 Alphabet = Nondeterministic Finite Accepter (NFA)
Static Equilibrium; Elasticity and Fracture
ANALYTICAL GEOMETRY ONE MARK QUESTIONS PREPARED BY:
Resistência dos Materiais, 5ª ed.
Lial/Hungerford/Holcomb/Mullins: Mathematics with Applications 11e Finite Mathematics with Applications 11e Copyright ©2015 Pearson Education, Inc. All.
Doc.: IEEE /0333r2 Submission July 2014 TGaj Editor Report for CC12 Jiamin Chen, HuaweiSlide 1 Date: Author:
1 Some Pitfalls in Testing … Japan Imports of Wheat US Pacific and Gulf Export Ports.
1 Non Deterministic Automata. 2 Alphabet = Nondeterministic Finite Accepter (NFA)
1 © R. Guerraoui The Limitations of Registers R. Guerraoui Distributed Programming Laboratory.
. 0. SECOR Conceptual Slides Evaluation Comment Option 1 Criterion 4Criterion 3Criterion 2Criterion 1Options Option 2 © 2010 Accenture. All rights.
Schutzvermerk nach DIN 34 beachten 05/04/15 Seite 1 Training EPAM and CANopen Basic Solution: Password * * Level 1 Level 2 * Level 3 Password2 IP-Adr.
The Relative Power of Synchronization Operations The Art of Multiprocessor Programming Spring 2007.
The Relative Power of Synchronization Operations Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit.
The Relative Power of Synchronization Operations Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit.
The Relative Power of Synchronization Methods
The Relative Power of Synchronization Operations
The Relative Power of Synchronization Operations
Presentation transcript:

The Relative Power of Synchronization Operations Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit

Art of Multiprocessor Programming 2 Shared-Memory Computability Mathematical model of concurrent computation What is (and is not) concurrently computable Efficiency (mostly) irrelevant Shared Memory

Art of Multiprocessor Programming 3 Wait-Free Implementation Every method call completes in finite number of steps Implies no mutual exclusion

Art of Multiprocessor Programming 4 From Weakest Register Single readerSingle writer Safe Boolean register

Art of Multiprocessor Programming 5 All the way to a Wait-free Implementation of Atomic Snapshots MRMW MRSW SRSW Safe Regular Atomic M-valued Boolean Snapshot

Art of Multiprocessor Programming 6 Rationale for wait-freedom We wanted atomic registers to implement mutual exclusion

Art of Multiprocessor Programming 7 Rationale for wait-freedom We wanted atomic registers to implement mutual exclusion So we couldnt use mutual exclusion to implement atomic registers

Art of Multiprocessor Programming 8 Rationale for wait-freedom We wanted atomic registers to implement mutual exclusion So we couldnt use mutual exclusion to implement atomic registers But wait, theres more!

Art of Multiprocessor Programming 9 Why is Mutual Exclusion so wrong?

Art of Multiprocessor Programming 10 Asynchronous Interrupts Swapped out back at ???

Art of Multiprocessor Programming 11 Heterogeneous Processors ??? yawn supercomputer toaster

Art of Multiprocessor Programming 12 Fault-tolerance ???

Art of Multiprocessor Programming 13 Machine Level Instruction Granularity Amdahls Law

Art of Multiprocessor Programming 14 Basic Questions Wait-Free synchronization might be a good idea in principle

Art of Multiprocessor Programming 15 Basic Questions Wait-Free synchronization might be a good idea in principle But how do you do it …

16 Basic Questions Wait-Free synchronization might be a good idea in principle But how do you do it … –Systematically? Art of Multiprocessor Programming

17 Basic Questions Wait-Free synchronization might be a good idea in principle But how do you do it … –Systematically? –Correctly? Art of Multiprocessor Programming

18 Basic Questions Wait-Free synchronization might be a good idea in principle But how do you do it … –Systematically? –Correctly? –Efficiently? Art of Multiprocessor Programming

19 FIFO Queue: Enqueue Method q.enq( ) Art of Multiprocessor Programming

20 FIFO Queue: Dequeue Method q.deq()/ Art of Multiprocessor Programming

21 Two-Thread Wait-Free Queue public class WaitFreeQueue { int head = 0, tail = 0; Item[QSIZE] items; public void enq(Item x) { while (tail - head == QSIZE) {}; items[tail % QSIZE] = x; tail++; } public Item deq() { while (tail - head == 0) {} Item item = items[head % QSIZE]; head++; return item; }} Art of Multiprocessor Programming 0 1 capacity-1 2 head tail y z

22 What About Multiple Dequeuers? Art of Multiprocessor Programming

23 Grand Challenge Implement a FIFO queue Art of Multiprocessor Programming

24 Grand Challenge Implement a FIFO queue –Wait-free Art of Multiprocessor Programming

25 Grand Challenge Implement a FIFO queue –Wait-free –Linearizable Art of Multiprocessor Programming

26 Grand Challenge Implement a FIFO queue –Wait-free –Linearizable –From atomic read-write registers Art of Multiprocessor Programming

27 Grand Challenge Implement a FIFO queue –Wait-free –Linearizable –From atomic read-write registers –Multiple dequeuers Art of Multiprocessor Programming

28 Grand Challenge Implement a FIFO queue –Wait-free –Linearizable –From atomic read-write registers –Multiple dequeuers Only new aspect Art of Multiprocessor Programming

29 Puzzle Art of Multiprocessor Programming While you are ruminating on the grand challenge … We will give you another puzzle … Consensus!

Art of Multiprocessor Programming 30 Consensus: Each Thread has a Private Input

31 They Communicate Art of Multiprocessor Programming

32 They Agree on One Threads Input 19

33 Formally: Consensus Consistent: –all threads decide the same value Art of Multiprocessor Programming

34 Formally: Consensus Consistent: –all threads decide the same value Valid: –the common decision value is some thread's input Art of Multiprocessor Programming

35 No Wait-Free Implementation of Consensus using Registers ???

36 Formally Theorem –There is no wait-free implementation of n-thread consensus from read-write registers Art of Multiprocessor Programming

37 Formally Theorem –There is no wait-free implementation of n-thread consensus from read-write registers Implication –Asynchronous computability different from Turing computability Art of Multiprocessor Programming

Proof Strategy 38Art of Multiprocessor Programming Assume otherwise … Reason about the properties of any such protocol … Derive a contradiction Quod Erat Demonstrandum Enough to consider binary consensus and n=2

Art of Multiprocessor Programming 39 Protocol Histories as State Transitions time x.read() y.read() y.read(y) x.write() time A B init state final state

Art of Multiprocessor Programming 40 Wait-Free Computation Either A or B moves Moving means –Register read –Register write A movesB moves

Art of Multiprocessor Programming 41 The Two-Move Tree Initial state Final states

Art of Multiprocessor Programming 42 Decision Values

43 Bivalent: Both Possible 111 bivalent 10 0 Art of Multiprocessor Programming

44 Univalent: Single Value Possible 111 univalent 10 0 Art of Multiprocessor Programming

45 x-valent: x Only Possible Decision valent 0 1 Art of Multiprocessor Programming

46 Summary Wait-free computation is a tree Art of Multiprocessor Programming

47 Summary Wait-free computation is a tree Bivalent system states –Outcome not fixed Art of Multiprocessor Programming

48 Summary Wait-free computation is a tree Bivalent system states –Outcome not fixed Univalent states –Outcome is fixed –May not be known yet Art of Multiprocessor Programming

49 Summary Wait-free computation is a tree Bivalent system states –Outcome not fixed Univalent states –Outcome is fixed –May not be known yet 1-Valent and 0-Valent states Art of Multiprocessor Programming

50 Claim Some initial state is bivalent Art of Multiprocessor Programming

51 Claim Some initial state is bivalent Outcome depends on –Chance –Whim of the scheduler Art of Multiprocessor Programming

52 Claim Some initial state is bivalent Outcome depends on –Chance –Whim of the scheduler Multicore gods procrastinate … Art of Multiprocessor Programming

53 Claim Some initial state is bivalent Outcome depends on –Chance –Whim of the scheduler Multicore gods procrastinate … Lets prove it … Art of Multiprocessor Programming

54 What if inputs differ? 1 0

Art of Multiprocessor Programming 55 Must Decide 0 In this solo execution by A 0

Art of Multiprocessor Programming 56 Must Decide 1 1 In this solo execution by B

Art of Multiprocessor Programming 57 Mixed Initial State Bivalent Solo execution by A must decide 0 Solo execution by B must decide 1 0 1

Art of Multiprocessor Programming 58 0-valent Critical States 1-valent critical

Art of Multiprocessor Programming 59 From a Critical State c If A goes first, protocol decides 0 If B goes first, protocol decides 1 0-valent 1-valent

60 Reaching Critical State CACA CACA CBCB c CBCB univalent 0-valent 1-valent initially bivalent

61 Critical States Starting from a bivalent initial state Art of Multiprocessor Programming

62 Critical States Starting from a bivalent initial state The protocol can reach a critical state Art of Multiprocessor Programming

63 Critical States Starting from a bivalent initial state The protocol can reach a critical state –Otherwise we could stay bivalent forever –And the protocol is not wait-free Art of Multiprocessor Programming

64 Model Dependency So far, memory-independent! True for –Registers –Message-passing –Carrier pigeons –Any kind of asynchronous computation Art of Multiprocessor Programming

Closing the Deal Start from a critical state Art of Multiprocessor Programming

Closing the Deal Start from a critical state Each thread fixes outcome by –Reading or writing … –Same or different registers Art of Multiprocessor Programming

Closing the Deal Start from a critical state Each thread fixes outcome by –Reading or writing … –Same or different registers Leading to a 0 or 1 decision … Art of Multiprocessor Programming

Closing the Deal Start from a critical state Each thread fixes outcome by –Reading or writing … –Same or different registers Leading to a 0 or 1 decision … And a contradiction. Art of Multiprocessor Programming

69 Possible Interactions x.read()y.read()x.write()y.write() x.read() ???? y.read() ???? x.write() ???? y.write() ???? Art of Multiprocessor Programming

70 Possible Interactions x.read()y.read()x.write()y.write() x.read() ???? y.read() ???? x.write() ???? y.write() ???? A reads x Art of Multiprocessor Programming

71 Possible Interactions x.read()y.read()x.write()y.write() x.read() ???? y.read() ???? x.write() ???? y.write() ???? A reads x A reads y Art of Multiprocessor Programming

72 Some Thread Reads c Art of Multiprocessor Programming

73 Some Thread Reads A runs solo, eventually decides 0 0 c Art of Multiprocessor Programming

74 Some Thread Reads A runs solo, eventually decides 0 B reads x 0 c Art of Multiprocessor Programming

75 Some Thread Reads A runs solo, eventually decides 0 B reads x 1 0 A runs solo, eventually decides 1 c Art of Multiprocessor Programming

76 Some Thread Reads A runs solo, eventually decides 0 B reads x 1 0 A runs solo, eventually decides 1 c States look the same to A Art of Multiprocessor Programming

77 Some Thread Reads A runs solo, eventually decides 0 B reads x 1 0 A runs solo, eventually decides 1 c States look the same to A Contradiction Art of Multiprocessor Programming

78 Possible Interactions x.read()y.read()x.write()y.write() x.read() no y.read() no x.write() no ?? y.write() no ?? Art of Multiprocessor Programming

79 Writing Distinct Registers c

80 Writing Distinct Registers A writes y c Art of Multiprocessor Programming

81 Writing Distinct Registers A writes y c B writes x Art of Multiprocessor Programming

82 Writing Distinct Registers A writes y c B writes x 0 Art of Multiprocessor Programming

83 Writing Distinct Registers A writes yB writes x c 0 Art of Multiprocessor Programming

84 Writing Distinct Registers A writes yB writes x c A writes y B writes x 0

Art of Multiprocessor Programming 85 Writing Distinct Registers A writes yB writes x c A writes y B writes x 0 1

86 Writing Distinct Registers A writes yB writes x c Same story A writes y B writes x 0 1

87 Writing Distinct Registers A writes yB writes x c Same story A writes y B writes x 0 1 Contradiction

Art of Multiprocessor Programming 88 Possible Interactions x.read()y.read()x.write()y.write() x.read() no y.read() no x.write() no ? y.write() no ?

Art of Multiprocessor Programming 89 Writing Same Registers States look the same to A A writes x B writes x 1 A runs solo, eventually decides 1 c 0 A runs solo, eventually decides 0 A writes x Contradiction

Art of Multiprocessor Programming 90 Thats All, Folks! x.read()y.read()x.write()y.write() x.read() no y.read() no x.write() no y.write() no QED

Art of Multiprocessor Programming 91 Recap: Atomic Registers Cant Do Consensus If protocol exists –It has a bivalent initial state –Leading to a critical state Whats up with the critical state? –Case analysis for each pair of methods –As we showed, all lead to a contradiction

Art of Multiprocessor Programming 92 What Does Consensus have to do with Concurrent Objects?

Art of Multiprocessor Programming 93 Consensus Object public interface Consensus { T decide(T value); }

Art of Multiprocessor Programming 94 Concurrent Consensus Object We consider only one time objects: –each thread calls method only once Linearizable to consensus object: –Winners call went first

Art of Multiprocessor Programming 95 Java Jargon Watch Define Consensus protocol as an abstract class We implement some methods You do the rest …

Art of Multiprocessor Programming 96 Generic Consensus Protocol abstract class ConsensusProtocol implements Consensus { protected T[] proposed = new T[N]; protected void propose(T value) { proposed[ThreadID.get()] = value; } abstract public T decide(T value); }

Art of Multiprocessor Programming 97 abstract class ConsensusProtocol implements Consensus { protected T[] proposed = new T[N]; protected void propose(T value) { proposed[ThreadID.get()] = value; } abstract public T decide(T value); } Generic Consensus Protocol Each threads proposed value

Art of Multiprocessor Programming 98 abstract class ConsensusProtocol implements Consensus { protected T[] proposed = new T[N]; protected void propose(T value) { proposed[ThreadID.get()] = value; } abstract public T decide(T value); } Generic Consensus Protocol Propose a value

Art of Multiprocessor Programming 99 abstract class ConsensusProtocol implements Consensus { protected T[] proposed = new T[N]; protected void propose(T value) { proposed[ThreadID.get()] = value; } abstract public T decide(T value); } Generic Consensus Protocol Decide a value: abstract method means subclass does the real work

Art of Multiprocessor Programming 100 Can a FIFO Queue Implement Consensus?

Art of Multiprocessor Programming 101 FIFO Consensus proposed array FIFO Queue with red and black balls 8 Coveted red ballDreaded black ball

Art of Multiprocessor Programming 102 Protocol: Write Value to Array 01 0

Art of Multiprocessor Programming Protocol: Take Next Item from Queue 01 8

Art of Multiprocessor Programming Protocol: Take Next Item from Queue I got the coveted red ball, so I will decide my value I got the dreaded black ball, so I will decide the others value from the array 8

Art of Multiprocessor Programming 105 public class QueueConsensus extends ConsensusProtocol { private Queue queue; public QueueConsensus() { queue = new Queue(); queue.enq(Ball.RED); queue.enq(Ball.BLACK); } … } Consensus Using FIFO Queue

Art of Multiprocessor Programming 106 public class QueueConsensus extends ConsensusProtocol { private Queue queue; public QueueConsensus() { this.queue = new Queue(); this.queue.enq(Ball.RED); this.queue.enq(Ball.BLACK); } … } Initialize Queue 8

Art of Multiprocessor Programming 107 public class QueueConsensus extends ConsensusProtocol { private Queue queue; … public T decide(T value) { propose(value); Ball ball = queue.deq(); if (ball == Ball.RED) return proposed[i]; else return proposed[1-i]; } Who Won?

Art of Multiprocessor Programming 108 public class QueueConsensus extends ConsensusProtocol { private Queue queue; … public T decide(T value) { propose(value); Ball ball = queue.deq(); if (ball == Ball.RED) return proposed[i]; else return proposed[1-ij]; } Who Won? Race to dequeue first queue item

Art of Multiprocessor Programming 109 public class QueueConsensus extends ConsensusProtocol { private Queue queue; … public T decide(T value) { propose(value); Ball ball = this.queue.deq(); if (ball == Ball.RED) return proposed[i]; else return proposed[1-i]; } Who Won? I win if I was first

Art of Multiprocessor Programming 110 public class QueueConsensus extends ConsensusProtocol { private Queue queue; … public T decide(T value) { propose(value); Ball ball = this.queue.deq(); if (ball == Ball.RED) return proposed[i]; else return proposed[1-i]; } Who Won? Other thread wins if I was second

111 Why does this Work? If one thread gets the red ball Then the other gets the black ball Winner decides her own value Loser can find winners value in array –Because threads write array –Before dequeueing from queue Art of Multiprocessor Programming

112 Theorem We can solve 2-thread consensus using only –A two-dequeuer queue, and –Some atomic registers Art of Multiprocessor Programming

113 Implications Given –A consensus protocol from queue and registers Assume there exists –A queue implementation from atomic registers Substitution yields: –A wait-free consensus protocol from atomic registers contradiction

114 Corollary It is impossible to implement –a two-dequeuer wait-free FIFO queue –from read/write memory. Art of Multiprocessor Programming

115 Consensus Numbers An object X has consensus number n –If it can be used to solve n-thread consensus Take any number of instances of X together with atomic read/write registers and implement n-thread consensus –But not (n+1)-thread consensus Art of Multiprocessor Programming

116 Consensus Numbers Theorem –Atomic read/write registers have consensus number 1 Theorem –Multi-dequeuer FIFO queues have consensus number at least 2 Art of Multiprocessor Programming

117 Consensus Numbers Measure Synchronization Power Theorem –If you can implement X from Y –And X has consensus number c –Then Y has consensus number at least c Art of Multiprocessor Programming

118 Synchronization Speed Limit Conversely –If X has consensus number c –And Y has consensus number d < c –Then there is no way to construct a wait- free implementation of X by Y This theorem will be very useful –Unforeseen practical implications! Theoretical Caveat: Certain weird exceptions exist

119 Earlier Grand Challenge Snapshot means –Write any array element –Read multiple array elements atomically What about –Write multiple array elements atomically –Scan any array elements Call this problem multiple assignment Art of Multiprocessor Programming

120 Multiple Assignment Theorem Atomic registers cannot implement multiple assignment Weird or what? –Single write/multi read OK –Multi write/multi read impossible

Art of Multiprocessor Programming 121 Proof Strategy If we can write to 2/3 array elements –We can solve 2-consensus –Impossible with atomic registers Therefore –Cannot implement multiple assignment with atomic registers (1)

Art of Multiprocessor Programming 122 Proof Strategy Take a 3-element array –A writes atomically to slots 0 and 1 –B writes atomically to slots 1 and 2 –Any thread can scan any set of locations

Art of Multiprocessor Programming 123 Double Assignment Interface interface Assign2 { public void assign(int i 1, int v 1, int i 2, int v 2 ); public int read(int i); }

Art of Multiprocessor Programming 124 Double Assignment Interface interface Assign2 { public void assign(int i 1, int v 1, int i 2, int v 2 ); public int read(int i); } Atomically assign value[i 1 ]= v 1 value[i 2 ]= v 2

Art of Multiprocessor Programming 125 Double Assignment Interface interface Assign2 { public void assign(int i 1, int v 1, int i 2, int v 2 ); public int read(int i); } Return i-th value

Art of Multiprocessor Programming 126 Initially Writes to 0 and 1 Writes to 1 and 2 A B

Art of Multiprocessor Programming 127 Thread A wins if A B Thread B didnt move

Art of Multiprocessor Programming 128 Thread A wins if A B Thread B moved later

Art of Multiprocessor Programming 129 Thread A loses if A B Thread B moved earlier

Art of Multiprocessor Programming 130 Multi-Consensus Code class MultiConsensus extends …{ Assign2 a = new Assign2(3, EMPTY); public T decide(T value) { a.assign(i, i, i+1, i); int other = a.read((i+2) % 3); if (other==EMPTY||other==a.read(1)) return proposed[i]; else return proposed[j]; }}

Art of Multiprocessor Programming 131 Multi-Consensus Code class MultiConsensus extends …{ Assign2 a = new Assign2(3, EMPTY); public T decide(T value) { a.assign(i, i, i+1, i); int other = a.read((i+2) % 3); if (other==EMPTY||other==a.read(1)) return proposed[i]; else return proposed[j]; }} Extends ConsensusProtocol Decide sets j=i-1 and proposes value

Art of Multiprocessor Programming 132 Multi-Consensus Code class MultiConsensus extends …{ Assign2 a = new Assign2(3, EMPTY); public T decide(T value) { a.assign(i, i, i+1, i); int other = a.read((i+2) % 3); if (other==EMPTY||other==a.read(1)) return proposed[i]; else return proposed[j]; }} Three slots initialized to EMPTY

Art of Multiprocessor Programming 133 Multi-Consensus Code class MultiConsensus extends …{ Assign2 a = new Assign2(3, EMPTY); public T decide(T value) { a.assign(i, i, i+1, i); int other = a.read((i+2) % 3); if (other==EMPTY||other==a.read(1)) return proposed[i]; else return proposed[j]; }} Assign ID 0 to entries 0,1 (or ID1 to entries 1,2)

Art of Multiprocessor Programming 134 Multi-Consensus Code class MultiConsensus extends …{ Assign2 a = new Assign2(3, EMPTY); public T decide(T value) { a.assign(i, i, i+1, i); int other = a.read((i+2) % 3); if (other==EMPTY||other==a.read(1)) return proposed[i]; else return proposed[j]; }} Read the register my thread didnt assign

Art of Multiprocessor Programming 135 class MultiConsensus extends …{ Assign2 a = new Assign2(3, EMPTY); public T decide(T value) { a.assign(i, i, i+1, i); int other = a.read((i+2) % 3); if (other==EMPTY||other==a.read(1)) return proposed[i]; else return proposed[j]; }} Multi-Consensus Code Other thread didnt move, so I win

Art of Multiprocessor Programming 136 class MultiConsensus extends …{ Assign2 a = new Assign2(3, EMPTY); public T decide(T value) { a.assign(i, i, i+1, i); int other = a.read((i+2) % 3); if (other==EMPTY||other==a.read(1)) return proposed[i]; else return proposed[j]; }} Multi-Consensus Code Other thread moved later so I win

Art of Multiprocessor Programming 137 Multi-Consensus Code class MultiConsensus extends …{ Assign2 a = new Assign2(3, EMPTY); public T decide(T value) { a.assign(i, i, i+1, i); int other = a.read((i+2) % 3); if (other==EMPTY||other==a.read(1)) return proposed[i]; else return proposed[j]; }} OK, I win.

Art of Multiprocessor Programming 138 class MultiConsensus extends …{ Assign2 a = new Assign2(3, EMPTY); public T decide(T value) { a.assign(i, i, i+1, i); int other = a.read((i+2) % 3); if (other==EMPTY||other==a.read(1)) return proposed[i]; else return proposed[j]; }} Multi-Consensus Code (1) Other thread moved first, so I lose

139 Summary If a thread can assign atomically to 2 out of 3 array locations Then we can solve 2-consensus Therefore –No wait-free multi-assignment –From read/write registers Art of Multiprocessor Programming

140 Read-Modify-Write Objects Method call –Returns objects prior value x –Replaces x with mumble (x) Art of Multiprocessor Programming

141 public abstract class RMWRegister { private int value; public int synchronized getAndMumble() { int prior = value; value = mumble(value); return prior; } Read-Modify-Write Art of Multiprocessor Programming

142 public abstract class RMWRegister { private int value; public int synchronized getAndMumble() { int prior = value; value = mumble(value); return prior; } Read-Modify-Write Return prior value

Art of Multiprocessor Programming 143 public abstract class RMWRegister { private int value; public int synchronized getAndMumble() { int prior = value; value = mumble(value); return prior; } Read-Modify-Write Apply function to current value

144 RMW Everywhere! Most synchronization instructions –are RMW methods The rest –Can be trivially transformed into RMW methods Art of Multiprocessor Programming

145 public abstract class RMWRegister { private int value; public int synchronized read() { int prior = value; value = value; return prior; } Example: Read Art of Multiprocessor Programming

146 public abstract class RMW { private int value; public int synchronized read() { int prior = this.value; value = value; return prior; } Example: Read apply f(v)=v, the identity function

147 public abstract class RMWRegister { private int value; public int synchronized getAndSet(int v) { int prior = value; value = v; return prior; } … } Example: getAndSet Art of Multiprocessor Programming

148 public abstract class RMWRegister { private int value; public int synchronized getAndSet(int v) { int prior = value; value = v; return prior; } … } Example: getAndSet (swap) f(x)=v is constant

149 public abstract class RMWRegister { private int value; public int synchronized getAndIncrement() { int prior = value; value = value + 1; return prior; } … } getAndIncrement Art of Multiprocessor Programming

150 public abstract class RMWRegister { private int value; public int synchronized getAndIncrement() { int prior = value; value = value + 1; return prior; } … } getAndIncrement f(x) = x+1

151 public abstract class RMWRegister { private int value; public int synchronized getAndAdd(int a) { int prior = value; value = value + a; return prior; } … } getAndAdd Art of Multiprocessor Programming

152 public abstract class RMWRegister { private int value; public int synchronized getAndIncrement(int a) { int prior = value; value = value + a; return prior; } … } Example: getAndAdd f(x) = x+a

153 public abstract class RMWRegister { private int value; public boolean synchronized compareAndSet(int expected, int update) { int prior = value; if (value==expected) { value = update; return true; } return false; } … } compareAndSet Art of Multiprocessor Programming

154 public abstract class RMWRegister { private int value; public boolean synchronized compareAndSet(int expected, int update) { int prior = value; if (value==expected) { value = update; return true; } return false; } … } compareAndSet If value is as expected, …

Art of Multiprocessor Programming 155 public abstract class RMWRegister { private int value; public boolean synchronized compareAndSet(int expected, int update) { int prior = value; if (value==expected) { value = update; return true; } return false; } … } compareAndSet … replace it

Art of Multiprocessor Programming 156 public abstract class RMWRegister { private int value; public boolean synchronized compareAndSet(int expected, int update) { int prior = value; if (value==expected) { value = update; return true; } return false; } … } compareAndSet Report success

Art of Multiprocessor Programming 157 public abstract class RMWRegister { private int value; public boolean synchronized compareAndSet(int expected, int update) { int prior = value; if (value==expected) { value = update; return true; } return false; } … } compareAndSet Otherwise report failure

Art of Multiprocessor Programming 158 public abstract class RMWRegister { private int value; public void synchronized getAndMumble() { int prior = value; value = mumble(value); return prior; } Read-Modify-Write Lets characterize f(x)…

159 Definition A RMW method –With function mumble(x) – is non-trivial if there exists a value v –Such that v mumble(v) Art of Multiprocessor Programming

160 Par Example Identity(x) = x – is trivial getAndIncrement(x) = x+1 –is non-trivial Art of Multiprocessor Programming

161 Theorem Any non-trivial RMW object has consensus number at least 2 No wait-free implementation of RMW registers from atomic registers Hardware RMW instructions not just a convenience Art of Multiprocessor Programming

162 Reminder Subclasses of consensus have –propose(x) method which just stores x into proposed[i] built-in method –decide(object value) method which determines winning value customized, class-specific method Art of Multiprocessor Programming

163 Proof public class RMWConsensus extends ConsensusProtocol { private RMWRegister r = v; public T d ecide(T value) { propose(value); if (r.getAndMumble() == v) return proposed[i]; else return proposed[j]; }} Art of Multiprocessor Programming

164 public class RMWConsensus extends ConsensusProtocol { private RMWRegister r = v; public T decide(T value) { propose(value); if (r.getAndMumble() == v) return proposed[i]; else return proposed[j]; }} Proof Initialized to v

Art of Multiprocessor Programming 165 Proof public class RMWConsensus extends Consensus { private RMWRegister r = v; public T decide(T value) { propose(value); if (r.getAndMumble() == v) return proposed[i]; else return proposed[j]; }} Am I first?

Art of Multiprocessor Programming 166 public class RMWConsensus extends ConsensusProtocol { private RMWRegister r = v; public T decide(T value) { propose(value); if (r.getAndMumble() == v) return proposed[i]; else return proposed[j]; }} Proof Yes, return my input

Art of Multiprocessor Programming 167 public class RMWConsensus extends ConsensusProtocol { private RMWRegister r = v; public T decide(T value) { propose(value); if (r.getAndMumble() == v) return proposed[i]; else return proposed[j]; }} Proof No, return others input

168 Proof We have displayed –A two-thread consensus protocol –Using any non-trivial RMW object Art of Multiprocessor Programming

169 Interfering RMW Let F be a set of functions such that for all f i and f j, either –Commute: f i (f j (v))=f j (f i (v)) –Overwrite: f i (f j (v))=f i (v) Claim: Any set of RMW objects that commutes or overwrites has consensus number exactly 2 Art of Multiprocessor Programming

170 Examples test-and-set getAndSet(1) f(v)=1 swap getAndSet(x) f(v,x)=x fetch-and-inc getAndIncrement() f(v)=v+1 Overwrite f i (f j (v))=f i (v) Commute f i (f j (v))= f j (f i (v))

Art of Multiprocessor Programming 171 Meanwhile Back at the Critical State c 0-valent 1-valent A about to apply f A B about to apply f B

Art of Multiprocessor Programming 172 Maybe the Functions Commute c 0-valent A applies f A B applies f B A applies f A B applies f B 01 C runs solo 1-valent

173 Maybe the Functions Commute c 0-valent A applies f A B applies f B A applies f A B applies f B 01 C runs solo 1-valent These states look the same to C Contradiction Art of Multiprocessor Programming

174 Maybe the Functions Overwrite c 0-valent A applies f A B applies f B A applies f A 0 1 C runs solo 1-valent

Art of Multiprocessor Programming 175 Maybe the Functions Overwrite c 0-valent A applies f A B applies f B A applies f A 0 1 C runs solo 1-valent These states look the same to C Contradiction

176 Impact Many early machines provided these weak RMW instructions –Test-and-set (IBM 360) –Fetch-and-add (NYU Ultracomputer) –Swap (Original SPARCs) We now understand their limitations –But why do we want consensus anyway? Art of Multiprocessor Programming

177 public abstract class RMWRegister { private int value; public boolean synchronized compareAndSet(int expected, int update) { int prior = value; if (value==expected) { value = update; return true; } return false; } … } compareAndSet Art of Multiprocessor Programming

178 public abstract class RMWRegister { private int value; public boolean synchronized compareAndSet(int expected, int update) { int prior = this.value; if (value==expected) { this.value = update; return true; } return false; } … } compareAndSet replace value if its what we expected, …

Art of Multiprocessor Programming 179 public class RMWConsensus extends ConsensusProtocol { private AtomicInteger r = new AtomicInteger(-1); public T decide(T value) { propose(value); r.compareAndSet(-1,i); return proposed[r.get()]; } compareAndSet Has Consensus Number

Art of Multiprocessor Programming 180 public class RMWConsensus extends ConsensusProtocol { private AtomicInteger r = new AtomicInteger(-1); public T decide(T value) { propose(value) r.compareAndSet(-1,i); return proposed[r.get()]; } compareAndSet Has Consensus Number Initialized to -1

Art of Multiprocessor Programming 181 public class RMWConsensus extends ConsensusProtocol { private AtomicInteger r = new AtomicInteger(-1); public T decide(T value) { propose(value); r.compareAndSet(-1,i); return proposed[r.get()]; } compareAndSet Has Consensus Number Try to swap in my id

Art of Multiprocessor Programming 182 public class RMWConsensus extends ConsensusProtocol { private AtomicInteger r = new AtomicInteger(-1); public T decide(T value) { propose(value); r.compareAndSet(-1,i); return proposed[r.get()]; } compareAndSet Has Consensus Number Decide winners preference

Art of Multiprocessor Programming 183 The Consensus Hierarchy 1 Read/Write Registers, Snapshots… 2 getAndSet, getAndIncrement, … compareAndSet,…......

184 Multiple Assignment Atomic k-assignment Solves consensus for 2k-2 threads Every even consensus number has an object (can be extended to odd numbers) Art of Multiprocessor Programming

185 Lock-Freedom Lock-free: –in an infinite execution –infinitely often some method call finishes Pragmatic approach Implies no mutual exclusion Art of Multiprocessor Programming

186 Lock-Free vs. Wait-free Wait-Free: each method call takes a finite number of steps to finish Lock-free: infinitely often some method call finishes Art of Multiprocessor Programming

187 Lock-Freedom Any wait-free implementation is lock-free. Lock-free is the same as wait- free if the execution is finite. Art of Multiprocessor Programming

188 Lock-Free Implementations Lock-free consensus is as impossible as wait-free consensus All these results hold for lock-free algorithms also. Art of Multiprocessor Programming

189 There is More: Universality Consensus is universal From n-thread consensus –Wait-free/Lock-free –Linearizable –n-threaded –Implementation –Of any sequentially specified object Stay tuned…

Art of Multiprocessor Programming 190 This work is licensed under a Creative Commons Attribution- ShareAlike 2.5 License.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 – 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.