dph-lifted-vseg: use new vectoriser interface
authorBen Lippmeier <benl@ouroborus.net>
Wed, 2 Nov 2011 04:55:49 +0000 (15:55 +1100)
committerBen Lippmeier <benl@ouroborus.net>
Thu, 3 Nov 2011 05:26:54 +0000 (16:26 +1100)
dph-base/Data/Array/Parallel/Pretty.hs
dph-examples/smoke/Concat/Main [deleted file]
dph-lifted-vseg/Data/Array/Parallel.hs
dph-lifted-vseg/Data/Array/Parallel/Prelude/Bool.hs
dph-lifted-vseg/Data/Array/Parallel/Prelude/Double.hs
dph-lifted-vseg/Data/Array/Parallel/Prelude/Int.hs
dph-lifted-vseg/Data/Array/Parallel/Prim.hs
dph-lifted-vseg/Data/Array/Parallel/VectDepend.hs [deleted file]
dph-prim-interface/dph-prim-interface.cabal

index 9e4b419..90963fb 100644 (file)
@@ -24,9 +24,9 @@ class PprVirtual a where
  pprv :: a -> Doc
 
 instance PprVirtual Int where
- pprp = text . show 
+ pprv = text . show 
  
 instance PprVirtual Double where
- pprp = text . show 
+ pprv = text . show 
 
  
\ No newline at end of file
diff --git a/dph-examples/smoke/Concat/Main b/dph-examples/smoke/Concat/Main
deleted file mode 100755 (executable)
index c693060..0000000
Binary files a/dph-examples/smoke/Concat/Main and /dev/null differ
index 9eabafd..d7350e6 100644 (file)
@@ -58,8 +58,8 @@ module Data.Array.Parallel
         , zipP
         , unzipP)
 where
-import Data.Array.Parallel.VectDepend
--- IMPORTANT: see Note [Vectoriser dependencies] in the same module
+-- Primitives needed by the vectoriser.
+import Data.Array.Parallel.Prim                 ()      
 
 import Data.Array.Parallel.PArr
 import Data.Array.Parallel.Lifted
index 96798da..63c5c21 100644 (file)
@@ -7,10 +7,8 @@ module Data.Array.Parallel.Prelude.Bool (
         otherwise
 )
 where
-import Data.Array.Parallel.VectDepend
--- IMPORTANT: see Note [Vectoriser dependencies] in the same module
-
-import Data.Array.Parallel.Lifted
+-- Primitives needed by the vectoriser.
+import Data.Array.Parallel.Prim
         
 {-# VECTORISE type Bool = Bool #-}
 
index b0de1aa..61ce036 100644 (file)
@@ -27,8 +27,8 @@ module Data.Array.Parallel.Prelude.Double
         -- * RealFrac
         , fromInt)
 where
-import Data.Array.Parallel.VectDepend
--- IMPORTANT: see Note [Vectoriser dependencies] in the same module
+-- Primitives needed by the vectoriser.
+import Data.Array.Parallel.Prim                 ()      
 
 import Data.Array.Parallel.Prelude.Bool
 import Data.Array.Parallel.Prelude.Int                  (Int)
index 8c4a594..d1d1b90 100644 (file)
@@ -20,8 +20,8 @@ module Data.Array.Parallel.Prelude.Int
         -- * Enum
         , enumFromToP)
 where
-import Data.Array.Parallel.VectDepend
--- IMPORTANT: see Note [Vectoriser dependencies] in the same module
+-- Primitives needed by the vectoriser.
+import Data.Array.Parallel.Prim                 ()      
 
 import Data.Array.Parallel.Prelude.Bool
 import Data.Array.Parallel.PArr
index 41e7fc5..eaaf273 100644 (file)
@@ -1,56 +1,99 @@
+#include "fusion-phases.h"
 
 -- | This is the API used by the vectoriser.
 --   The vectoriser wants a slightly different interface to the one used 
 --   natively by the library. This module performs the impedance matching.
 module Data.Array.Parallel.Prim 
-        ( emptyPD#
-        , replicatePD#
-        , packByTagPD#
-        , combine2PD#
+        -- Core types
+        ( PArray(..), PData, PRepr, PA(..), PR(..)
 
-        -- * Closures
+        -- Array Functions
+        , emptyPD
+        , replicatePD
+        , packByTagPD
+        , combine2PD
+
+        -- Scalar primitives
+        , Scalar(..)
+        , scalar_map
+        , scalar_zipWith
+        , scalar_zipWith3
+
+        -- Types used in the generic representation
+        , Void, void, fromVoid, pvoid
+        , punit
+        , Wrap(..)
+        , Sum2(..), Sum3(..)
+        
+        -- Closures, and closure functions
+        , (:->)(..)
         , closure,              ($:)
         , liftedClosure,        liftedApply
-        , closure1
-        , closure2
-        , closure3
+        , closure1, closure2, closure3
         
-        -- Selectors
+        -- Selectors
         , Sel2
-        , replicateSel2#
-        , pickSel2#
         , tagsSel2
+        , replicateSel2#
         , elementsSel2_0#
         , elementsSel2_1#
-        
-        -- * Scalar functions
-        , scalar_map
-        , scalar_zipWith
-        , scalar_zipWith3)
+
+        -- Scalar constructors
+        , PArray_Int#,          PArray_Double#
+        , emptyPA_Int#,         emptyPA_Double#
+        , replicatePA_Int#,     replicatePA_Double#
+        , packByTagPA_Int#,     packByTagPA_Double#
+        , combine2PA_Int#,      combine2PA_Double#
+
+        -- Tuple functions
+        , tup2, tup3)
 where
-import Data.Array.Parallel.PArray.PData.Base
-import Data.Array.Parallel.PArray.PRepr.Base
-import GHC.Exts
-import Data.Array.Parallel.Base
-import Data.Array.Parallel.PArray.Scalar                (Scalar(..))
-import qualified Data.Array.Parallel.PArray.Scalar      as Scalar
-import qualified Data.Array.Parallel.Unlifted           as U
+import Data.Array.Parallel.PArray.PData.Base   (PArray(..), PData, PR(..))
+import Data.Array.Parallel.PArray.PData
+        ( pvoid, punit)
+
+import Data.Array.Parallel.PArray.PRepr 
+        ( PRepr, PA(..)
+        , emptyPA, replicatePA, packByTagPA, combine2PA)
+        
+import Data.Array.Parallel.PArray.Scalar
+        ( Scalar(..))
+
+import Data.Array.Parallel.PArray.Types
+        ( Void, void, fromVoid
+        , Wrap(..)
+        , Sum2(..), Sum3(..))
+        
+import Data.Array.Parallel.Lifted.Closure
+        ( (:->)(..))
+
+import Data.Array.Parallel.Prelude.Tuple
+        ( tup2, tup3)
 
+import Data.Array.Parallel.Base                         (Tag, intToTag)
+import qualified Data.Array.Parallel.Unlifted           as U
+import qualified Data.Array.Parallel.PArray.Scalar      as Scalar
 import qualified Data.Array.Parallel.Lifted.Closure     as C
-import Data.Array.Parallel.Lifted.Closure     ((:->)(..))
+import GHC.Exts
+
+-- Array functions ------------------------------------------------------------
+emptyPD :: PA a => PData a
+emptyPD = emptyPA
 
 
--- Constructors ---------------------------------------------------------------
--- The vectoriser wants versions of these functions that take unboxed integers
--- for some of the arguments.
-{-# INLINE emptyPD# #-}
-emptyPD# :: PA a => PData a
-emptyPD# = emptyPA
+replicatePD :: PA a => Int# -> a -> PData a
+replicatePD i# x 
+        = replicatePA (I# i#) x
+        
+
+packByTagPD :: PA a => PData a -> Int# -> U.Array Tag -> Int# -> PData a
+packByTagPD xs _ tags tag#
+        = packByTagPA xs tags (I# tag#)
 
-{-# INLINE replicatePD# #-}
-replicatePD# :: PA a => Int# -> a -> PData a
-replicatePD# r x 
-        = replicatePA (I# r) x
+
+combine2PD :: PA a => Int# -> U.Sel2 -> PData a -> PData a -> PData a
+combine2PD len# sel xs ys
+        = combine2PA sel xs ys
 
 
 -- Closures -------------------------------------------------------------------
@@ -141,22 +184,6 @@ closure3 fv fl
    in   C.closure3 fv fl'
 
 
-
--- Packing and Combining ------------------------------------------------------
--- The vectoriser wants versions of these that take unboxed integers
--- for some arguments.
-{-# INLINE packByTagPD# #-}
-packByTagPD# :: PA a => PData a -> Int# -> U.Array Tag -> Int# -> PData a
-packByTagPD# arr _ tags t
-        = packByTagPA arr tags (I# t)
-
-
-{-# INLINE combine2PD# #-}
-combine2PD# :: PA a => Int# -> U.Sel2 -> PData a -> PData a -> PData a
-combine2PD# _ sel pdata1 pdata2
-        = combine2PA sel pdata1 pdata2
-
-
 -- Selector functions ---------------------------------------------------------
 -- The vectoriser wants versions of these that take unboxed integers
 -- for some arguments.
@@ -201,7 +228,6 @@ elementsSel2_1# sel
 
 
 -- Scalar functions -----------------------------------------------------------
-
 {-# INLINE scalar_map #-}
 scalar_map 
         :: (Scalar a, Scalar b) 
@@ -224,3 +250,76 @@ scalar_zipWith3
         => (a -> b -> c -> d) -> PArray a -> PArray b -> PArray c -> PArray d
 
 scalar_zipWith3 = Scalar.zipWith3
+
+
+-- Int functions --------------------------------------------------------------
+type PArray_Int# = U.Array Int
+
+
+replicatePA_Int# :: Int# -> Int# -> PArray_Int#
+replicatePA_Int# n# i# = U.replicate (I# n#) (I# i#)
+{-# INLINE_PA replicatePA_Int# #-}
+
+
+emptyPA_Int# :: PArray_Int#
+emptyPA_Int# = U.empty
+{-# INLINE_PA emptyPA_Int# #-}
+
+
+{-# RULES
+
+"replicatePA_Int#" forall n# i#.
+  replicatePA_Int# n# i# = U.replicate (I# n#) (I# i#)
+
+ #-}
+
+
+packByTagPA_Int# :: a
+packByTagPA_Int#    = error "Data.Array.Parallel.Prim: 'packByTagPA_Int#' not implemented"
+
+
+combine2'PA_Int# :: PArray_Int# -> PArray_Int# -> PArray_Int# -> PArray_Int#
+combine2'PA_Int# sel xs ys = U.combine (U.map (== 0) sel) xs ys
+{-# INLINE_PA combine2'PA_Int# #-}
+
+
+combine2PA_Int#
+        :: Int#
+        -> PArray_Int# -> PArray_Int#
+        -> PArray_Int# -> PArray_Int# -> PArray_Int#
+combine2PA_Int# _ sel _ xs ys = combine2'PA_Int# sel xs ys
+{-# INLINE_PA combine2PA_Int# #-}
+
+
+-- Double functions -----------------------------------------------------------
+type PArray_Double# = U.Array Double
+
+
+replicatePA_Double# :: Int# -> Double# -> PArray_Double#
+replicatePA_Double# n# d# = U.replicate (I# n#) (D# d#)
+{-# INLINE_PA replicatePA_Double# #-}
+
+
+emptyPA_Double# :: PArray_Double#
+emptyPA_Double# = U.empty
+{-# INLINE_PA emptyPA_Double# #-}
+
+
+packByTagPA_Double# :: a
+packByTagPA_Double# = error "Data.Array.Parallel.Prim: 'packByTagPA_Double#' not implemented"
+
+
+combine2'PA_Double#
+        :: PArray_Int#
+        -> PArray_Double# -> PArray_Double# -> PArray_Double#
+combine2'PA_Double# sel xs ys = U.combine (U.map (== 0) sel) xs ys
+{-# INLINE_PA combine2'PA_Double# #-}
+
+
+combine2PA_Double#
+        :: Int#
+        -> PArray_Int# -> PArray_Int#
+        -> PArray_Double# -> PArray_Double# -> PArray_Double#
+combine2PA_Double# _ sel _ xs ys = combine2'PA_Double# sel xs ys
+{-# INLINE_PA combine2PA_Double# #-}
+
diff --git a/dph-lifted-vseg/Data/Array/Parallel/VectDepend.hs b/dph-lifted-vseg/Data/Array/Parallel/VectDepend.hs
deleted file mode 100644 (file)
index db34d32..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# OPTIONS_GHC -fvectorise #-}
-{-# OPTIONS_HADDOCK hide #-}
-
--- Note [Vectoriser dependencies]
--- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--- Some of the modules in 'dph-common' (and hence, 'dph-seq' and 'dph-par') are being vectorised,
--- whereas some other modules in 'dph-common' define names hardwired into the vectoriser — i.e.,
--- the vectoriser panics if those latter modules have not been compiled yet.  To avoid build races
--- we need to ensure that all vectoriser dependencies are compiler before any of the vectorised
--- modules is being compiled.
---
--- The present module imports all vectoriser dependencies and we ensure that those are available
--- in vectorised modules by importing the present module into those vectorised modules.  In other
--- words, we turn the indirect module dependencies through the vectoriser into explicit module
--- dependencies, which the dependency tracker of the build system will correctly handle.
-
--- #hide
-module Data.Array.Parallel.VectDepend () where
-
-import Data.Array.Parallel.Lifted.Closure               ()
-import Data.Array.Parallel.Lifted.Combinators           ()
-import Data.Array.Parallel.Lifted                       ()
-import Data.Array.Parallel.PArray.PData.Base            ()
-import Data.Array.Parallel.PArray.PData.Double          ()
-import Data.Array.Parallel.PArray.PData.Int             ()
-import Data.Array.Parallel.PArray.PData.Nested          ()
-import Data.Array.Parallel.PArray.PData.Sum2            ()
-import Data.Array.Parallel.PArray.PData.Tuple           ()
-import Data.Array.Parallel.PArray.PData.Unit            ()
-import Data.Array.Parallel.PArray.PData.Void            ()
-import Data.Array.Parallel.PArray.PData.Wrap            ()
-import Data.Array.Parallel.PArray.PData                 ()
-import Data.Array.Parallel.PArray.PRepr.Base            ()
-import Data.Array.Parallel.PArray.PRepr.Instances       ()
-import Data.Array.Parallel.PArray.PRepr.Nested          ()
-import Data.Array.Parallel.PArray.PRepr.Tuple           ()
-import Data.Array.Parallel.PArray.PRepr                 ()
-import Data.Array.Parallel.PArray.Scalar                ()
-import Data.Array.Parallel.PArray                       ()
-import Data.Array.Parallel.Prelude.Tuple                ()
-import Data.Array.Parallel.Prim                         ()
\ No newline at end of file
index 57f9d42..0643715 100644 (file)
@@ -32,5 +32,5 @@ Library
         base     == 4.4.*,
         random   == 1.0.*,
         dph-base == 0.5.*,
-        vector   == 0.9
+        vector   == 0.9.*