packages feed

accelerate-1.3.0.0: accelerate.cabal

name:                   accelerate
version:                1.3.0.0
cabal-version:          1.18
tested-with:            GHC >= 8.6
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
      demonstrating the use of Accelerate.
  .
    * @accelerate-io*@: Fast conversions between Accelerate arrays and other
      array and data formats.
  .
    * @accelerate-fft@: Discrete Fourier transforms, with FFI bindings to
      optimised implementations.
  .
    * @accelerate-blas@: Numeric linear algebra, with FFI bindings to optimised
      implementations.
  .
    * @accelerate-bignum@: Fixed-width large integer arithmetic.
  .
    * @containers-accelerate@: Container types for use with Accelerate.
  .
    * @hashable-accelerate@: Class for types which can be converted to a hash
      value.
  .
    * @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
  .
    * Interactive Mandelbrot and Julia set generators
  .
    * 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/]
  .
    * Gitter chat: <https://gitter.im/AccelerateHS/Lobby>
  .
    * Mailing list: <accelerate-haskell@googlegroups.com> (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:                 The Accelerate Team
maintainer:             Trevor L. McDonell <trevor.mcdonell@gmail.com>
homepage:               https://github.com/AccelerateHS/accelerate/
bug-reports:            https://github.com/AccelerateHS/accelerate/issues

category:               Accelerate, Compilers/Interpreters, Concurrency, Data, Parallelism
stability:              Experimental

extra-source-files:
    README.md
    CHANGELOG.md
    cbits/*.c
    cbits/*.h

extra-doc-files:
    images/*.png

custom-setup
  setup-depends:
      base              >= 4.10
    , 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).
    .
      * @inplace@: Enable in-place array updates (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).
    .
      * @fast-permute-const@: Allow non-atomic `permute const` for product types
        (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

-- Enabling this drastically increases build times
-- See: https://gitlab.haskell.org/ghc/ghc/issues/15751
flag nofib
  default:              False
  description:          Build the nofib test suite (required for backend testing)

library
  build-depends:
          base                          >= 4.12 && < 4.15
        , ansi-terminal                 >= 0.6.2
        , base-orphans                  >= 0.3
        , bytestring                    >= 0.10.2
        , containers                    >= 0.3
        , 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
        , prettyprinter                 >= 1.2
        , prettyprinter-ansi-terminal   >= 1.0
        , primitive                     >= 0.6.4
        , tasty                         >= 0.11
        , template-haskell
        , terminal-size                 >= 0.3
        , text                          >= 1.2
        , 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.Data.Ratio
        Data.Array.Accelerate.Unsafe

        -- For backend development (hidden)
        Data.Array.Accelerate.AST
        Data.Array.Accelerate.AST.Environment
        Data.Array.Accelerate.AST.Idx
        Data.Array.Accelerate.AST.LeftHandSide
        Data.Array.Accelerate.AST.Var
        Data.Array.Accelerate.Analysis.Hash
        Data.Array.Accelerate.Analysis.Match
        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.Unique
        Data.Array.Accelerate.Async
        Data.Array.Accelerate.Debug
        Data.Array.Accelerate.Error
        Data.Array.Accelerate.Lifetime
        Data.Array.Accelerate.Pretty
        Data.Array.Accelerate.Representation.Array
        Data.Array.Accelerate.Representation.Elt
        Data.Array.Accelerate.Representation.Shape
        Data.Array.Accelerate.Representation.Slice
        Data.Array.Accelerate.Representation.Stencil
        Data.Array.Accelerate.Representation.Tag
        Data.Array.Accelerate.Representation.Type
        Data.Array.Accelerate.Representation.Vec
        Data.Array.Accelerate.Smart
        Data.Array.Accelerate.Sugar.Array
        Data.Array.Accelerate.Sugar.Elt
        Data.Array.Accelerate.Sugar.Foreign
        Data.Array.Accelerate.Sugar.Shape
        Data.Array.Accelerate.Sugar.Vec
        Data.Array.Accelerate.Trafo
        Data.Array.Accelerate.Trafo.Config
        Data.Array.Accelerate.Trafo.Delayed
        Data.Array.Accelerate.Trafo.Fusion
        Data.Array.Accelerate.Trafo.Sharing
        Data.Array.Accelerate.Trafo.Substitution
        Data.Array.Accelerate.Type

        -- For testing
        Data.Array.Accelerate.Test.NoFib
        Data.Array.Accelerate.Test.Similar

        -- Other
        Data.BitSet
        Data.Primitive.Vec

  other-modules:
        Data.Array.Accelerate.Analysis.Hash.TH
        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.Rational
        Data.Array.Accelerate.Classes.Real
        Data.Array.Accelerate.Classes.RealFloat
        Data.Array.Accelerate.Classes.RealFrac
        Data.Array.Accelerate.Classes.ToFloating
        Data.Array.Accelerate.Debug.Clock
        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.Orphans
        Data.Array.Accelerate.Pattern
        Data.Array.Accelerate.Pattern.Bool
        Data.Array.Accelerate.Pattern.Either
        Data.Array.Accelerate.Pattern.Maybe
        Data.Array.Accelerate.Pattern.Ordering
        Data.Array.Accelerate.Pattern.TH
        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.Environment
        Data.Array.Accelerate.Trafo.LetSplit
        Data.Array.Accelerate.Trafo.Shrink
        Data.Array.Accelerate.Trafo.Simplify
        Data.Array.Accelerate.Trafo.Var
        Data.Atomic

        -- Data.Array.Accelerate.Array.Lifted
        -- Data.Array.Accelerate.Trafo.Vectorise

        -- nofib test suite
        Data.Array.Accelerate.Test.NoFib.Base
        Data.Array.Accelerate.Test.NoFib.Config

        Language.Haskell.TH.Extra

  if flag(nofib)
    build-depends:
          tasty-expected-failure        >= 0.11
        , tasty-hedgehog                >= 0.1
        , tasty-hunit                   >= 0.9
    --     , 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.SIMD
        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.Issue364
        Data.Array.Accelerate.Test.NoFib.Issues.Issue407
        Data.Array.Accelerate.Test.NoFib.Issues.Issue409
        Data.Array.Accelerate.Test.NoFib.Issues.Issue436
        Data.Array.Accelerate.Test.NoFib.Issues.Issue437
        Data.Array.Accelerate.Test.NoFib.Issues.Issue439

  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

  if flag(debug) || flag(ekg)
    ghc-options:
        -optc-DACCELERATE_DEBUG

    cpp-options:
        -DACCELERATE_DEBUG

  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
        -Wcompat
        -Wmissed-specialisations
        -- -Wredundant-constraints
        -freduction-depth=100
        -fspec-constr-count=50
        -funbox-strict-fields

  ghc-prof-options:
        -caf-all
        -auto-all

  -- 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.10
        , accelerate
        , doctest                       >= 0.11

  ghc-options:
        -Wall
        -threaded
        -rtsopts

  x-doctest-options:
        -freduction-depth=100
        -fspec-constr-count=50


test-suite nofib-interpreter
  type:                 exitcode-stdio-1.0
  default-language:     Haskell2010
  hs-source-dirs:       test/nofib
  main-is:              Main.hs

  if !flag(nofib)
    buildable: False

  build-depends:
          base                          >= 4.10
        , 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