accelerate-arithmetic 0.0 → 0.0.1
raw patch · 4 files changed
+60/−14 lines, 4 filesdep ~accelerate-utilityPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: accelerate-utility
API changes (from Hackage documentation)
+ Data.Array.Accelerate.Arithmetic.LinearAlgebra: columnFromVector :: (Shape ix, Slice ix, Elt a) => Vector ix a -> Matrix ix a
+ Data.Array.Accelerate.Arithmetic.LinearAlgebra: vectorFromColumn :: (Shape ix, Slice ix, Elt a) => Matrix ix a -> Vector ix a
+ Data.Array.Accelerate.Arithmetic.LinearAlgebra: zipExtrudedMatrixWith :: (Slice ix, Shape ix, Elt a, Elt b, Elt c) => (Exp a -> Exp b -> Exp c) -> Matrix Z a -> Matrix ix b -> Matrix ix c
+ Data.Array.Accelerate.Arithmetic.LinearAlgebra: zipExtrudedVectorWith :: (Slice ix, Shape ix, Elt a, Elt b, Elt c) => (Exp a -> Exp b -> Exp c) -> Vector Z a -> Vector ix b -> Vector ix c
Files
- accelerate-arithmetic.cabal +3/−3
- benchmark/CUBLASBatched.hs +19/−9
- src/Data/Array/Accelerate/Arithmetic/LinearAlgebra.hs +36/−0
- src/Data/Array/Accelerate/Arithmetic/Sparse.hs +2/−2
accelerate-arithmetic.cabal view
@@ -1,5 +1,5 @@ Name: accelerate-arithmetic-Version: 0.0+Version: 0.0.1 License: BSD3 License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -17,7 +17,7 @@ Build-Type: Simple Source-Repository this- Tag: 0.0+ Tag: 0.0.1 Type: darcs Location: http://code.haskell.org/~thielema/accelerate-arithmetic/ @@ -27,7 +27,7 @@ Library Build-Depends:- accelerate-utility >=0.0 && <0.1,+ accelerate-utility >=0.1 && <0.2, accelerate >=0.15 && <0.16, utility-ht >=0.0.8 && <0.1, QuickCheck >=2.4 && <2.8,
benchmark/CUBLASBatched.hs view
@@ -6,6 +6,9 @@ import qualified Data.Array.Accelerate.Arithmetic.LinearAlgebra as ALinAlg +import qualified Data.Array.Accelerate.Utility.Lift.Acc as Acc+import Data.Array.Accelerate.Utility.Lift.Acc (acc, expr)+ import Data.Array.Accelerate.Array.Sugar (EltRepr) import Data.Array.Accelerate (Array, DIM3, Acc, Z (..), (:.) (..), Exp) import qualified Data.Array.Accelerate.CUDA.Foreign as AF@@ -26,7 +29,7 @@ type Scalar ix = Array ix mul ::- (A.Shape ix, Eq ix, Element a, A.Elt a) =>+ (A.Shape ix, A.Slice ix, Eq ix, Element a, A.Elt a, A.IsNum a) => Cublas.Handle -> Exp a -> ALinAlg.Matrix ix a -> ALinAlg.Matrix ix a ->@@ -34,7 +37,9 @@ mul handle alpha a b = A.foreignAcc (AF.CUDAForeignAcc "mul" $ uncurry3 $ mulPlain handle)- (error "Requires CUDA backend")+ (Acc.modify (expr,acc,acc) $ \(alpha0, a0, b0) ->+ A.map (alpha0 *) $+ ALinAlg.multiplyMatrixMatrix a0 b0) $ A.lift (A.unit alpha, a, b) @@ -54,7 +59,7 @@ (pas, lda) <- arrayPtrs a (pbs, ldb) <- arrayPtrs b (pcs, ldc) <- arrayPtrs c- AF.liftIO $ do+ AF.liftIO $ Cublas.gemmBatched handle Cublas.N Cublas.N m n k (storableFromScalar alpha) pbs ldb@@ -65,7 +70,7 @@ return c mac ::- (A.Shape ix, Eq ix, Element a, A.Elt a) =>+ (A.Shape ix, A.Slice ix, Eq ix, Element a, A.Elt a, A.IsNum a) => Cublas.Handle -> Exp a -> ALinAlg.Matrix ix a -> ALinAlg.Matrix ix a -> Exp a -> ALinAlg.Matrix ix a ->@@ -73,11 +78,16 @@ mac handle alpha a b beta c = A.foreignAcc (AF.CUDAForeignAcc "mac" $- \(aalpha, aa, ab, abeta, ac) ->- macPlain handle aalpha aa ab abeta ac)- (error "Requires CUDA backend")+ \((alpha0, a0, b0), (beta0, c0)) ->+ macPlain handle alpha0 a0 b0 beta0 c0)+ (Acc.modify ((expr,acc,acc),(expr,acc)) $+ \((alpha0, a0, b0), (beta0, c0)) ->+ A.zipWith (+)+ (A.map (alpha0 *) $+ ALinAlg.multiplyMatrixMatrix a0 b0)+ (A.map (beta0 *) c0)) $- A.lift (A.unit alpha, a, b, A.unit beta, c)+ A.lift ((A.unit alpha, a, b), (A.unit beta, c)) macPlain :: (A.Shape ix, Eq ix, Element a, A.Elt a) =>@@ -100,7 +110,7 @@ (pas, lda) <- arrayPtrs a (pbs, ldb) <- arrayPtrs b (pds, ldd) <- arrayPtrs d- AF.liftIO $ do+ AF.liftIO $ Cublas.gemmBatched handle Cublas.N Cublas.N m n k (storableFromScalar alpha) pbs ldb
src/Data/Array/Accelerate/Arithmetic/LinearAlgebra.hs view
@@ -3,6 +3,7 @@ module Data.Array.Accelerate.Arithmetic.LinearAlgebra where import qualified Data.Array.Accelerate.Utility.Loop as Loop+import qualified Data.Array.Accelerate.Utility.Lift.Exp as Exp import qualified Data.Array.Accelerate.Utility.Arrange as Arrange import qualified Data.Array.Accelerate as A import Data.Array.Accelerate@@ -149,6 +150,23 @@ A.zipWith f (A.replicate (A.lift (Any :. rows :. cols)) x) ys +++columnFromVector ::+ (A.Shape ix, A.Slice ix, A.Elt a) =>+ Vector ix a -> Matrix ix a+columnFromVector a = A.reshape (Exp.indexCons (A.shape a) 1) a++{- |+input must be a matrix with exactly one column+-}+vectorFromColumn ::+ (A.Shape ix, A.Slice ix, A.Elt a) =>+ Matrix ix a -> Vector ix a+vectorFromColumn a = A.reshape (A.indexTail $ A.shape a) a+++ flattenMatrix, flattenMatrixReshape, flattenMatrixBackPermute :: (A.Slice ix, A.Shape ix, A.Elt a) => Matrix ix a -> Vector ix a@@ -210,6 +228,24 @@ (A.lift $ shape :. numRows y :. numCols y) (withMatrixIndex $ \(_:.r:.c) -> Z:.r:.c) y++zipExtrudedVectorWith ::+ (A.Slice ix, A.Shape ix, A.Elt a, A.Elt b, A.Elt c) =>+ (Exp a -> Exp b -> Exp c) ->+ Vector Z a ->+ Vector ix b ->+ Vector ix c+zipExtrudedVectorWith f x y =+ A.zipWith f (extrudeVector (A.indexTail $ A.shape y) x) y++zipExtrudedMatrixWith ::+ (A.Slice ix, A.Shape ix, A.Elt a, A.Elt b, A.Elt c) =>+ (Exp a -> Exp b -> Exp c) ->+ Matrix Z a ->+ Matrix ix b ->+ Matrix ix c+zipExtrudedMatrixWith f x y =+ A.zipWith f (extrudeMatrix (A.indexTail $ A.indexTail $ A.shape y) x) y gatherFromVector :: (A.Shape ix, A.Elt a) =>
src/Data/Array/Accelerate/Arithmetic/Sparse.hs view
@@ -5,7 +5,7 @@ import qualified Data.Array.Accelerate.Utility.Lift.Exp as Exp import qualified Data.Array.Accelerate.Utility.Arrange as Arrange import qualified Data.Array.Accelerate as A-import Data.Array.Accelerate.Utility.Lift.Exp (atom, )+import Data.Array.Accelerate.Utility.Lift.Exp (expr, ) import Data.Array.Accelerate.Arithmetic.LinearAlgebra (Matrix, Vector, matrixShape, )@@ -101,7 +101,7 @@ (_ :. xRows :. _xCols, _ :. _yRows :. yCols) -> -- it must be xCols == yRows A.zipWith- (Exp.modify2 (atom,atom) (atom,atom) $+ (Exp.modify2 (expr,expr) (expr,expr) $ \(n,xi) (m,yi) -> ((n, m), xi*yi)) (A.replicate (A.lift $ Any :. All :. All :. yCols) x) (A.replicate (A.lift $ Any :. xRows :. All :. All) y)