Added default backpermute
authorkeller@cse.unsw.edu.au <unknown>
Sun, 19 Jul 2009 11:23:06 +0000 (11:23 +0000)
committerkeller@cse.unsw.edu.au <unknown>
Sun, 19 Jul 2009 11:23:06 +0000 (11:23 +0000)
dph-prim-interface/Data/Array/Parallel/Unlifted.hs
dph-prim-interface/interface/DPH_Header.h
dph-prim-interface/interface/DPH_Interface.h
dph-prim-par/Data/Array/Parallel/Unlifted.hs
dph-prim-seq/Data/Array/Parallel/Unlifted.hs
dph-prim-seq/Data/Array/Parallel/Unlifted/Sequential.hs
dph-prim-seq/Data/Array/Parallel/Unlifted/Sequential/Flat.hs
dph-prim-seq/Data/Array/Parallel/Unlifted/Sequential/Flat/Permute.hs

index f08df32..29036c2 100644 (file)
@@ -37,6 +37,10 @@ bpermute xs ns = map (xs !:) ns
 update = P.error "Not implemented: dph-prim-interface:Data.Array.Parallel.Unlifted.update"
 (+:+) = (P.++)
 
+mbpermute = P.error "Not implemented: dph-prim-interface:Data.Array.Parallel.Unlifted.mbpermute"
+bpermuteDft = P.error "Not implemented: dph-prim-interface:Data.Array.Parallel.Unlifted.bpermuteDft"
+
+
 pack xs bs = [x | (x,b) <- P.zip xs bs, b]
 
 combine [] [] [] = []
index 4433124..a982a6c 100644 (file)
@@ -5,7 +5,7 @@ module Data.Array.Parallel.Unlifted (
 
   length,
   empty, replicate, repeat, (+:+),
-  (!:), extract, drop, permute, bpermute, update,
+  (!:), extract, drop, permute, mbpermute, bpermute, bpermuteDft, update,
   pack, combine,
   enumFromTo, enumFromThenTo, enumFromToEach, enumFromStepLen, enumFromStepLenEach,
   indexed,
index 3852076..193bd93 100644 (file)
@@ -40,6 +40,12 @@ permute :: Elt a => Array a -> Array Int -> Array a
 bpermute :: Elt a => Array a -> Array Int -> Array a
 {-# INLINE_BACKEND bpermute #-}
 
+mbpermute :: (Elt a, Elt b) => (a->b) ->Array a -> Array Int -> Array b
+{-# INLINE_BACKEND mbpermute #-}
+
+bpermuteDft:: Elt e => Int -> (Int -> e) -> Array (Int :*: e) -> Array e
+{-# INLINE_BACKEND bpermuteDft #-}
+
 update :: Elt a => Array a -> Array (Int :*: a) -> Array a
 {-# INLINE_BACKEND update #-}
 
index 2b97eea..7eb7111 100644 (file)
@@ -23,7 +23,9 @@ repeat n _ = repeatUP n
 extract = extractU
 drop = dropUP
 permute = permuteU
+bpermuteDft = bpermuteDftU
 bpermute = bpermuteUP
+mbpermute = mbpermuteU
 update = updateUP
 (+:+) = (U.+:+)
 pack = packUP
index 6af756e..28fc471 100644 (file)
@@ -22,6 +22,8 @@ extract = extractU
 drop = dropU
 permute = permuteU
 bpermute = bpermuteU
+mbpermute = mbpermuteU
+bpermuteDft = bpermuteDftU
 update = updateU
 (+:+) = (U.+:+)
 pack = packU
index 4ca28a7..76de578 100644 (file)
@@ -36,7 +36,7 @@ module Data.Array.Parallel.Unlifted.Sequential (
   {-takeWhileU, dropWhileU, spanU, breakU,-}
 
   -- * Permutations
-  permuteU, bpermuteU, bpermuteDftU, reverseU, updateU,
+  permuteU, mbpermuteU, bpermuteU, bpermuteDftU, reverseU, updateU,
 
 
   -- * Higher-order operations
index 159dadf..b3058a2 100644 (file)
@@ -41,7 +41,7 @@ module Data.Array.Parallel.Unlifted.Sequential.Flat (
   {-takeWhileU, dropWhileU, spanU, breakU,-}
 
   -- * Permutations
-  permuteU, bpermuteU, bpermuteDftU, reverseU, updateU,
+  permuteU, bpermuteU, mbpermuteU, bpermuteDftU, reverseU, updateU,
 
 
   -- * Higher-order operations
index f23d712..bd3b9b9 100644 (file)
@@ -21,7 +21,7 @@
 #include "fusion-phases.h"
 
 module Data.Array.Parallel.Unlifted.Sequential.Flat.Permute (
-  permuteU, permuteMU, bpermuteU, bpermuteDftU, reverseU, updateU,
+  permuteU, permuteMU, mbpermuteU, bpermuteU, bpermuteDftU, reverseU, updateU,
   atomicUpdateMU
 ) where
 
@@ -70,10 +70,20 @@ bpermuteU :: UA e => UArr e -> UArr Int -> UArr e
 {-# INLINE_U bpermuteU #-}
 bpermuteU es is = unstreamU (bpermuteUS es (streamU is))
 
+mbpermuteU:: (UA e, UA d) => (e -> d) -> UArr e -> UArr Int -> UArr d
+{-# INLINE_STREAM mbpermuteU #-}
+mbpermuteU f es is  = unstreamU (mbpermuteUS f es (streamU is))
+
+
+
 bpermuteUS :: UA e => UArr e -> Stream Int -> Stream e
 {-# INLINE_STREAM bpermuteUS #-}
 bpermuteUS !a = mapS (a!:)
 
+mbpermuteUS:: (UA e, UA d) => (e -> d) -> UArr e -> Stream Int -> Stream d
+{-# INLINE_STREAM mbpermuteUS #-}
+mbpermuteUS f !a = mapS (f . (a!:))
+
 -- |Default back permute
 --
 -- * The values of the index-value pairs are written into the position in the