NOINLINE some functions that don't need to be inlined
authorBen Lippmeier <benl@ouroborus.net>
Wed, 2 May 2012 03:45:12 +0000 (13:45 +1000)
committerBen Lippmeier <benl@ouroborus.net>
Tue, 5 Jun 2012 07:38:17 +0000 (17:38 +1000)
dph-prim-par/Data/Array/Parallel/Unlifted/Distributed/Arrays.hs

index 0de3c39..52f315f 100644 (file)
@@ -74,7 +74,8 @@ splitLenD g n = generateD_cheap g len
     {-# INLINE [0] len #-}
     len i | i < m     = l+1
           | otherwise = l
-{-# INLINE splitLenD #-}
+{-# NOINLINE splitLenD #-}
+--  NOINLINE because it's cheap and doesn't need to fuse with anything.
 
 
 -- | O(threads).
@@ -95,7 +96,8 @@ splitLenIdxD g n = generateD_cheap g len_idx
     {-# INLINE [0] len_idx #-}
     len_idx i | i < m     = (l+1, i*(l+1))
               | otherwise = (l,   i*l + m)
-{-# INLINE splitLenIdxD #-}
+{-# NOINLINE splitLenIdxD #-}
+--  NOINLINE because it's cheap and doesn't need to fuse with anything.
 
 
 -- | O(threads).
@@ -104,8 +106,11 @@ splitLenIdxD g n = generateD_cheap g len_idx
 --   and summing them up.
 joinLengthD :: Unbox a => Gang -> Dist (Vector a) -> Int
 joinLengthD g = sumD g . lengthD
-{-# INLINE joinLengthD #-}
-                                               
+{-# NOINLINE joinLengthD #-}
+--  NOINLINE because it's cheap and doesn't need to fuse with anything.
+--  No operations are performed on the elements, so we don't need
+--  to specialise for the element type.                                         
+
 
 -- Splitting and Joining arrays -----------------------------------------------
 -- | Distribute an array over a 'Gang' such that each threads gets the given