1 The Computability of Relaxed Data Structures: Queues and Stacks as Examples The Computability of...
-
Upload
randolph-brown -
Category
Documents
-
view
223 -
download
0
description
Transcript of 1 The Computability of Relaxed Data Structures: Queues and Stacks as Examples The Computability of...
1
The Computability of Relaxed Data Structures:Queues and Stacks as Examples
Nir Shavit and Gadi Taubenfeld
Version: August 2015
SIROCCO 2015 Gadi Taubenfeld © 2015
2
Semantics of concurrent data structures
Sequential specification -- set of legal runs/sequences.
Consistency condition -- e.g. linearizability, sequential consistency, …
relaxed
This paper
SIROCCO 2015 Gadi Taubenfeld © 2015
3
Why to relax ?
Synchronization inherently limits parallelism. Semantically weaker DS reduce the need from synchronization.
Thus, provides potential to achieve better performance
and scalability. There are many published efficient implementations
of relaxed data structures. (See related work.) We are interested in
computability not complexity.
SIROCCO 2015 Gadi Taubenfeld © 2015
4
Queue[a,b,c]
enqueue dequeue
peek
a b
c
* -- can insert/remove/return a value at arbitrary position 0 -- operation not supported
SIROCCO 2015 Gadi Taubenfeld © 2015
5
Stack[a,b,c]
push pop
top
a b
c
SIROCCO 2015 Gadi Taubenfeld © 2015
6
Queue[a,b,c]
enqu
eue
dequ
eue
peek
Queue[1,1,1] -- traditional FIFO queue Queue[1,1,0] -- does not support peek Queue[1,1,*] -- peek returns a random value
Stack[ 1,0,1] -- atomic read/write register
Queue[*,*,0] = Stack[*,*,0] -- multiset object
SIROCCO 2015 Gadi Taubenfeld © 2015
7
Object Consensus number
queue[1,1,1]
queue[*,*,0], queue[1,1,0] 2stack[*,*,0], stack[1,1,0],
stack[1,1,1] 2
atomic register, stack[1,0,1] 1
Objects are wait-free & linearizable
Consensus Numberknown results
SIROCCO 2015 Gadi Taubenfeld © 2015
8
Relaxing the enqueue operation
SIROCCO 2015 Gadi Taubenfeld © 2015
9
Relaxing the enqueue operationObject Consensus number
queue[1,1,1]
queue[2,1,1]queue[3,1,1]
…queue[*,1,1]queue[*,2,1]queue[*,3,1]
…queue[*,*,1]queue[*,*,2]
queue[*,*,0] 2
SIROCCO 2015 Gadi Taubenfeld © 2015
10
Relaxing the enqueue operationObject Consensus number
queue[1,1,1]
queue[2,1,1]queue[3,1,1]
…queue[*,1,1] 2queue[*,2,1]queue[*,3,1]
…queue[*,*,1]queue[*,*,2]
queue[*,*,0] 2
SIROCCO 2015 Gadi Taubenfeld © 2015
11
Relaxing the enqueue operationObject Consensus number
queue[1,1,1]
queue[2,1,1]queue[3,1,1]
…queue[*,1,1] 2queue[*,2,1] 2queue[*,3,1] 2
… 2queue[*,*,1] 2queue[*,*,2] 2
2queue[*,*,0] 2
SIROCCO 2015 Gadi Taubenfeld © 2015
12
Relaxing the enqueue operationObject Consensus number
queue[1,1,1]
queue[2,1,1]
queue[3,1,1]
…
queue[*,1,1] 2queue[*,2,1] 2queue[*,3,1] 2
… 2queue[*,*,1] 2queue[*,*,2] 2
2queue[*,*,0] 2
SIROCCO 2015 Gadi Taubenfeld © 2015
13
Relaxing the enqueue operationObject Consensus number
queue[1,1,1], queue[1,0,1]
queue[2,1,1], queue[2,0,1]
queue[3,1,1], queue[3,0,1]
… …
queue[*,1,1] 2queue[*,2,1] 2queue[*,3,1] 2
… 2queue[*,*,1] 2queue[*,*,2] 2
2queue[*,*,0] 2SIROCCO 2015 Gadi Taubenfeld ©
2015
14
Relaxing the peek operation
SIROCCO 2015 Gadi Taubenfeld © 2015
15
Relaxing the peek operationObject Consensus number
queue[1,1,1]
queue[1,1,2]queue[1,1,3]
…queue[1,1,*]queue[1,2,*]queue[1,3,*]
…queue[1,*,*]queue[2,*,*]
queue[*,*,0] 2
SIROCCO 2015 Gadi Taubenfeld © 2015
16
Relaxing the peek operationObject Consensus number
queue[1,1,1]
queue[1,1,2] 2queue[1,1,3]
…queue[1,1,*]queue[1,2,*]queue[1,3,*]
…queue[1,*,*]queue[2,*,*]
queue[*,*,0] 2
SIROCCO 2015 Gadi Taubenfeld © 2015
17
Relaxing the peek operationObject Consensus number
queue[1,1,1]
queue[1,1,2] 2queue[1,1,3] 2
… 2queue[1,1,*] 2queue[1,2,*] 2queue[1,3,*] 2
… 2queue[1,*,*] 2queue[2,*,*] 2
2queue[*,*,0] 2
SIROCCO 2015 Gadi Taubenfeld © 2015
18
Relaxing the dequeue operation
SIROCCO 2015 Gadi Taubenfeld © 2015
19
Relaxing the dequeue operationObject Consensus number
queue[1,1,1], queue[1,0,1]
queue[1,1,2] 2queue[1,2,2]
…queue[1,*,2]queue[1,*,3]queue[1,*,4]
…queue[1,*,*]queue[2,*,*]
queue[*,*,0] 2SIROCCO 2015 Gadi Taubenfeld ©
2015
20
Relaxing the dequeue operationObject Consensus number
queue[1,1,1], queue[1,0,1]
queue[1,1,2] 2queue[1,2,2] 2
… 2queue[1,*,2] 2queue[1,*,3] 2queue[1,*,4] 2
… 2queue[1,*,*] 2queue[2,*,*] 2
2queue[*,*,0] 2
SIROCCO 2015 Gadi Taubenfeld © 2015
21
Not supporting the dequeue operationObject Consensus number
queue[1,1,1], queue[1,0,1]
queue[1,1,2] 2queue[1,0,2]queue[2,0,2]queue[3,0,2]
…queue[*,0,2]queue[0,0,2] 1
SIROCCO 2015 Gadi Taubenfeld © 2015
22
Not supporting the dequeue operationObject Consensus number
queue[1,1,1], queue[1,0,1]
queue[1,1,2] 2queue[1,0,2] 1queue[2,0,2]queue[3,0,2]
…queue[*,0,2]queue[0,0,2] 1
SIROCCO 2015 Gadi Taubenfeld © 2015
23
Not supporting the dequeue operationObject Consensus number
queue[1,1,1], queue[1,0,1]
queue[1,1,2] 2queue[1,0,2] 1queue[2,0,2] 1queue[3,0,2] 1
… 1queue[*,0,2] 1queue[0,0,2] 1
SIROCCO 2015 Gadi Taubenfeld © 2015
24
Atomic registers vs. relaxed queues
SIROCCO 2015 Gadi Taubenfeld © 2015
25
Atomic registers vs. relaxed queuesObject Consensus number
queue[1,1,1], queue[1,0,1]
queue[1,1,2] 2queue[1,0,2] 1queue[2,0,2] 1queue[3,0,2] 1
… 1queue[*,0,2] 1
Atomic registers 1
yes
???
Can atomic registers implement … ?
SIROCCO 2015 Gadi Taubenfeld © 2015
26
Atomic registers vs. relaxed queuesObject Consensus number
queue[1,1,1], queue[1,0,1]
queue[1,1,2] 2queue[1,0,2] 1queue[2,0,2] 1queue[3,0,2] 1
… 1queue[*,0,2] 1
Atomic registers 1
yes
No!!!
Theorem: A queue[a,0,c] has no wait-free implementation from atomic registers, for every two positive integers a and c.
SIROCCO 2015 Gadi Taubenfeld © 2015
27
Discussion Each one of the infinitely many relaxed objects
has one of the following consensus numbers: 1, 2, . Why only three?
Queue is more sensitive than stack to changes in its semantics.
Consider other types of relaxed data structures. What is the internal structure among relaxed
objects with the same consensus number? queue[1,1,0] + registers queue[1,1,2] ?
SIROCCO 2015 Gadi Taubenfeld © 2015
28
Thank you for listening
SIROCCO 2015 Gadi Taubenfeld © 2015