accelerate-utility 0.1.1 → 1.0.0.1
raw patch · 6 files changed
Files
- accelerate-utility.cabal +5/−5
- src/Data/Array/Accelerate/Utility/Lift/Run.hs +2/−2
- src/Data/Array/Accelerate/Utility/Loop.hs +4/−14
- src/Data/Array/Accelerate/Utility/Ord.hs +7/−8
- src/Data/Array/Accelerate/Utility/Sliced.hs +6/−7
- src/Data/Array/Accelerate/Utility/Sliced1.hs +5/−6
accelerate-utility.cabal view
@@ -1,5 +1,5 @@ Name: accelerate-utility-Version: 0.1.1+Version: 1.0.0.1 License: BSD3 License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -11,11 +11,11 @@ Several utility functions on top of the Accelerate framework. The functions simplify working with indices and lifting and unlifting. Tested-With: GHC==7.8.3-Cabal-Version: >=1.14+Cabal-Version: 1.14 Build-Type: Simple Source-Repository this- Tag: 0.1.1+ Tag: 1.0.0.1 Type: darcs Location: http://hub.darcs.net/thielema/accelerate-utility/ @@ -25,9 +25,9 @@ Library Build-Depends:- accelerate >=0.15 && <0.16,+ accelerate >=1.0 && <1.2, utility-ht >=0.0.8 && <0.1,- base >=4.5 && <4.10+ base >=4.5 && <5 GHC-Options: -Wall -fwarn-missing-import-lists Hs-Source-Dirs: src
src/Data/Array/Accelerate/Utility/Lift/Run.hs view
@@ -82,13 +82,13 @@ with1 :: (A.Arrays a) => ((Acc (Arguments a f) -> Acc (Result f)) ->- ((Arguments a f) -> Result f)) ->+ (Arguments a f -> Result f)) -> (Acc a -> f) -> a -> Plain f with :: (C f) => ((Acc (Arguments () f) -> Acc (Result f)) ->- ((Arguments () f) -> Result f)) ->+ (Arguments () f -> Result f)) -> f -> Plain f with run f = with1 run (const f) ()
src/Data/Array/Accelerate/Utility/Loop.hs view
@@ -14,34 +14,24 @@ nest n0 f x0 = A.asnd $ A.awhile- (A.map (A.>* 0) . A.afst)+ (A.map (A.> 0) . A.afst) (A.lift . (\(n, x) -> (A.map (subtract 1) n, f x)) . A.unlift) (A.lift (A.unit n0, x0)) _nest n0 f x0 = A.asnd $ A.awhile- (A.unit . (A.>* 0) . A.the . A.afst)+ (A.unit . (A.> 0) . A.the . A.afst) (A.lift . (\(n, x) -> (A.unit $ A.the n - 1, f x)) . A.unlift) (A.lift (A.unit n0, x0)) -nestLog2, _nestLog2 ::+nestLog2 :: (A.Arrays a) => Exp Int -> (Acc a -> Acc a) -> Acc a -> Acc a nestLog2 n0 f x0 = A.asnd $ A.awhile- (A.map (A.>* 1) . A.afst)+ (A.map (A.> 1) . A.afst) (A.lift . (\(n, x) -> (A.map (flip div 2 . (1+)) n, f x)) . A.unlift) (A.lift (A.unit n0, x0))--{--This is an infinite loop,-because A.acond always has to generate code for both branches.--}-_nestLog2 n0 f x0 =- let go n x =- A.acond (n A.<=* 1) x $- go (div (n+1) 2) (f x)- in go n0 x0
src/Data/Array/Accelerate/Utility/Ord.hs view
@@ -4,27 +4,26 @@ import qualified Data.Array.Accelerate as A import Data.Array.Accelerate- (Exp, Acc, Array, Elt, Slice, Shape, IsScalar, Scalar,- (?), (<=*), )+ (Exp, Acc, Array, Elt, Slice, Shape, Scalar, (?), ) argmin ::- (Elt a, Elt b, IsScalar a) =>+ (Elt a, Elt b, A.Ord a) => Exp (a, b) -> Exp (a, b) -> Exp (a, b)-argmin x y = A.fst x <=* A.fst y ? (x,y)+argmin x y = A.fst x A.<= A.fst y ? (x,y) argminimum ::- (Slice sh, Shape sh, Elt a, Elt b, IsScalar a) =>+ (Slice sh, Shape sh, Elt a, Elt b, A.Ord a) => Acc (Array sh (a, b)) -> Acc (Scalar (a, b)) argminimum = A.fold1All argmin argmax ::- (Elt a, Elt b, IsScalar a) =>+ (Elt a, Elt b, A.Ord a) => Exp (a, b) -> Exp (a, b) -> Exp (a, b)-argmax x y = A.fst x <=* A.fst y ? (y,x)+argmax x y = A.fst x A.<= A.fst y ? (y,x) argmaximum ::- (Slice sh, Shape sh, Elt a, Elt b, IsScalar a) =>+ (Slice sh, Shape sh, Elt a, Elt b, A.Ord a) => Acc (Array sh (a, b)) -> Acc (A.Scalar (a, b)) argmaximum = A.fold1All argmax
src/Data/Array/Accelerate/Utility/Sliced.hs view
@@ -10,8 +10,7 @@ import qualified Data.Array.Accelerate as A import Data.Array.Accelerate- (Exp, Acc, Array, Elt, Slice, Shape, DIM2, (:.)((:.)),- (!), (?), (>*), (==*), )+ (Exp, Acc, Array, Elt, Slice, Shape, DIM2, (:.)((:.)), (!), (?), ) length ::@@ -49,7 +48,7 @@ (\(sh :. n) -> sh :. n+1) (A.shape xs)) (Exp.modify (expr:.expr) $- \(ix:.k) -> k ==* 0 ? (x ! ix, xs ! A.lift (ix :. k-1)))+ \(ix:.k) -> k A.== 0 ? (x ! ix, xs ! A.lift (ix :. k-1))) consExp :: (Shape sh, Slice sh, Elt a) =>@@ -62,7 +61,7 @@ (\(z :. n) -> z :. n+1) (A.shape xs)) (Exp.modify (expr:.expr) $- \(ix:.k) -> k ==* 0 ? (x, xs ! A.lift (ix :. k-1)))+ \(ix:.k) -> k A.== 0 ? (x, xs ! A.lift (ix :. k-1))) append3 ::@@ -90,8 +89,8 @@ \(globalIx :. k :. j) -> let ix = A.lift $ globalIx :. j in flip (A.caseof k) (x ! ix) $- ((==* 1), (y ! ix)) :- ((==* 2), (z ! ix)) :+ ((A.== 1), (y ! ix)) :+ ((A.== 2), (z ! ix)) : []) @@ -120,7 +119,7 @@ let sh:.m = Exp.unlift (expr:.expr) $ A.shape arr in A.generate (A.lift $ sh:.n)- (\ix -> m >* A.indexHead ix ? (arr!ix, x))+ (\ix -> m A.> A.indexHead ix ? (arr!ix, x)) {- |
src/Data/Array/Accelerate/Utility/Sliced1.hs view
@@ -10,8 +10,7 @@ import qualified Data.Array.Accelerate as A import Data.Array.Accelerate- (Exp, Acc, Array, Elt, (:.)((:.)), Slice, Shape,- (!), (?), (>*), (==*), )+ (Exp, Acc, Array, Elt, (:.)((:.)), Slice, Shape, (!), (?), ) length ::@@ -50,7 +49,7 @@ (A.shape xs)) (Exp.modify (expr:.expr:.expr) $ \(ix:.k:.j) ->- k ==* 0 ? (x ! A.lift (ix:.j), xs ! A.lift (ix :. k-1 :. j)))+ k A.== 0 ? (x ! A.lift (ix:.j), xs ! A.lift (ix :. k-1 :. j))) {- | The outer and innermost dimensions must match.@@ -66,7 +65,7 @@ (_shy:.ny:.leny) = Exp.unlift (expr:.expr:.expr) $ A.shape y in A.generate (A.lift $ shx :. nx+ny :. max lenx leny) $ Exp.modify (expr:.expr:.expr) $ \(ix:.k:.j) ->- nx >* k ? (x ! A.lift (ix:.k:.j), y ! A.lift (ix:.k-nx:.j))+ nx A.> k ? (x ! A.lift (ix:.k:.j), y ! A.lift (ix:.k-nx:.j)) append3 :: (Shape sh, Slice sh, Elt a) =>@@ -93,8 +92,8 @@ \(globalIx :. k :. j :. i) -> let ix = A.lift $ globalIx :. j :. i in flip (A.caseof k) (x ! ix) $- ((==* 1), (y ! ix)) :- ((==* 2), (z ! ix)) :+ ((A.== 1), (y ! ix)) :+ ((A.== 2), (z ! ix)) : [])