[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