[commit: dph] : Fix foldl1UP. Fold1 is now parallel. (a06add5)
Ben Lippmeier
benl at ouroborus.net
Thu Jun 2 09:14:52 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/dph
On branch :
http://hackage.haskell.org/trac/ghc/changeset/a06add5a1b89188a9a4547051eafc44c074cb482
>---------------------------------------------------------------
commit a06add5a1b89188a9a4547051eafc44c074cb482
Author: George Roldugin <groldugin at cse.unsw.edu.au>
Date: Tue May 17 10:04:58 2011 +1000
Fix foldl1UP. Fold1 is now parallel.
>---------------------------------------------------------------
dph-prim-par/Data/Array/Parallel/Unlifted.hs | 2 +-
.../Data/Array/Parallel/Unlifted/Parallel.hs | 2 +-
.../Parallel/Unlifted/Parallel/Combinators.hs | 7 ++-----
3 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/dph-prim-par/Data/Array/Parallel/Unlifted.hs b/dph-prim-par/Data/Array/Parallel/Unlifted.hs
index 6955d28..5f0416a 100644
--- a/dph-prim-par/Data/Array/Parallel/Unlifted.hs
+++ b/dph-prim-par/Data/Array/Parallel/Unlifted.hs
@@ -157,7 +157,7 @@ fold f x arr
fold1 f arr
= tracePrim (TraceFold1 (Seq.length arr))
- $! Seq.fold1 f arr
+ $! fold1UP f arr
and arr = tracePrim (TraceAnd (Seq.length arr))
diff --git a/dph-prim-par/Data/Array/Parallel/Unlifted/Parallel.hs b/dph-prim-par/Data/Array/Parallel/Unlifted/Parallel.hs
index 31a9adb..9dc717d 100644
--- a/dph-prim-par/Data/Array/Parallel/Unlifted/Parallel.hs
+++ b/dph-prim-par/Data/Array/Parallel/Unlifted/Parallel.hs
@@ -21,7 +21,7 @@ module Data.Array.Parallel.Unlifted.Parallel (
enumFromToUP, enumFromThenToUP, enumFromStepLenUP, enumFromStepLenEachUP,
mapUP, filterUP, packUP, combineUP, combine2UP,
- zipWithUP, foldUP, scanUP,
+ zipWithUP, foldUP, fold1UP, scanUP,
andUP, sumUP,
diff --git a/dph-prim-par/Data/Array/Parallel/Unlifted/Parallel/Combinators.hs b/dph-prim-par/Data/Array/Parallel/Unlifted/Parallel/Combinators.hs
index 3f22a50..e14d14e 100644
--- a/dph-prim-par/Data/Array/Parallel/Unlifted/Parallel/Combinators.hs
+++ b/dph-prim-par/Data/Array/Parallel/Unlifted/Parallel/Combinators.hs
@@ -24,6 +24,7 @@ import Data.Array.Parallel.Unlifted.Sequential.Vector as Seq
import Data.Array.Parallel.Unlifted.Distributed
import Data.Array.Parallel.Unlifted.Parallel.UPSel
+import Data.Maybe (fromJust)
import Debug.Trace (trace)
-- | Apply a worker to all elements of a vector.
@@ -110,9 +111,6 @@ foldlUP f z arr
-- | Reduction of a non-empty array which requires an associative combination function.
>---------------------------------------------------------------
--- TODO: What is the difference between this and foldUP above?
--- The two type class constraints are in a different order. Does that matter?
fold1UP :: (DT a, Unbox a) => (a -> a -> a) -> Vector a -> a
{-# INLINE fold1UP #-}
fold1UP = foldl1UP
@@ -122,12 +120,11 @@ fold1UP = foldl1UP
foldl1UP :: (DT a, Unbox a) => (a -> a -> a) -> Vector a -> a
{-# INLINE_U foldl1UP #-}
foldl1UP f arr
- = (maybe z (f z)
+ = (fromJust
. foldD theGang combine
. mapD theGang (Seq.foldl1Maybe f)
. splitD theGang unbalanced) arr
where
- z = arr ! 0
combine (Just x) (Just y) = Just (f x y)
combine (Just x) Nothing = Just x
combine Nothing (Just y) = Just y
More information about the Cvs-libraries
mailing list