accelerate-cublas-0.0: src/Data/Array/Accelerate/CUBLAS/Level2/Batched.hs
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
module Data.Array.Accelerate.CUBLAS.Level2.Batched (
Level3.Element,
mul,
mac,
) where
import qualified Data.Array.Accelerate.CUBLAS.Level3.Batched as Level3
import Data.Array.Accelerate.CUBLAS.Level3.Batched (Element)
import qualified Data.Array.Accelerate.Arithmetic.LinearAlgebra as ALinAlg
import qualified Data.Array.Accelerate as A
import Data.Array.Accelerate (Exp)
import qualified Foreign.CUDA.Cublas as Cublas
mul ::
(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.Vector ix a ->
ALinAlg.Vector ix a
mul handle alpha a b =
ALinAlg.vectorFromColumn $
Level3.mul handle alpha a (ALinAlg.columnFromVector b)
mac ::
(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.Vector ix a ->
Exp a -> ALinAlg.Vector ix a ->
ALinAlg.Vector ix a
mac handle alpha a b beta c =
A.reshape (A.shape c) $
Level3.mac handle
alpha a (ALinAlg.columnFromVector b)
beta (ALinAlg.columnFromVector c)