name: haskell-mpi version: 1.0.0 cabal-version: >= 1.6 synopsis: Distributed parallel programming in Haskell using MPI. description: MPI is defined by the Message-Passing Interface Standard, as specified by the Message Passing Interface Forum. The latest release of the standard is known as MPI-2. These Haskell bindings are designed to work with any standards compliant implementation of MPI-2. Examples are MPICH2: and OpenMPI: . . In addition to reading these documents, users may also find it beneficial to consult the MPI-2 standard documentation provided by the MPI Forum: , and also the documentation for the MPI implementation linked to this library (that is, the MPI implementation that was chosen when this Haskell library was compiled). . "Control.Parallel.MPI.Fast" contains a high-performance interface for working with (possibly mutable) arrays of storable Haskell data types. . "Control.Parallel.MPI.Simple" contains a convenient (but slower) interface for sending arbitrary serializable Haskell data values as messages. . "Control.Parallel.MPI.Internal" contains a direct binding to the C interface. . "Control.Parallel.MPI.Base" contains essential MPI functionality which is independent of the message passing API. This is re-exported by the Fast and Simple modules, and usually does not need to be explcitly imported itself. . Notable differences between Haskell-MPI and the standard C interface to MPI: . 1. Some collective message passing operations are split into send and receive parts to facilitate a more idiomatic Haskell style of programming. For example, C provides the @MPI_Gather@ function which is called by all processes participating in the communication, whereas Haskell-MPI provides 'gatherSend' and 'gatherRecv' which are called by the sending and receiving processes respectively. . 2. The order of arguments for some functions is changed to allow for the most common patterns of partial function application. . 3. Errors are raised as exceptions rather than return codes (assuming that the error handler to 'errorsThrowExceptions', otherwise errors will terminate the computation just like C interface). . Below is a small but complete MPI program. Process 1 sends the message @\"Hello World\"@ to process 0, which in turn receives the message and prints it to standard output. All other processes, if there are any, do nothing. . >module Main where > >import Control.Parallel.MPI.Simple (mpiWorld, commWorld, unitTag, send, recv) > >main :: IO () >main = mpiWorld $ \size rank -> > if size < 2 > then putStrLn "At least two processes are needed" > else case rank of > 0 -> do (msg, _status) <- recv commWorld 1 unitTag > putStrLn msg > 1 -> send commWorld 0 unitTag "Hello World" > _ -> return () category: FFI, Distributed Computing license: BSD3 license-file: LICENSE copyright: (c) 2010 Bernard James Pope, Dmitry Astapov author: Bernard James Pope (Bernie Pope) maintainer: florbitous@gmail.com homepage: http://github.com/bjpop/haskell-mpi build-type: Simple stability: experimental tested-with: GHC==6.10.4, GHC==6.12.1 extra-source-files: src/cbits/*.c src/include/*.h README.txt test/examples/HaskellAndC/Makefile test/examples/HaskellAndC/*.c test/examples/HaskellAndC/*.hs test/examples/PiByIntegration/*.hs test/examples/PiByIntegration/*.test test/examples/simple/*.hs test/examples/simple/*.test test/examples/speed/*.hs test/examples/speed/simple-api/*.hs source-repository head type: git location: git://github.com/bjpop/haskell-mpi.git flag test description: Build testsuite and code coverage tests default: False Library extra-libraries: mpi build-tools: c2hs ghc-options: -Wall -fno-warn-name-shadowing -fno-warn-orphans c-sources: src/cbits/init_wrapper.c, src/cbits/constants.c include-dirs: src/include hs-source-dirs: src build-depends: base > 3 && <= 5, haskell98, bytestring, cereal, extensible-exceptions, array exposed-modules: Control.Parallel.MPI.Base, Control.Parallel.MPI.Internal, Control.Parallel.MPI.Fast, Control.Parallel.MPI.Simple other-modules: C2HS, Control.Parallel.MPI.Utils executable haskell-mpi-testsuite hs-source-dirs: ./test ./src build-tools: c2hs extra-libraries: mpi ghc-options: -Wall -fno-warn-name-shadowing -fno-warn-orphans c-sources: src/cbits/init_wrapper.c, src/cbits/constants.c include-dirs: src/include other-modules: Control.Parallel.MPI.Base, Control.Parallel.MPI.Internal, Control.Parallel.MPI.Fast, Control.Parallel.MPI.Simple, Control.Parallel.MPI.Utils, C2HS, IOArrayTests, SimpleTests, FastAndSimpleTests, StorableArrayTests, GroupTests, PrimTypeTests, ExceptionTests, OtherTests, TestHelpers main-is: Testsuite.hs if flag(test) ghc-options: -fhpc build-depends: base >=3 && <=5, HUnit, testrunner, hpc, unix else buildable: False executable haskell-mpi-comprunclean hs-source-dirs: ./test ghc-options: -Wall -fno-warn-name-shadowing -fno-warn-orphans other-modules: main-is: CompileRunClean.hs if flag(test) build-depends: base >=3 && <=5, process else buildable: False