Fix dotp and smvm
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Mon, 20 Jul 2009 04:44:06 +0000 (04:44 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Mon, 20 Jul 2009 04:44:06 +0000 (04:44 +0000)
dph-prim-interface/interface/DPH_Interface.h
dph-prim-par/Data/Array/Parallel/Unlifted/Distributed/Combinators.hs
dph-prim-par/Data/Array/Parallel/Unlifted/Parallel/Combinators.hs

index 193bd93..eed885a 100644 (file)
@@ -260,6 +260,10 @@ dph_mod_index :: Int -> Int -> Int
 {-# INLINE_BACKEND dph_mod_index #-}
 dph_mod_index by idx = idx `Prelude.mod` by
 
+dph_mult :: Int -> Int -> Int
+{-# INLINE_BACKEND dph_mult #-}
+dph_mult x y = x Prelude.* y
+
 {-# RULES
 
 "bpermute/repeat" forall n len xs is.
@@ -293,7 +297,15 @@ dph_mod_index by idx = idx `Prelude.mod` by
   map (dph_mod_index m) (zipWith GHC.Base.plusInt (enumFromStepLen 0 m n) is)
     = map (dph_mod_index m) is
 
- #-} 
+ #-}
+
+{-# RULES
+
+"legthsToSegd/replicate" forall m n.
+  lengthsToSegd (replicate m n)
+    = mkSegd (replicate m n) (enumFromStepLen 0 n m) (m `dph_mult` n)
+
+ #-}
 
 -- These are for Gabi
 {- RULES
index 5e3cc60..9f6f68a 100644 (file)
@@ -69,7 +69,8 @@ zipWithD g f dx dy = mapD g (uncurry f . unsafe_unpairS) (zipD dx dy)
 
 -- | Fold a distributed value.
 foldD :: DT a => Gang -> (a -> a -> a) -> Dist a -> a
-{-# INLINE_DIST foldD #-}
+-- {-# INLINE_DIST foldD #-}
+{-# NOINLINE foldD #-}
 foldD g f !d = checkGangD ("here foldD") g d $
               fold 1 (d `indexD` 0)
   where
index 02db1c6..49b3e58 100644 (file)
@@ -76,10 +76,11 @@ zipWithUP f a b = joinD    theGang balanced
 
 foldUP :: (UA a, DT a) => (a -> a -> a) -> a -> UArr a -> a
 {-# INLINE foldUP #-}
-foldUP f z = maybeS z (f z)
-           . foldD  theGang combine
-           . mapD   theGang (foldl1MaybeU f)
-           . splitD theGang unbalanced
+foldUP f z xs = maybeS z (f z)
+               (foldD  theGang combine
+               (mapD   theGang (foldl1MaybeU f)
+               (splitD theGang unbalanced
+                xs)))
   where
     combine (JustS x) (JustS y) = JustS (f x y)
     combine (JustS x) NothingS  = JustS x