Strictify some things
authorBen Lippmeier <benl@ouroborus.net>
Fri, 16 Dec 2011 07:54:31 +0000 (18:54 +1100)
committerBen Lippmeier <benl@ouroborus.net>
Fri, 16 Dec 2011 07:54:31 +0000 (18:54 +1100)
dph-lifted-vseg/Data/Array/Parallel/PArray/Scalar.hs
dph-prim-seq/Data/Array/Parallel/Unlifted.hs
dph-prim-seq/Data/Array/Parallel/Unlifted/Sequential/Combinators.hs
dph-prim-seq/Data/Array/Parallel/Unlifted/Sequential/Extracts.hs
dph-prim-seq/Data/Array/Parallel/Unlifted/Stream/Elems.hs

index 3ed1d9c..251604a 100644 (file)
@@ -170,7 +170,7 @@ zipWith3 f (PArray len xs) (PArray _ ys) (PArray _ zs)
 fold    :: Scalar a 
         => (a -> a -> a) -> a -> PArray a -> a
 
-fold f z (PArray _ pdata)
+fold f !z (PArray _ pdata)
         = U.fold f z $ from pdata
 
 
@@ -187,7 +187,7 @@ fold1 f (PArray _ pdata)
 folds   :: (Scalar a, U.Elts a)
         => (a -> a -> a) -> a -> PArray (PArray a) -> PArray a
 
-folds f z (PArray _ (PNested vsegd pdatas _ _))
+folds f !z (PArray _ (PNested vsegd pdatas _ _))
   = pdatas `seq`  -- Don't seq on vsegd. See Note: fold/promoteSegd
     fromUArray $ U.fold_vs f z vsegd $ fromScalarPDatas pdatas
 {-# INLINE_PA folds #-}
index a5e34e0..985e3d0 100644 (file)
@@ -153,6 +153,7 @@ mkVSegd                         = UVSegd.mkUVSegd
 validVSegd                      = UVSegd.valid
 emptyVSegd                      = UVSegd.empty
 singletonVSegd                  = UVSegd.singleton
+replicatedVSegd                 = UVSegd.replicated
 promoteSegdToVSegd              = UVSegd.fromUSegd
 promoteSSegdToVSegd             = UVSegd.fromUSSegd
 isManifestVSegd                 = UVSegd.isManifest
index f6b0a1a..a04c108 100644 (file)
@@ -18,8 +18,6 @@ import Data.Array.Parallel.Unlifted.Sequential.USSegd           (USSegd)
 import Data.Array.Parallel.Unlifted.Sequential.USegd            (USegd)
 import qualified Data.Array.Parallel.Unlifted.Sequential.USSegd as USSegd
 import qualified Data.Array.Parallel.Unlifted.Sequential.USegd  as USegd
-import qualified Data.Vector                                    as V
-import qualified Data.Vector.Generic                            as G
 
 
 -- foldl ----------------------------------------------------------------------
@@ -27,7 +25,7 @@ import qualified Data.Vector.Generic                            as G
 foldlSU  :: (Unbox a, Unbox b)
          => (b -> a -> b) -> b -> USegd -> Vector a -> Vector b
 {-# INLINE_U foldlSU #-}
-foldlSU f z segd xs 
+foldlSU f !z segd xs 
         = unstream
         $ foldSS f z    (stream (USegd.takeLengths segd))
                         (stream xs)
@@ -104,7 +102,7 @@ fold1SSU = foldl1SSU
 -- | Regular arrar reduction 
 foldlRU :: (Unbox a, Unbox b) => (b -> a -> b) -> b -> Int -> Vector a -> Vector b
 {-# INLINE_U foldlRU #-}
-foldlRU f z segSize
+foldlRU f !z segSize
         = unstream . foldValuesR f z segSize . stream
 
 
index 68be083..e8e2317 100644 (file)
@@ -15,7 +15,7 @@ import Data.Array.Parallel.Unlifted.Stream                      as US
 import Data.Array.Parallel.Unlifted.Vectors                     as US
 import Data.Array.Parallel.Unlifted.Sequential.Vector           as U
 import Data.Array.Parallel.Unlifted.Sequential.USSegd           (USSegd)
-import qualified Data.Array.Parallel.Unlifted.Sequential.UVSegd as UVSegd
+import Data.Array.Parallel.Unlifted.Sequential.UVSegd           (UVSegd)
 import qualified Data.Vector                                    as V
 
 
index 8eb243b..957fac4 100644 (file)
@@ -25,7 +25,10 @@ streamElemsFromVectors vectors (Stream mkStep s0 size0)
         mkStep' s
          = do   step    <- mkStep s
                 case step of
-                 Yield (ix1, ix2) s' -> return $ Yield (US.unsafeIndex2 vectors ix1 ix2) s'
+                 Yield (ix1, ix2) s' 
+                  -> let !result = US.unsafeIndex2 vectors ix1 ix2
+                     in  return $ Yield result s'
+
                  Skip s'             -> return $ Skip s'
                  Done                -> return Done
 {-# INLINE_STREAM streamElemsFromVectors #-}
@@ -41,8 +44,8 @@ streamElemsFromVectorsVSegd
 streamElemsFromVectorsVSegd vectors uvsegd vsrcixs
  = let  -- Because we're just doing indexing here, we don't need the culled
         -- vsegids or ussegd, and can just use the redundant version.
-        !vsegids  = UVSegd.takeVSegidsRedundant uvsegd
-        !ussegd   = UVSegd.takeUSSegdRedundant  uvsegd
+        vsegids  = UVSegd.takeVSegidsRedundant uvsegd
+        ussegd   = UVSegd.takeUSSegdRedundant  uvsegd
    in   streamElemsFromVectors        vectors
          $ streamSrcIxsThroughUSSegd  ussegd
          $ streamSrcIxsThroughVSegids vsegids