Implement fold1SUP
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Thu, 20 May 2010 03:30:07 +0000 (03:30 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Thu, 20 May 2010 03:30:07 +0000 (03:30 +0000)
dph-prim-par/Data/Array/Parallel/Unlifted/Parallel/Segmented.hs

index 66cb297..b2157bd 100644 (file)
@@ -106,6 +106,15 @@ foldSUP :: (UA a, UA b) => (b -> a -> b) -> b -> USegd -> UArr a -> UArr b
 {-# INLINE foldSUP #-}
 foldSUP = foldlSUP
 
+fold1SUP :: UA a => (a -> a -> a) -> USegd -> UArr a -> UArr a
+{-# INLINE fold1SUP #-}
+fold1SUP f segd xs = joinD theGang unbalanced
+                    (mapD theGang (uncurry (fold1SU f) . unsafe_unpairS)
+                    (zipD dsegd
+                    (splitSD theGang dsegd xs)))
+  where
+    dsegd = splitSegdD theGang segd
+
 sumSUP :: (Num e, UA e) => USegd -> UArr e -> UArr e
 {-# INLINE sumSUP #-}
 sumSUP = foldSUP (+) 0