haskell-mpi-1.2.1: haskell-mpi.cabal
name: haskell-mpi
version: 1.2.1
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:
<http://www.mcs.anl.gov/research/projects/mpich2> and
OpenMPI: <http://www.open-mpi.org>.
.
In addition to reading these documents, users may also find it
beneficial to consult the MPI-2 standard documentation provided by the
MPI Forum: <http://www.mpi-forum.org>, 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
flag mpich14
description: Link with extra libraries for MPICH 1.4
default: False
Library
extra-libraries: mpi
if flag(mpich14)
extra-libraries: mpl
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,
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
if flag(mpich14)
extra-libraries: mpl
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