2010-06-27 10:58:44 +04:00
|
|
|
name: speculation
|
2010-06-27 12:20:12 +04:00
|
|
|
version: 0.0.2
|
2010-06-27 10:58:44 +04:00
|
|
|
license: BSD3
|
|
|
|
license-file: LICENSE
|
|
|
|
author: Edward A. Kmett
|
|
|
|
maintainer: Edward A. Kmett <ekmett@gmail.com>
|
|
|
|
stability: experimental
|
2010-06-27 11:44:55 +04:00
|
|
|
homepage: http://github.com/ekmett/speculation
|
2010-06-27 10:58:44 +04:00
|
|
|
category: Concurrency
|
2010-06-27 11:14:35 +04:00
|
|
|
synopsis: A framework for safe, programmable, speculative parallelism
|
2010-06-27 12:20:12 +04:00
|
|
|
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 = a `seq` 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 -----------]
|
|
|
|
.
|
|
|
|
Compared to the unspeculated timeline of
|
|
|
|
.
|
|
|
|
> [---- a -----]
|
|
|
|
> [---- f a ----]
|
|
|
|
.
|
|
|
|
Changes since 0.0.1
|
|
|
|
.
|
|
|
|
* 'specFoldr1' bug fix
|
|
|
|
.
|
|
|
|
* Added 'spec'' combinator
|
|
|
|
.
|
|
|
|
Changes since 0.0.0
|
|
|
|
.
|
|
|
|
* Added 'WithoutSpeculation' and 'WrappedFoldable'
|
|
|
|
|
2010-06-27 10:58:44 +04:00
|
|
|
copyright: (c) 2010 Edward A. Kmett
|
|
|
|
build-type: Simple
|
|
|
|
cabal-version: >=1.2
|
|
|
|
tested-with: GHC==6.12.1
|
2010-06-27 11:14:35 +04:00
|
|
|
extra-source-files: README.markdown
|
2010-06-27 10:58:44 +04:00
|
|
|
|
|
|
|
library
|
|
|
|
ghc-options: -Wall
|
|
|
|
|
|
|
|
build-depends:
|
|
|
|
base >= 4 && < 6,
|
|
|
|
containers >= 0.2.0.1,
|
|
|
|
array >= 0.2 && < 0.4,
|
|
|
|
parallel >= 2.2 && < 2.3
|
|
|
|
|
|
|
|
exposed-modules:
|
|
|
|
Control.Concurrent.Speculation
|