[commit: dph] : Fix foldUP. (2d2501d)
Ben Lippmeier
benl at ouroborus.net
Thu Jun 2 09:14:46 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/dph
On branch :
http://hackage.haskell.org/trac/ghc/changeset/2d2501d88ffb8ffcd3e42648a685bad83c4f4962
>---------------------------------------------------------------
commit 2d2501d88ffb8ffcd3e42648a685bad83c4f4962
Author: George Roldugin <groldugin at cse.unsw.edu.au>
Date: Tue May 17 09:50:35 2011 +1000
Fix foldUP.
>---------------------------------------------------------------
.../Parallel/Unlifted/Parallel/Combinators.hs | 16 +++++++++++-----
1 files changed, 11 insertions(+), 5 deletions(-)
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 e09030e..3f22a50 100644
--- a/dph-prim-par/Data/Array/Parallel/Unlifted/Parallel/Combinators.hs
+++ b/dph-prim-par/Data/Array/Parallel/Unlifted/Parallel/Combinators.hs
@@ -87,12 +87,18 @@ zipWithUP f xs ys
-- | Undirected fold.
-foldUP :: (Unbox a, DT a) => (a -> a -> a) -> a -> Vector a -> a
+foldUP :: (DT a, Unbox a) => (a -> a -> a) -> a -> Vector a -> a
{-# INLINE foldUP #-}
-foldUP f !z xs
- = foldD theGang f
- (mapD theGang (Seq.fold f z)
- (splitD theGang unbalanced xs))
+foldUP f !z arr
+ = (maybe z (f z)
+ . foldD theGang combine
+ . mapD theGang (Seq.fold1Maybe f)
+ . splitD theGang unbalanced) arr
+ where
+ combine (Just x) (Just y) = Just (f x y)
+ combine (Just x) Nothing = Just x
+ combine Nothing (Just y) = Just y
+ combine Nothing Nothing = Nothing
-- | Array reduction proceeding from the left (requires associative combination)
More information about the Cvs-libraries
mailing list