forked from AccelerateHS/accelerate
-
Notifications
You must be signed in to change notification settings - Fork 0
/
accelerate.cabal
591 lines (533 loc) · 19.7 KB
/
accelerate.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
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
Name: accelerate
Version: 1.3.0.0
Cabal-version: >= 1.18
Tested-with: GHC >= 7.10
Build-type: Custom
Synopsis: An embedded language for accelerated array processing
Description:
@Data.Array.Accelerate@ defines an embedded array language for computations
for high-performance computing in Haskell. Computations on multi-dimensional,
regular arrays are expressed in the form of parameterised collective
operations, such as maps, reductions, and permutations. These computations may
then be online compiled and executed on a range of architectures.
.
[/A simple example/]
.
As a simple example, consider the computation of a dot product of two vectors
of floating point numbers:
.
> dotp :: Acc (Vector Float) -> Acc (Vector Float) -> Acc (Scalar Float)
> dotp xs ys = fold (+) 0 (zipWith (*) xs ys)
.
Except for the type, this code is almost the same as the corresponding Haskell
code on lists of floats. The types indicate that the computation may be
online-compiled for performance - for example, using
@Data.Array.Accelerate.LLVM.PTX@ it may be on-the-fly off-loaded to the GPU.
.
See the "Data.Array.Accelerate" module for further information.
.
[/Additional components/]
.
The following supported add-ons are available as separate packages. Install
them from Hackage with @cabal install \<package\>@
.
* @accelerate-llvm-native@: Backend supporting parallel execution on
multicore CPUs.
.
* @accelerate-llvm-ptx@: Backend supporting parallel execution on
CUDA-capable NVIDIA GPUs. Requires a GPU with compute capability 2.0 or
greater. See the following table for supported GPUs:
<http://en.wikipedia.org/wiki/CUDA#Supported_GPUs>
.
* @accelerate-examples@: Computational kernels and applications showcasing
the use of Accelerate as well as a regression test suite, supporting
function and performance testing.
.
* @accelerate-io@: Fast conversions between Accelerate arrays and other
array formats (including vector and repa).
.
* @accelerate-fft@: Discrete Fourier transforms, with FFI bindings to
optimised implementations.
.
* @accelerate-bignum@: Fixed-width large integer arithmetic.
.
* @colour-accelerate@: Colour representations in Accelerate (RGB, sRGB, HSV,
and HSL).
.
* @gloss-accelerate@: Generate gloss pictures from Accelerate.
.
* @gloss-raster-accelerate@: Parallel rendering of raster images and
animations.
.
* @lens-accelerate@: Lens operators for Accelerate types.
.
* @linear-accelerate@: Linear vector spaces in Accelerate.
.
* @mwc-random-accelerate@: Generate Accelerate arrays filled with high
quality pseudorandom numbers.
.
[/Examples and documentation/]
.
Haddock documentation is included in the package
.
The @accelerate-examples@ package demonstrates a range of computational
kernels and several complete applications, including:
.
* An implementation of the Canny edge detection algorithm
.
* An interactive Mandelbrot set generator
.
* A particle-based simulation of stable fluid flows
.
* An /n/-body simulation of gravitational attraction between solid particles
.
* An implementation of the PageRank algorithm
.
* A simple interactive ray tracer
.
* A cellular automata simulation
.
* A \"password recovery\" tool, for dictionary lookup of MD5 hashes
.
@lulesh-accelerate@ is an implementation of the Livermore Unstructured
Lagrangian Explicit Shock Hydrodynamics (LULESH) mini-app. LULESH represents a
typical hydrodynamics code such as ALE3D, but is highly simplified and
hard-coded to solve the Sedov blast problem on an unstructured hexahedron
mesh.
.
[/Mailing list and contacts/]
.
* Mailing list: <[email protected]> (discussion of both
use and development welcome).
.
* Sign up for the mailing list here:
<http://groups.google.com/group/accelerate-haskell>
.
* Bug reports and issue tracking:
<https://github.com/AccelerateHS/accelerate/issues>
.
License: BSD3
License-file: LICENSE
Author: Manuel M T Chakravarty,
Robert Clifton-Everest,
Gabriele Keller,
Ben Lever,
Trevor L. McDonell,
Ryan Newtown,
Sean Seefried
Maintainer: Trevor L. McDonell <[email protected]>
Homepage: https://github.com/AccelerateHS/accelerate/
Bug-reports: https://github.com/AccelerateHS/accelerate/issues
Category: Compilers/Interpreters, Concurrency, Data, Parallelism
Stability: Experimental
Extra-source-files:
README.md
CHANGELOG.md
Extra-doc-files:
images/*.png
custom-setup
setup-depends:
base >= 4.7
, Cabal
, cabal-doctest >= 1.0
Flag debug
Default: False
Description:
Enable debug tracing messages. The following options are read from the
environment variable @ACCELERATE_FLAGS@, and via the command-line as:
.
> ./program +ACC ... -ACC
.
Note that a backend may not implement (or be applicable to) all options.
.
The following flags control phases of the compiler. The are enabled with
@-f\<flag\>@ and can be reveresed with @-fno-\<flag\>@:
.
* @acc-sharing@: Enable sharing recovery of array expressions (True).
.
* @exp-sharing@: Enable sharing recovery of scalar expressions (True).
.
* @fusion@: Enable array fusion (True).
.
* @simplify@: Enable program simplification phase (True).
.
* @flush-cache@: Clear any persistent caches on program startup (False).
.
* @force-recomp@: Force recompilation of array programs (False).
.
* @fast-math@: Allow algebraically equivalent transformations which may
change floating point results (e.g., reassociate) (True).
.
The following options control debug message output, and are enabled with
@-d\<flag\>@.
.
* @verbose@: Be extra chatty.
.
* @dump-phases@: Print timing information about each phase of the compiler.
Enable GC stats (@+RTS -t@ or otherwise) for memory usage information.
.
* @dump-sharing@: Print information related to sharing recovery.
.
* @dump-simpl-stats@: Print statistics related to fusion & simplification.
.
* @dump-simpl-iterations@: Print a summary after each simplifier iteration.
.
* @dump-vectorisation@: Print information related to the vectoriser.
.
* @dump-dot@: Generate a representation of the program graph in Graphviz
DOT format.
.
* @dump-simpl-dot@: Generate a more compact representation of the program
graph in Graphviz DOT format. In particular, scalar expressions are
elided.
.
* @dump-gc@: Print information related to the Accelerate garbage
collector.
.
* @dump-gc-stats@: Print aggregate garbage collection information at the
end of program execution.
.
* @dubug-cc@: Include debug symbols in the generated and compiled kernels.
.
* @dump-cc@: Print information related to kernel code
generation/compilation. Print the generated code if @verbose@.
.
* @dump-ld@: Print information related to runtime linking.
.
* @dump-asm@: Print information related to kernel assembly. Print the
assembled code if @verbose@.
.
* @dump-exec@: Print information related to program execution.
.
* @dump-sched@: Print information related to execution scheduling.
.
Flag ekg
Default: False
Description:
Enable hooks for monitoring the running application using EKG. Implies
@debug@ mode. In order to view the metrics, your application will need to
call @Data.Array.Accelerate.Debug.beginMonitoring@ before running any
Accelerate computations. This will launch the server on the local machine at
port 8000.
.
Alternatively, if you wish to configure the EKG monitoring server you can
initialise it like so:
.
> import Data.Array.Accelerate.Debug
>
> import System.Metrics
> import System.Remote.Monitoring
>
> main :: IO ()
> main = do
> store <- initAccMetrics
> registerGcMetrics store -- optional
>
> server <- forkServerWith store "localhost" 8000
>
> ...
.
Note that, as with any program utilising EKG, in order to collect Haskell GC
statistics, you must either run the program with:
.
> +RTS -T -RTS
.
or compile it with:
.
> -with-rtsopts=-T
.
Flag bounds-checks
Description: Enable bounds checking
Default: True
Flag unsafe-checks
Description: Enable bounds checking in unsafe operations
Default: False
Flag internal-checks
Description: Enable internal consistency checks
Default: False
Flag nofib
Default: True
Description:
You can disable building the nofib test suite with this flag. Disabling this
is an unsupported configuration, but is useful for accelerating builds.
Library
Build-depends:
base >= 4.7 && < 4.12
, ansi-terminal >= 0.6.2
, ansi-wl-pprint >= 0.6
, base-orphans >= 0.3
, bytestring >= 0.10.2
, containers >= 0.3
, constraints >= 0.9
, cryptonite >= 0.21
, deepseq >= 1.3
, directory >= 1.0
, exceptions >= 0.6
, filepath >= 1.0
, ghc-prim
, half >= 0.3
, hashable >= 1.1
, hashtables >= 1.2.3
, hedgehog >= 0.5
, lens >= 4.0
, mtl >= 2.0
, tasty >= 0.11
, tasty-expected-failure >= 0.11
, tasty-hedgehog >= 0.1
, tasty-hunit >= 0.9
, template-haskell
, terminal-size >= 0.3
, transformers >= 0.3
, unique
, unordered-containers >= 0.2
, vector >= 0.10
Exposed-modules:
-- The core language and reference implementation
Data.Array.Accelerate
Data.Array.Accelerate.Interpreter
-- Prelude-like
Data.Array.Accelerate.Data.Bits
Data.Array.Accelerate.Data.Complex
Data.Array.Accelerate.Data.Either
Data.Array.Accelerate.Data.Fold
Data.Array.Accelerate.Data.Functor
Data.Array.Accelerate.Data.Maybe
Data.Array.Accelerate.Data.Monoid
Data.Array.Accelerate.Unsafe
-- For backend development (hidden)
Data.Array.Accelerate.AST
Data.Array.Accelerate.Analysis.Hash
Data.Array.Accelerate.Analysis.Match
Data.Array.Accelerate.Analysis.Shape
Data.Array.Accelerate.Analysis.Stencil
Data.Array.Accelerate.Analysis.Type
Data.Array.Accelerate.Array.Data
Data.Array.Accelerate.Array.Remote
Data.Array.Accelerate.Array.Remote.Class
Data.Array.Accelerate.Array.Remote.LRU
Data.Array.Accelerate.Array.Remote.Table
Data.Array.Accelerate.Array.Representation
Data.Array.Accelerate.Array.Sugar
Data.Array.Accelerate.Array.Unique
Data.Array.Accelerate.Async
Data.Array.Accelerate.Debug
Data.Array.Accelerate.Error
Data.Array.Accelerate.Lifetime
Data.Array.Accelerate.Pretty
Data.Array.Accelerate.Product
Data.Array.Accelerate.Smart
Data.Array.Accelerate.Trafo
Data.Array.Accelerate.Type
-- For using the classes to handle variable arity functions
Data.Array.Accelerate.Trafo.Sharing
-- For testing
Data.Array.Accelerate.Test.NoFib
Data.Array.Accelerate.Test.Similar
Other-modules:
Data.Atomic
Data.Array.Accelerate.Analysis.Hash.TH
Data.Array.Accelerate.Array.Lifted
Data.Array.Accelerate.Array.Remote.Nursery
Data.Array.Accelerate.Classes
Data.Array.Accelerate.Classes.Bounded
Data.Array.Accelerate.Classes.Enum
Data.Array.Accelerate.Classes.Eq
Data.Array.Accelerate.Classes.Floating
Data.Array.Accelerate.Classes.Fractional
Data.Array.Accelerate.Classes.FromIntegral
Data.Array.Accelerate.Classes.Integral
Data.Array.Accelerate.Classes.Num
Data.Array.Accelerate.Classes.Ord
Data.Array.Accelerate.Classes.Real
Data.Array.Accelerate.Classes.RealFloat
Data.Array.Accelerate.Classes.RealFrac
Data.Array.Accelerate.Classes.ToFloating
Data.Array.Accelerate.Debug.Flags
Data.Array.Accelerate.Debug.Monitoring
Data.Array.Accelerate.Debug.Stats
Data.Array.Accelerate.Debug.Timed
Data.Array.Accelerate.Debug.Trace
Data.Array.Accelerate.Language
Data.Array.Accelerate.Lift
Data.Array.Accelerate.Prelude
Data.Array.Accelerate.Pretty.Graphviz
Data.Array.Accelerate.Pretty.Graphviz.Monad
Data.Array.Accelerate.Pretty.Graphviz.Type
Data.Array.Accelerate.Pretty.Print
Data.Array.Accelerate.Trafo.Algebra
Data.Array.Accelerate.Trafo.Base
Data.Array.Accelerate.Trafo.Fusion
Data.Array.Accelerate.Trafo.Rewrite
Data.Array.Accelerate.Trafo.Shrink
Data.Array.Accelerate.Trafo.Simplify
Data.Array.Accelerate.Trafo.Substitution
-- Data.Array.Accelerate.Trafo.Vectorise
-- nofib test suite
Data.Array.Accelerate.Test.NoFib.Base
Data.Array.Accelerate.Test.NoFib.Config
if flag(nofib)
-- build-depends:
-- , pipes >= 4.1.6 -- #286
other-modules:
Data.Array.Accelerate.Test.NoFib.Sharing
Data.Array.Accelerate.Test.NoFib.Prelude
Data.Array.Accelerate.Test.NoFib.Prelude.Map
Data.Array.Accelerate.Test.NoFib.Prelude.ZipWith
Data.Array.Accelerate.Test.NoFib.Prelude.Fold
Data.Array.Accelerate.Test.NoFib.Prelude.Scan
Data.Array.Accelerate.Test.NoFib.Prelude.Backpermute
Data.Array.Accelerate.Test.NoFib.Prelude.Permute
Data.Array.Accelerate.Test.NoFib.Prelude.Filter
Data.Array.Accelerate.Test.NoFib.Prelude.Stencil
Data.Array.Accelerate.Test.NoFib.Imaginary
Data.Array.Accelerate.Test.NoFib.Imaginary.DotP
Data.Array.Accelerate.Test.NoFib.Imaginary.SASUM
Data.Array.Accelerate.Test.NoFib.Imaginary.SAXPY
Data.Array.Accelerate.Test.NoFib.Spectral
Data.Array.Accelerate.Test.NoFib.Spectral.SMVM
Data.Array.Accelerate.Test.NoFib.Spectral.RadixSort
Data.Array.Accelerate.Test.NoFib.Spectral.BlackScholes
Data.Array.Accelerate.Test.NoFib.Issues
Data.Array.Accelerate.Test.NoFib.Issues.Issue93
Data.Array.Accelerate.Test.NoFib.Issues.Issue102
Data.Array.Accelerate.Test.NoFib.Issues.Issue114
Data.Array.Accelerate.Test.NoFib.Issues.Issue119
Data.Array.Accelerate.Test.NoFib.Issues.Issue123
Data.Array.Accelerate.Test.NoFib.Issues.Issue137
Data.Array.Accelerate.Test.NoFib.Issues.Issue168
Data.Array.Accelerate.Test.NoFib.Issues.Issue184
Data.Array.Accelerate.Test.NoFib.Issues.Issue185
Data.Array.Accelerate.Test.NoFib.Issues.Issue187
Data.Array.Accelerate.Test.NoFib.Issues.Issue228
Data.Array.Accelerate.Test.NoFib.Issues.Issue255
Data.Array.Accelerate.Test.NoFib.Issues.Issue264
-- Data.Array.Accelerate.Test.NoFib.Issues.Issue286
Data.Array.Accelerate.Test.NoFib.Issues.Issue287
Data.Array.Accelerate.Test.NoFib.Issues.Issue288
Data.Array.Accelerate.Test.NoFib.Issues.Issue362
Data.Array.Accelerate.Test.NoFib.Issues.Issue407
Data.Array.Accelerate.Test.NoFib.Issues.Issue409
else
cpp-options:
-DACCELERATE_DISABLE_NOFIB
if impl(ghc >= 8.0)
exposed-modules:
Data.Array.Accelerate.Data.Semigroup
default-language:
Haskell2010
hs-source-dirs:
src
c-sources:
cbits/atomic.c
cbits/clock.c
if flag(debug) || flag(ekg)
ghc-options:
-optc-DACCELERATE_DEBUG
cpp-options:
-DACCELERATE_DEBUG
-- Weird handling of C files because Cabal is not recompile C files on
-- changes to cc-options: <https://github.com/haskell/cabal/issues/4937>
c-sources:
cbits/flags_debug.c
cbits/monitoring_debug.c
else
c-sources:
cbits/flags.c
cbits/monitoring.c
if flag(ekg)
cpp-options:
-DACCELERATE_MONITORING
build-depends:
async >= 2.0
, ekg >= 0.1
, ekg-core >= 0.1
, text >= 1.0
if flag(bounds-checks)
cpp-options:
-DACCELERATE_BOUNDS_CHECKS
if flag(unsafe-checks)
cpp-options:
-DACCELERATE_UNSAFE_CHECKS
if flag(internal-checks)
cpp-options:
-DACCELERATE_INTERNAL_CHECKS
if os(windows)
cpp-options: -DWIN32
build-depends: Win32
else
cpp-options: -DUNIX
build-depends: unix
cc-options:
-O3
-Wall
ghc-options:
-O2
-Wall
-funbox-strict-fields
-fno-warn-name-shadowing
ghc-prof-options:
-caf-all
-auto-all
if impl(ghc >= 7.0)
ghc-options:
-fspec-constr-count=25
if impl(ghc == 7.*)
ghc-options:
-fcontext-stack=35
if impl(ghc >= 8.0)
ghc-options:
-Wcompat
-freduction-depth=35
if impl(ghc < 7.10)
build-depends:
th-lift-instances >= 0.1
-- Don't add the extensions list here. Instead, place individual LANGUAGE
-- pragmas in the files that require a specific extension. This means the
-- project loads in GHCi, and avoids extension clashes.
--
-- Extensions:
test-suite doctest
type: exitcode-stdio-1.0
default-language: Haskell2010
hs-source-dirs: test/doctest
main-is: Main.hs
build-depends:
base >= 4.7
, accelerate
, doctest >= 0.11
ghc-options:
-Wall
-threaded
-rtsopts
-- older ghc does not support the dimension-specialised show instances for
-- arrays, which the doctests use
if impl(ghc < 7.10)
buildable: False
-- doctest only supports a single x-doctest-options line
if impl(ghc == 7.*)
x-doctest-options: -fspec-constr-count=25 -fcontext-stack=35
if impl(ghc >= 8.0)
x-doctest-options: -fspec-constr-count=25 -freduction-depth=35
test-suite nofib-interpreter
type: exitcode-stdio-1.0
default-language: Haskell2010
hs-source-dirs: test/nofib
main-is: Main.hs
build-depends:
base >= 4.7
, accelerate
ghc-options:
-O2
-Wall
-threaded
-rtsopts
-with-rtsopts=-A128M
-with-rtsopts=-n4M
source-repository head
Type: git
Location: git://github.com/AccelerateHS/accelerate.git
source-repository this
Type: git
Tag: v1.3.0.0
Location: git://github.com/AccelerateHS/accelerate.git
-- vim: nospell