speculation-0.1.0: speculation.cabal
name: speculation
version: 0.1.0
license: BSD3
license-file: LICENSE
author: Edward A. Kmett
maintainer: Edward A. Kmett <ekmett@gmail.com>
stability: experimental
homepage: http://github.com/ekmett/speculation
category: Concurrency
synopsis: A framework for safe, programmable, speculative parallelism
description:
A framework for safe, programmable, speculative parallelism, loosely based on
<http://research.microsoft.com/pubs/118795/pldi026-vaswani.pdf>
.
@'spec' g f a@ evaluates @f g@ while forcing @a@, if @g == a@ then @f g@ is returned. Otherwise @f a@ is evaluated.
.
Furthermore, if the argument has already been evaluated, we avoid sparking the parallel computation at all.
.
If a good guess at the value of @a@ is available, this is one way to induce parallelism in an otherwise sequential task.
.
However, if the guess isn\'t available more cheaply than the actual answer, then this saves no work and if the guess is
wrong, you risk evaluating the function twice.
.
> spec a f a = f $! a
.
The best-case timeline looks like:
.
> [---- f g ----]
> [----- a -----]
> [-- spec g f a --]
.
The worst-case timeline looks like:
.
> [---- f g ----]
> [----- a -----]
> [---- f a ----]
> [------- spec g f a -----------]
.
Compare these to the timeline of @f $! a@:
.
> [---- a -----]
> [---- f a ----]
.
'specSTM' provides a similar time table for STM actions, but also rolls back side-effects.
.
/Changes in 0.1.0:/
.
* Added @Control.Concurrent.STM.Speculation@ with 'specSTM', and 'specSTM''
.
/Changes in 0.0.2:/
.
* 'specFoldr1' bug fix
.
* Added 'spec'' combinator
.
/Changes in 0.0.1:/
.
* Added 'WithoutSpeculation' and 'WrappedFoldable'
copyright: (c) 2010 Edward A. Kmett
build-type: Simple
cabal-version: >=1.2
tested-with: GHC==6.12.1
extra-source-files: README.markdown
library
ghc-options: -Wall
build-depends:
base >= 4 && < 6,
containers >= 0.2.0.1,
array >= 0.2 && < 0.4,
parallel >= 2.2 && < 2.3,
stm >= 2.1 && < 2.2
exposed-modules:
Control.Concurrent.Speculation
Control.Concurrent.STM.Speculation