{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.Array.Accelerate.LLVM.PTX.CodeGen (
KernelMetadata(..),
) where
import Data.Array.Accelerate.LLVM.CodeGen
import Data.Array.Accelerate.LLVM.PTX.CodeGen.Base
import Data.Array.Accelerate.LLVM.PTX.CodeGen.Fold
import Data.Array.Accelerate.LLVM.PTX.CodeGen.FoldSeg
import Data.Array.Accelerate.LLVM.PTX.CodeGen.Generate
import Data.Array.Accelerate.LLVM.PTX.CodeGen.Intrinsic ()
import Data.Array.Accelerate.LLVM.PTX.CodeGen.Map
import Data.Array.Accelerate.LLVM.PTX.CodeGen.Permute
import Data.Array.Accelerate.LLVM.PTX.CodeGen.Scan
import Data.Array.Accelerate.LLVM.PTX.CodeGen.Stencil
import Data.Array.Accelerate.LLVM.PTX.CodeGen.Transform
import Data.Array.Accelerate.LLVM.PTX.Target
instance Skeleton PTX where
map :: UID
-> Gamma aenv
-> ArrayR (Array sh a)
-> TypeR b
-> IRFun1 PTX aenv (a -> b)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh b))
map UID
_ = Gamma aenv
-> ArrayR (Array sh a)
-> TypeR b
-> IRFun1 PTX aenv (a -> b)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh b))
forall aenv sh a b.
Gamma aenv
-> ArrayR (Array sh a)
-> TypeR b
-> IRFun1 PTX aenv (a -> b)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh b))
mkMap
generate :: UID
-> Gamma aenv
-> ArrayR (Array sh e)
-> IRFun1 PTX aenv (sh -> e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh e))
generate UID
_ = Gamma aenv
-> ArrayR (Array sh e)
-> IRFun1 PTX aenv (sh -> e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh e))
forall aenv sh e.
Gamma aenv
-> ArrayR (Array sh e)
-> IRFun1 PTX aenv (sh -> e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh e))
mkGenerate
transform :: UID
-> Gamma aenv
-> ArrayR (Array sh a)
-> ArrayR (Array sh' b)
-> IRFun1 PTX aenv (sh' -> sh)
-> IRFun1 PTX aenv (a -> b)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh' b))
transform UID
_ = Gamma aenv
-> ArrayR (Array sh a)
-> ArrayR (Array sh' b)
-> IRFun1 PTX aenv (sh' -> sh)
-> IRFun1 PTX aenv (a -> b)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh' b))
forall aenv sh a sh' b.
Gamma aenv
-> ArrayR (Array sh a)
-> ArrayR (Array sh' b)
-> IRFun1 PTX aenv (sh' -> sh)
-> IRFun1 PTX aenv (a -> b)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh' b))
mkTransform
fold :: UID
-> Gamma aenv
-> ArrayR (Array sh e)
-> IRFun2 PTX aenv (e -> e -> e)
-> Maybe (IRExp PTX aenv e)
-> MIRDelayed PTX aenv (Array (sh, Int) e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh e))
fold UID
_ = Gamma aenv
-> ArrayR (Array sh e)
-> IRFun2 PTX aenv (e -> e -> e)
-> Maybe (IRExp PTX aenv e)
-> MIRDelayed PTX aenv (Array (sh, Int) e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh e))
forall aenv sh e.
Gamma aenv
-> ArrayR (Array sh e)
-> IRFun2 PTX aenv (e -> e -> e)
-> Maybe (IRExp PTX aenv e)
-> MIRDelayed PTX aenv (Array (sh, Int) e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh e))
mkFold
foldSeg :: UID
-> Gamma aenv
-> ArrayR (Array (sh, Int) e)
-> IntegralType i
-> IRFun2 PTX aenv (e -> e -> e)
-> Maybe (IRExp PTX aenv e)
-> MIRDelayed PTX aenv (Array (sh, Int) e)
-> MIRDelayed PTX aenv (Segments i)
-> CodeGen PTX (IROpenAcc PTX aenv (Array (sh, Int) e))
foldSeg UID
_ = Gamma aenv
-> ArrayR (Array (sh, Int) e)
-> IntegralType i
-> IRFun2 PTX aenv (e -> e -> e)
-> Maybe (IRExp PTX aenv e)
-> MIRDelayed PTX aenv (Array (sh, Int) e)
-> MIRDelayed PTX aenv (Segments i)
-> CodeGen PTX (IROpenAcc PTX aenv (Array (sh, Int) e))
forall aenv sh i e.
Gamma aenv
-> ArrayR (Array (sh, Int) e)
-> IntegralType i
-> IRFun2 PTX aenv (e -> e -> e)
-> Maybe (IRExp PTX aenv e)
-> MIRDelayed PTX aenv (Array (sh, Int) e)
-> MIRDelayed PTX aenv (Segments i)
-> CodeGen PTX (IROpenAcc PTX aenv (Array (sh, Int) e))
mkFoldSeg
scan :: UID
-> Gamma aenv
-> ArrayR (Array (sh, Int) e)
-> Direction
-> IRFun2 PTX aenv (e -> e -> e)
-> Maybe (IRExp PTX aenv e)
-> MIRDelayed PTX aenv (Array (sh, Int) e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array (sh, Int) e))
scan UID
_ = Gamma aenv
-> ArrayR (Array (sh, Int) e)
-> Direction
-> IRFun2 PTX aenv (e -> e -> e)
-> Maybe (IRExp PTX aenv e)
-> MIRDelayed PTX aenv (Array (sh, Int) e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array (sh, Int) e))
forall aenv sh e.
Gamma aenv
-> ArrayR (Array (sh, Int) e)
-> Direction
-> IRFun2 PTX aenv (e -> e -> e)
-> Maybe (IRExp PTX aenv e)
-> MIRDelayed PTX aenv (Array (sh, Int) e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array (sh, Int) e))
mkScan
scan' :: UID
-> Gamma aenv
-> ArrayR (Array (sh, Int) e)
-> Direction
-> IRFun2 PTX aenv (e -> e -> e)
-> IRExp PTX aenv e
-> MIRDelayed PTX aenv (Array (sh, Int) e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array (sh, Int) e, Array sh e))
scan' UID
_ = Gamma aenv
-> ArrayR (Array (sh, Int) e)
-> Direction
-> IRFun2 PTX aenv (e -> e -> e)
-> IRExp PTX aenv e
-> MIRDelayed PTX aenv (Array (sh, Int) e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array (sh, Int) e, Array sh e))
forall aenv sh e.
Gamma aenv
-> ArrayR (Array (sh, Int) e)
-> Direction
-> IRFun2 PTX aenv (e -> e -> e)
-> IRExp PTX aenv e
-> MIRDelayed PTX aenv (Array (sh, Int) e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array (sh, Int) e, Array sh e))
mkScan'
permute :: UID
-> Gamma aenv
-> ArrayR (Array sh e)
-> ShapeR sh'
-> IRPermuteFun PTX aenv (e -> e -> e)
-> IRFun1 PTX aenv (sh -> PrimMaybe sh')
-> MIRDelayed PTX aenv (Array sh e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh' e))
permute UID
_ = Gamma aenv
-> ArrayR (Array sh e)
-> ShapeR sh'
-> IRPermuteFun PTX aenv (e -> e -> e)
-> IRFun1 PTX aenv (sh -> PrimMaybe sh')
-> MIRDelayed PTX aenv (Array sh e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh' e))
forall aenv sh e sh'.
HasCallStack =>
Gamma aenv
-> ArrayR (Array sh e)
-> ShapeR sh'
-> IRPermuteFun PTX aenv (e -> e -> e)
-> IRFun1 PTX aenv (sh -> PrimMaybe sh')
-> MIRDelayed PTX aenv (Array sh e)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh' e))
mkPermute
stencil1 :: UID
-> Gamma aenv
-> StencilR sh a stencil
-> TypeR b
-> IRFun1 PTX aenv (stencil -> b)
-> IRBoundary PTX aenv (Array sh a)
-> MIRDelayed PTX aenv (Array sh a)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh b))
stencil1 UID
_ = Gamma aenv
-> StencilR sh a stencil
-> TypeR b
-> IRFun1 PTX aenv (stencil -> b)
-> IRBoundary PTX aenv (Array sh a)
-> MIRDelayed PTX aenv (Array sh a)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh b))
forall aenv sh a stencil b.
Gamma aenv
-> StencilR sh a stencil
-> TypeR b
-> IRFun1 PTX aenv (stencil -> b)
-> IRBoundary PTX aenv (Array sh a)
-> MIRDelayed PTX aenv (Array sh a)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh b))
mkStencil1
stencil2 :: UID
-> Gamma aenv
-> StencilR sh a stencil1
-> StencilR sh b stencil2
-> TypeR c
-> IRFun2 PTX aenv (stencil1 -> stencil2 -> c)
-> IRBoundary PTX aenv (Array sh a)
-> MIRDelayed PTX aenv (Array sh a)
-> IRBoundary PTX aenv (Array sh b)
-> MIRDelayed PTX aenv (Array sh b)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh c))
stencil2 UID
_ = Gamma aenv
-> StencilR sh a stencil1
-> StencilR sh b stencil2
-> TypeR c
-> IRFun2 PTX aenv (stencil1 -> stencil2 -> c)
-> IRBoundary PTX aenv (Array sh a)
-> MIRDelayed PTX aenv (Array sh a)
-> IRBoundary PTX aenv (Array sh b)
-> MIRDelayed PTX aenv (Array sh b)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh c))
forall aenv sh a stencil1 b stencil2 c.
Gamma aenv
-> StencilR sh a stencil1
-> StencilR sh b stencil2
-> TypeR c
-> IRFun2 PTX aenv (stencil1 -> stencil2 -> c)
-> IRBoundary PTX aenv (Array sh a)
-> MIRDelayed PTX aenv (Array sh a)
-> IRBoundary PTX aenv (Array sh b)
-> MIRDelayed PTX aenv (Array sh b)
-> CodeGen PTX (IROpenAcc PTX aenv (Array sh c))
mkStencil2