Skip to content

Commit c457c65

Browse files
committed
Add list of data structures
1 parent 1b624c9 commit c457c65

27 files changed

+345
-194
lines changed

README.md

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,43 @@
11
# Scal
22

3-
The Scal framework provides implementations and benchmarks for concurrent
4-
objects. The benchmarks show the trade-off between concurrent data structure
5-
semantics and scalability.
63

7-
Homepage: http://scal.cs.uni-salzburg.at
4+
Scal is an open-source benchmarking framework that provides (1) software infrastructure for executing concurrent data structure algorithms, (2) workloads for benchmarking their performance and scalability, and (3) implementations of a large set of concurrent data structures.
5+
6+
Homepage: http://scal.cs.uni-salzburg.at <br>
7+
Paper: [Scal: A Benchmarking Suite for Concurrent Data Structures](./paper.pdf)
8+
9+
10+
## Data structures
11+
12+
| Name | Semantics | Year | Ref |
13+
|-----------|:-----:|:-----:|:-----:|
14+
[Lock-based Singly-linked List Queue](./src/datastructures/lockbased_queue.h) | strict queue | 1968 | [[1]](#ref-knuth-1997)
15+
[Michael Scott (MS) Queue](./src/datastructures/ms_queue.h) | strict queue | 1996 | [[2]](#ref-michael-1996)
16+
[Flat Combining Queue](./src/datastructures/flatcombining_queue.h) | strict queue | 2010 | [[3]](#ref-hendler-2010)
17+
[Wait-free Queue](./src/datastructures/wf_queue_ppopp12.h) | strict queue | 2012 | [[4]](#ref-kogan-2012)
18+
[Linked Cyclic Ring Queue (LCRQ)](./src/datastructures/lcrq.h) | strict queue | 2013 | [[5]](#ref-morrison-2013)
19+
[Timestamped (TS) Queue](./src/datastructures/ts_queue.h) | strict queue | 2015 | [[6]](#ref-dodds-2015)
20+
[Cooperative TS Queue](./src/datastructures/cts_queue.h) | strict queue | 2015 | [[7]](#ref-haas-2015-1)
21+
[Segment Queue](./src/datastructures/segment_queue.h) | k-relaxed queue | 2010 | [[8]](#ref-afek-2010)
22+
[Random Dequeue (RD) Queue](./src/datastructures/random_dequeue_queue.h) | k-relaxed queue | 2010 | [[8]](#ref-afek-2010)
23+
[Bounded Size k-FIFO Queue](./src/datastructures/boundedsize_kfifo.h) | k-relaxed queue, pool | 2013 | [[9]](#ref-kirsch-2013)
24+
[Unbounded Size k-FIFO Queue](./src/datastructures/unboundedsize_kfifo.h) | k-relaxed queue, pool | 2013 | [[9]](#ref-kirsch-2013)
25+
[b-RR](./src/datastructures/balancer_partrr.h) [Distributed](./src/datastructures/distributed_data_structure.h) [Queue (DQ)](./src/datastructures/ms_queue.h) | k-relaxed queue, pool | 2013 | [[10]](#ref-haas-2013)
26+
Least-Recently-Used (LRU) DQ | k-relaxed queue, pool | 2013 | [[10]](#ref-haas-2013)
27+
[Locally Linearizable](./src/datastructures/balancer_local_linearizability.h) [DQ](./src/datastructures/ms_queue.h) <br>([static](./src/datastructures/distributed_data_structure.h), [dynamic](./src/datastructures/dyn_distributed_data_structure.h)) | locally linearizable queue, pool | 2015 | [[11]](#ref-haas-2015-2)
28+
[Locally Linearizable k-FIFO Queue](./src/datastructures/unboundedsize_kfifo.h) | locally linearizable queue <br> k-relaxed queue, pool | 2015 | [[11]](#ref-haas-2015-2)
29+
[Relaxed TS Queue](./src/datastructures/rts_queue.h) | quiescently consistent <br> queue (conjectured) | 2015 | [[7]](#ref-haas-2015-1)
30+
[Lock-based Singly-linked List Stack](scal/src/datastructures/lockbased_stack.h) | strict stack | 1968 | [[1]](#ref-knuth-1997)
31+
[Treiber Stack](./src/datastructures/treiber_stack.h) | strict stack | 1986 | [[12]](#ref-treiber-1986)
32+
[Elimination-backoff Stack](./src/datastructures/elimination_backoff_stack.h) | strict stack | 2004 | [[13]](#ref-hendler-2004)
33+
[Timestamped (TS) Stack](./src/datastructures/ts_stack.h) | strict stack | 2015 | [[6]](#ref-dodds-2015)
34+
[k-Stack](./src/datastructures/kstack.h) | k-relaxed stack | 2013 | [[14]](#ref-henzinger-2013)
35+
[b-RR](./src/datastructures/balancer_partrr.h) [Distributed](./src/datastructures/distributed_data_structure.h) [Stack (DS)](./src/datastructures/treiber_stack.h) | k-relaxed stack, pool | 2013 | [[10]](#ref-haas-2013)
36+
Least-Recently-Used (LRU) DS | k-relaxed stack, pool | 2013 | [[10]](#ref-haas-2013)
37+
[Locally Linearizable](./src/datastructures/balancer_local_linearizability.h) [DS](./src/datastructures/treiber_stack.h) <br>([static](./src/datastructures/distributed_data_structure.h), [dynamic](./src/datastructures/dyn_distributed_data_structure.h)) | locally linearizable stack, pool | 2015 | [[11]](#ref-haas-2015-2)
38+
[Locally Linearizable k-Stack](./src/datastructures/kstack.h) | locally linearizable stack <br> k-relaxed queue, pool | 2015 | [[11]](#ref-haas-2015-2)
39+
[Timestamped (TS) Deque](./src/datastructures/ts_deque.h) | strict deque (conjectured) | 2015 | [[7]](#ref-haas-2015-1)
40+
[d-RA](./src/datastructures/balancer_1random.h) [DQ](./src/datastructures/ms_queue.h) and [DS](./src/datastructures/treiber_stack.h) | strict pool | 2013 | [[10]](#ref-haas-2013)
841

942
## Dependencies
1043

@@ -73,6 +106,38 @@ And for Distributed Queue with a 1-random balancer:
73106

74107
Try `./prodcon-<data_structure> --help` to see the full list of available parameters.
75108

109+
110+
## References
111+
112+
1. <a name="ref-knuth-1997"></a>D. E. Knuth. *The Art of Computer Programming, Volume 1 (3rd Ed.): Fundamental Algorithms.* Addison Wesley, Redwood City, CA, USA, 1997.
113+
114+
2. <a name="ref-michael-1996"></a>M.M. Michael and M.L. Scott. Simple, fast, and practical non-blocking and blocking concurrent queue algorithms. In *Proc. Symposium on Principles of Distributed Computing (PODC)*, pages 267–275. ACM, 1996.
115+
116+
3. <a name="ref-hendler-2010"></a>D. Hendler, I. Incze, N. Shavit, and M. Tzafrir. Flat combining and the synchronization-parallelism tradeoff. In *Proc. Symposium on Parallelism in Algorithms and Architectures (SPAA)*, pages 355–364. ACM, 2010.
117+
118+
4. <a name="ref-kogan-2012"></a>A. Kogan and E. Petrank. A methodology for creating fast wait-free data structures. In *Proc. Symposium on Principles and Practice of Parallel Programming (PPoPP)*, pages 141–150. ACM, 2012.
119+
120+
5. <a name="ref-morrison-2013"></a>A. Morrison and Y. Afek. Fast concurrent queues for x86 processors. In *Proc. Symposium on Principles and Practice of Parallel Programming (PPoPP)*, pages 103–112. ACM, 2013.
121+
122+
6. <a name="ref-dodds-2015"></a>M. Dodds, A. Haas, and C.M. Kirsch. A scalable, correct time-stamped stack. In *Proc. Symposium on Principles of Programming Languages (POPL)*, pages 233– 246. ACM, 2015.
123+
124+
7. <a name="ref-haas-2015-1"></a>A. Haas. *Fast Concurrent Data Structures Through Timestamping.* PhD thesis, University of Salzburg, Salzburg, Austria, 2015.
125+
126+
8. <a name="ref-afek-2010"></a>Y. Afek, G. Korland, and E. Yanovsky. Quasi-linearizability: Relaxed consistency for improved concurrency. In *Proc. Conference on Principles of Distributed Systems (OPODIS)*, pages 395–410. Springer, 2010.
127+
128+
9. <a name="ref-kirsch-2013"></a>C.M. Kirsch, M. Lippautz, and H. Payer. Fast and scalable, lock-free k-fifo queues. In *Proc. International Conference on Parallel Computing Technologies (PaCT)*, LNCS, pages 208–223. Springer, 2013.
129+
130+
10. <a name="ref-haas-2013"></a>A. Haas, T.A. Henzinger, C.M. Kirsch, M. Lippautz, H. Payer, A. Sezgin, and A. Sokolova. Distributed queues in shared memory—multicore performance and scalability through quantitative relaxation. In *Proc. International Conference on Computing Frontiers (CF)*. ACM, 2013.
131+
132+
11. <a name="ref-haas-2015-2"></a>A. Haas, T.A. Henzinger, A.Holzer, C.M. Kirsch, M. Lippautz, H. Payer, A. Sezgin, A. Sokolova, and H. Veith. Local linearizability. *CoRR*, abs/1502.07118, 2015.
133+
134+
12. <a name="ref-treiber-1986"></a>R.K. Treiber. Systems programming: Coping with parallelism. Technical Report RJ-5118, IBM Research Center, 1986.
135+
136+
13. <a name="ref-hendler-2004"></a>D. Hendler, N. Shavit, and L. Yerushalmi. A scalable lock-free stack algorithm. In *Proc. Symposium on Parallelism in Algorithms and Architectures (SPAA)*, pages 206–215. ACM, 2004.
137+
138+
14. <a name="ref-henzinger-2013"></a>T.A. Henzinger, C.M. Kirsch, H. Payer, A. Sezgin, and A. Sokolova. Quantitative relaxation of concurrent data structures. In *Proc. Symposium on Principles of Programming Languages (POPL)*, pages 317–328. ACM, 2013.
139+
140+
76141
## License
77142

78143
Copyright (c) 2012-2013, the Scal Project Authors.

glue.gypi

Lines changed: 49 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -33,24 +33,31 @@
3333
],
3434
},
3535
{
36-
'target_name': 'dq-1random-ms',
36+
'target_name': 'dds-1random-ms',
3737
'type': 'static_library',
3838
'sources': [
39-
'src/benchmark/std_glue/glue_dq_1random_ms.cc'
39+
'src/benchmark/std_glue/glue_dds_1random_ms.cc'
4040
],
4141
},
4242
{
43-
'target_name': 'dq-1random-treiber',
43+
'target_name': 'dds-1random-treiber',
4444
'type': 'static_library',
4545
'sources': [
46-
'src/benchmark/std_glue/glue_dq_1random_treiber.cc'
46+
'src/benchmark/std_glue/glue_dds_1random_treiber.cc'
4747
],
4848
},
4949
{
50-
'target_name': 'dq-partrr-ms',
50+
'target_name': 'dds-partrr-ms',
5151
'type': 'static_library',
5252
'sources': [
53-
'src/benchmark/std_glue/glue_dq_partrr_ms.cc'
53+
'src/benchmark/std_glue/glue_dds_partrr_ms.cc'
54+
],
55+
},
56+
{
57+
'target_name': 'dds-partrr-treiber',
58+
'type': 'static_library',
59+
'sources': [
60+
'src/benchmark/std_glue/glue_dds_partrr_treiber.cc'
5461
],
5562
},
5663
{
@@ -82,96 +89,96 @@
8289
],
8390
},
8491
{
85-
'target_name': 'bs-kfifo',
92+
'target_name': 'll-us-kfifo',
8693
'type': 'static_library',
94+
'cflags': [ '-DLOCALLY_LINEARIZABLE' ],
8795
'sources': [
88-
'src/benchmark/std_glue/glue_bskfifo.cc'
96+
'src/benchmark/std_glue/glue_uskfifo.cc'
8997
],
9098
},
9199
{
92-
'target_name': 'll-us-kfifo',
100+
'target_name': 'bs-kfifo',
93101
'type': 'static_library',
94-
'cflags': [ '-DLOCALLY_LINEARIZABLE' ],
95102
'sources': [
96-
'src/benchmark/std_glue/glue_uskfifo.cc'
103+
'src/benchmark/std_glue/glue_bskfifo.cc'
97104
],
98105
},
99106
{
100-
'target_name': 'll-dq-ms',
107+
'target_name': 'll-dds-ms',
101108
'type': 'static_library',
102109
'defines': [ 'GET_TRY_LOCAL_FIRST' ],
103110
'sources': [
104-
'src/benchmark/std_glue/glue_ll_dq_ms.cc'
111+
'src/benchmark/std_glue/glue_ll_dds_ms.cc'
105112
],
106113
},
107114
{
108-
'target_name': 'll-dq-treiber',
115+
'target_name': 'll-dds-treiber',
109116
'type': 'static_library',
110117
'defines': [ 'GET_TRY_LOCAL_FIRST' ],
111118
'sources': [
112-
'src/benchmark/std_glue/glue_ll_dq_treiber.cc'
119+
'src/benchmark/std_glue/glue_ll_dds_treiber.cc'
113120
],
114121
},
115122
{
116-
'target_name': 'll-dq-ms-nonlinempty',
123+
'target_name': 'll-dds-ms-nonlinempty',
117124
'type': 'static_library',
118125
'defines': [
119126
'BACKEND_MS_QUEUE',
120127
'BALANCER_LL',
121128
'NON_LINEARIZABLE_EMPTY'
122129
],
123130
'sources': [
124-
'src/benchmark/std_glue/glue_dq.cc'
131+
'src/benchmark/std_glue/glue_dds.cc'
125132
],
126133
},
127134
{
128-
'target_name': 'll-dq-treiber-nonlinempty',
135+
'target_name': 'll-dds-treiber-nonlinempty',
129136
'type': 'static_library',
130137
'defines': [
131138
'BACKEND_TREIBER',
132139
'BALANCER_LL',
133140
'NON_LINEARIZABLE_EMPTY'
134141
],
135142
'sources': [
136-
'src/benchmark/std_glue/glue_dq.cc'
143+
'src/benchmark/std_glue/glue_dds.cc'
137144
],
138145
},
139146
{
140-
'target_name': 'll-dyn-dq-ms-nonlinempty',
147+
'target_name': 'll-dyn-dds-ms-nonlinempty',
141148
'type': 'static_library',
142149
'defines': [
143150
'BACKEND_MS_QUEUE',
144151
'NON_LINEARIZABLE_EMPTY'
145152
],
146153
'sources': [
147-
'src/benchmark/std_glue/glue_dyn_dq.cc'
154+
'src/benchmark/std_glue/glue_dyn_dds.cc'
148155
],
149156
},
150157
{
151-
'target_name': 'll-dyn-dq-treiber-nonlinempty',
158+
'target_name': 'll-dyn-dds-treiber-nonlinempty',
152159
'type': 'static_library',
153160
'defines': [
154161
'BACKEND_TREIBER',
155162
'NON_LINEARIZABLE_EMPTY'
156163
],
157164
'sources': [
158-
'src/benchmark/std_glue/glue_dyn_dq.cc'
165+
'src/benchmark/std_glue/glue_dyn_dds.cc'
159166
],
160167
},
161168
{
162-
'target_name': 'll-dyn-dq-ms',
169+
'target_name': 'll-dyn-dds-ms',
163170
'type': 'static_library',
164171
'cflags': [ ],
165172
'sources': [
166-
'src/benchmark/std_glue/glue_ll_dyn_dq_ms.cc'
173+
'src/benchmark/std_glue/glue_ll_dyn_dds_ms.cc'
167174
],
168175
},
169176
{
170-
'target_name': 'll-dyn-dq-treiber',
177+
'target_name': 'll-dyn-dds-treiber',
171178
'type': 'static_library',
172179
'cflags': [ ],
173180
'sources': [
174-
'src/benchmark/std_glue/glue_ll_dyn_dq_treiber.cc'
181+
'src/benchmark/std_glue/glue_ll_dyn_dds_treiber.cc'
175182
],
176183
},
177184
{
@@ -192,6 +199,13 @@
192199
'src/benchmark/std_glue/glue_lb_stack.cc'
193200
],
194201
},
202+
{
203+
'target_name': 'lb-queue',
204+
'type': 'static_library',
205+
'sources': [
206+
'src/benchmark/std_glue/glue_lb_queue.cc'
207+
],
208+
},
195209
{
196210
'target_name': 'hc-ts-cas-stack',
197211
'type': 'static_library',
@@ -333,6 +347,14 @@
333347
'sources': [
334348
'src/benchmark/std_glue/glue_eb_stack.cc'
335349
],
350+
},
351+
{
352+
'target_name': 'wf-queue',
353+
'type': 'static_library',
354+
'cflags': [ ],
355+
'sources': [
356+
'src/benchmark/std_glue/glue_wf_ppopp12.cc'
357+
],
336358
}
337359
]
338360
}

paper.pdf

223 KB
Binary file not shown.

0 commit comments

Comments
 (0)