Repository : ssh://darcs.haskell.org//srv/darcs/packages/dph On branch :
http://hackage.haskell.org/trac/ghc/changeset/a06add5a1b89188a9a4547051eafc44c074cb482 >--------------------------------------------------------------- commit a06add5a1b89188a9a4547051eafc44c074cb482 Author: George Roldugin <[email protected]> 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 _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
