[commit: dph] master: Add new Reverse example. (02a822e)

Ben Lippmeier benl at ouroborus.net
Wed Apr 20 04:03:47 CEST 2011


Repository : ssh://darcs.haskell.org//srv/darcs/packages/dph

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/02a822e84c1d8dcbd40de7f8c7ea8950e859793e

>---------------------------------------------------------------

commit 02a822e84c1d8dcbd40de7f8c7ea8950e859793e
Author: Ben Lippmeier <benl at ouroborus.net>
Date:   Thu Apr 14 13:21:32 2011 +1000

    Add new Reverse example.

>---------------------------------------------------------------

 dph-examples/broken/Reverse/dph/ReverseVector.hs   |   21 ++++++++++++++++++++
 .../{Reverse.hs => dph/ReverseVectorised.hs}       |   18 ++++------------
 2 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/dph-examples/broken/Reverse/dph/ReverseVector.hs b/dph-examples/broken/Reverse/dph/ReverseVector.hs
new file mode 100644
index 0000000..42a10b4
--- /dev/null
+++ b/dph-examples/broken/Reverse/dph/ReverseVector.hs
@@ -0,0 +1,21 @@
+
+module ReverseVector
+	(treeReverse)
+where
+import qualified Data.Vector.Unboxed as V
+import Data.Vector.Unboxed		(Vector)
+
+-- | Reverse the elements in an array using a tree.
+treeReverse :: Vector Double -> Vector Double
+{-# NOINLINE treeReverse #-}
+treeReverse xx
+	| V.length xx == 1
+	= xx
+	
+	| otherwise
+	= let	len	= V.length xx
+		half	= len `div` 2
+		s1	= V.slice 0    half  xx
+		s2	= V.slice half half  xx		
+	  in	treeReverse s2 V.++ treeReverse s1
+
diff --git a/dph-examples/broken/Reverse/Reverse.hs b/dph-examples/broken/Reverse/dph/ReverseVectorised.hs
similarity index 63%
rename from dph-examples/broken/Reverse/Reverse.hs
rename to dph-examples/broken/Reverse/dph/ReverseVectorised.hs
index 2d1fb89..2a3f97b 100644
--- a/dph-examples/broken/Reverse/Reverse.hs
+++ b/dph-examples/broken/Reverse/dph/ReverseVectorised.hs
@@ -1,6 +1,6 @@
-{-# LANGUAGE PArr #-}
+{-# LANGUAGE ParallelArrays #-}
 {-# OPTIONS -fvectorise #-}
-module Reverse	
+module ReverseVectorised	
 	(treeReversePA)
 where
 import Data.Array.Parallel.Prelude
@@ -14,6 +14,7 @@ treeReversePA :: PArray Double -> PArray Double
 treeReversePA ps
 	= toPArrayP (treeReverse (fromPArrayP ps))
 
+
 -- | Reverse the elements in an array using a tree.
 treeReverse :: [:Double:] -> [:Double:]
 {-# NOINLINE treeReverse #-}
@@ -24,15 +25,6 @@ treeReverse xx
 	| otherwise
 	= let	len	= lengthP xx
 		half	= len `Int.div` 2
-
-		-- adding the call to evens here kills it
-{-		s1	= [: x 	| (ix, x) 
-				<- zipP (Int.enumFromToP 0 (len Int.- 1)) xx
-				,  Int.mod ix 2 Int.== 0 :]
--}
---		s1	= [: x 	| (ix, x) 
---				<- zipP (Int.enumFromToP 0 (half Int.- 1)) (sliceP 0 half xx) :]
-
 		s1	= sliceP 0    half xx
-		s2	= sliceP half len  xx
-	  in	treeReverse s2 +:+ treeReverse s1
+		s2	= sliceP half half xx		
+	  in	concatP (mapP treeReverse [:s1, s2:])





More information about the Cvs-libraries mailing list