-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathlvish.cabal
310 lines (266 loc) · 10.3 KB
/
lvish.cabal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
-- Initial lvish.cabal generated by cabal init. For further
-- documentation, see http://haskell.org/cabal/users-guide/
-- The name of the package.
name: lvish
-- The package version. See the Haskell package versioning policy (PVP)
-- for standards guiding when and how versions should be incremented.
-- http://www.haskell.org/haskellwiki/Package_versioning_policy
-- PVP summary: +-+------- breaking API changes
-- | | +----- non-breaking API additions
-- | | | +--- code changes with no API change
version: 2.0.2.1
-- Changelog:
-- 0.2 -- switch SLMap over to O(1) freeze
-- 1.0 -- initial public release
-- 1.0.0.2 -- minor docs polishing
-- 1.0.0.4 -- Bugfix for runParThenFreeze 's' param (issue #26).
-- 1.0.0.6 -- tighten up dependencies; remove unused flags; very minor doc fixes.
-- 1.1.0.2 -- add verifyFiniteJoin
-- 1.1.0.3 -- expose BulkRetry prototype
-- 1.1.1.0 -- expose logging routines
-- 1.1.1.5 -- various bugfixes
-- 1.1.2 -- bugfixes and small additions, work-around for -fbeta problems
-- 1.1.3 -- add fromPureLVar
-- 1.1.4 -- add SatMap
-- 2.0 -- Major changes to all types to track effect signatures
-- 2.0.1 -- add Data.LVar.Internal.Pure.unsafeMonotonicHandlerHP
-- 2.0.2 -- add/expose SatMap copy, saturate, and forEachHP
synopsis: Parallel scheduler, LVar data structures, and infrastructure to build more.
description:
.
A programming model based on monotonically-growing concurrent data structures.
.
As a starting point, look at the main module, "Control.LVish", as well as one of these papers:
.
* FHPC 2013: /LVars: lattice-based data structures for deterministic parallelism/ (<http://dl.acm.org/citation.cfm?id=2502326>).
.
* POPL 2014: /Freeze after writing: quasi-deterministic parallel programming with LVars/ (<http://dl.acm.org/citation.cfm?id=2535842>).
.
* PLDI 2014: /Taming the Parallel Effect Zoo: Extensible Deterministic Parallelism with LVish/ (<http://www.cs.indiana.edu/~rrnewton/papers/effectzoo-draft.pdf>).
.
If the haddocks are not building, here is a mirror:
<http://www.cs.indiana.edu/~rrnewton/haddock/lvish/>
.
Change Log:
.
* 1.0.0.6 - tighten up dependencies; remove unused flags; very minor doc fixes.
.
* 1.1.2 - many bugfixes, plus a new logging infrastructure, and verification of finite lattices
license: BSD3
license-file: LICENSE
author: Aaron Turon, Lindsey Kuper, Ryan Newton
maintainer: lindsey@composition.al
category: Concurrency
build-type: Simple
-- Constraint on the version of Cabal needed to build this package.
cabal-version: >=1.8
flag debug
description: Activate additional debug assertions, and printed output.
-- if DEBUGLVL env var is set to 1 or higher.
default: False
manual: True
flag chaselev
description: Use the Chase-Lev work-stealing deque
default: True
manual: True
flag getonce
description: Ensure that continuations of get run at most once
(by using extra synchronization)
default: True
manual: True
flag useopt
description: Use optimization (O2). This is always good for LVish.
default: True
manual: True
flag threaded
description: Should the tests be threaded? Typically yes.
default: True
manual: True
flag nonidem
description: nonidempotent scheduler
default: True
manual: True
-- flag beta
-- description: These features are in beta and not fully supported yet.
-- default: True
Source-repository head
type: git
location: https://github.com/iu-parfunc/lvars
subdir: haskell/lvish
-- tag: release-lvish-1.0.0.6
--------------------------------------------------------------------------------
library
-- Modules exported by the library.
exposed-modules:
------------- End user modules ------------
Control.LVish
Control.LVish.DeepFrz
Data.LVar.Generic
Data.LVar.IVar
Data.LVar.IStructure
Data.LVar.PureSet
Data.LVar.PureMap
--Data.LVar.SatMap
--Data.LVar.LayeredSatMap
--Data.LVar.FiltSet
Data.LVar.SLSet
Data.LVar.SLMap
Data.LVar.Counter
--Data.LVar.MaxPosInt
--Data.LVar.NatArray
--Data.LVar.NatArray.Unsafe
--Data.LVar.Memo
Data.LVar.CtrieMap
-------------------------------------------
-- End users should NOT USE THESE.
-- These are only for developing new LVars:
Data.LVar.Internal.Pure
Data.LVar.Generic.Internal
Data.LVar.PureMap.Unsafe
Control.LVish.Internal
Control.LVish.DeepFrz.Internal
-- New / Experimental:
--Data.LVar.CycGraph
-- These are in "beta" and shouldn't be released yet:
-- Not quite ready for prime-time yet:
--Data.LVar.AddRemoveSet
--Data.LVar.PNCounter
-------------------------------------------
-- Package-internal and should not be exposed:
Control.LVish.Internal.SchedIdempotent
-- Internal.Data.Concurrent.LinkedMap
Data.UtilInternal
-- Internal modules included in this library but not exported:
other-modules:
Data.LVar.Pair
Data.Concurrent.Bag
Data.Concurrent.Counter
Data.Concurrent.SNZI
Data.Concurrent.AlignedIORef
Control.LVish.Internal.SchedUtils
Control.LVish.Internal.Types
Control.LVish.Internal.Basics
Control.LVish.Internal.Logical
-------------------------------------------
-- Unsafe, only for debugging:
Control.LVish.Internal.Unsafe
-- Other library packages from which modules are imported.
build-depends: base >= 4.6,
deepseq >= 1.3,
lattices >= 1.4,
vector >=0.10,
atomic-primops >= 0.7 && < 0.9,
pcg-random >= 0.1.3.4,
transformers,
ghc-prim,
async,
missing-foreign,
thread-local-storage >= 0.1.0.2,
-- Used in SLSet and SLMap
concurrent-skiplist >= 0.1 && < 0.2,
-- Used in CtrieMap
ctrie >= 0.1,
hashable
build-depends: containers >= 0.5.4.0
build-depends: par-classes >= 1.1 && < 2.0,
par-collections >= 1.1 && < 2.0,
tslogger >= 0.1.0.0
ghc-options: -rtsopts -Wall -fno-warn-orphans
if flag(useopt)
ghc-options: -O2
if flag(debug)
-- TEMP: depending on these for visualzing MemoCyc DAGs:
-- build-depends: fgl, graphviz, text
cpp-options: -DDEBUG_LVAR
-- cpp-options: -DDEBUG_MEMO
if flag(chaselev)
build-depends: chaselev-deque
cpp-options: -DCHASE_LEV
if flag(getonce)
cpp-options: -DGET_ONCE
if flag(nonidem)
cpp-options: -DNONIDEM
--------------------------------------------------------------------------------
test-suite test-lvish
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs: tests/
other-modules: TestHelpers,
TestHelpers2,
LVishAndIVar,
-- ArrayTests,
-- MemoTests,
LogicalTests,
PureMapTests,
-- SatMapTests,
-- LayeredSatMapTests,
SLMapTests,
CtrieMapTests,
SetTests,
-- MaxPosIntTests,
-- AddRemoveSetTests,
GenericTests,
SkipListTests
build-depends: lvish
build-depends: base >= 4.6
, containers >= 0.5
, vector >=0.10
, random
build-depends: par-classes >= 1.1 && < 2.0,
par-collections >= 1.1 && < 2.0,
concurrent-skiplist >= 0.1 && < 0.2,
ctrie >= 0.1
build-depends: tasty, tasty-hunit, tasty-th,
tasty-quickcheck > 0.2.4, QuickCheck,
HUnit, time, text, hashable
build-depends: tslogger >= 0.1.0.0
ghc-options: -Wall -fno-warn-orphans
-- For we duplicate these flag-dependent options:
if flag(useopt)
ghc-options: -O2
if flag(threaded)
ghc-options: -threaded -rtsopts -with-rtsopts=-N4
if flag(debug)
-- TEMP: depending on these for visualzing MemoCyc DAGs:
-- build-depends: fgl, graphviz, text
-- cpp-options: -DDEBUG_MEMO
cpp-options: -DDEBUG_LVAR
if flag(chaselev)
build-depends: chaselev-deque
cpp-options: -DCHASE_LEV
if flag(getonce)
cpp-options: -DGET_ONCE
if flag(nonidem)
cpp-options: -DNONIDEM
-- Atomic-primops fails when used by template-haskell/ghci on linux:
if impl(ghc < 7.7) && os(linux) {
buildable: False
}
benchmark bench-lvish
type: exitcode-stdio-1.0
main-is: Bench.hs
hs-source-dirs: tests/
build-depends: lvish
build-depends: base >= 4.6
, containers >= 0.5
, vector >=0.10
, random
, atomic-primops >= 0.7 && < 0.9
build-depends: par-classes >= 1.1 && < 2.0,
par-collections >= 1.1 && < 2.0
build-depends: criterion >= 1.0
ghc-options: -Wall -fno-warn-orphans
-- For we duplicate these flag-dependent options:
if flag(useopt)
ghc-options: -O2
if flag(threaded)
ghc-options: -threaded -rtsopts -with-rtsopts=-N4
if flag(debug)
cpp-options: -DDEBUG_LVAR
if flag(chaselev)
build-depends: chaselev-deque
cpp-options: -DCHASE_LEV
if flag(getonce)
cpp-options: -DGET_ONCE
if flag(nonidem)
cpp-options: -DNONIDEM