| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
Futhark.Pass.Flatten.Builtins
Synopsis
- data BuiltinFn
- builtinFunDef :: BuiltinFn -> FunDef GPU
- determineReduceOp :: MonadBuilder m => Lambda SOACS -> [SubExp] -> m (Lambda SOACS, [SubExp], Shape)
- genUniformSegHist :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> [SubExp] -> [HistOp SOACS] -> Lambda GPU -> [VName] -> ([SubExp] -> m ()) -> m [VName]
- mkSegSpace :: MonadFreshNames m => [(VName, SubExp)] -> m SegSpace
- segMap :: (MonadBuilder m, Rep m ~ GPU, Traversable f) => SegLevel -> f SubExp -> (f SubExp -> m Result) -> m (Exp GPU)
- genFlags :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> SubExp -> VName -> m VName
- genScan :: (Traversable f, MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> f SubExp -> Lambda GPU -> [SubExp] -> [VName] -> m [VName]
- genFilter :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> VName -> m (SubExp, VName)
- genSegScan :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> Lambda GPU -> [SubExp] -> VName -> [VName] -> m [VName]
- genSegScanomap :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> Lambda GPU -> [SubExp] -> VName -> Lambda GPU -> [VName] -> ([SubExp] -> m ()) -> m [VName]
- genSegScanomapWithPost :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> Lambda GPU -> [SubExp] -> VName -> Lambda GPU -> Lambda GPU -> [VName] -> ([SubExp] -> m ()) -> m [VName]
- genNonSegRed :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> [SubExp] -> Reduce GPU -> Shape -> Lambda GPU -> [VName] -> m [VName]
- genUniformSegScanomapWithPost :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> [SubExp] -> Name -> Lambda GPU -> Shape -> [SubExp] -> Lambda GPU -> Lambda GPU -> [VName] -> ([SubExp] -> m ()) -> m [VName]
- genUniformSegRed :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> [SubExp] -> [Reduce GPU] -> Shape -> Lambda GPU -> [VName] -> ([SubExp] -> m ()) -> m [VName]
- genSegRed :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> VName -> VName -> VName -> [VName] -> Reduce SOACS -> m [VName]
- genSegRedomap :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> VName -> VName -> VName -> [VName] -> Reduce SOACS -> Lambda GPU -> ([SubExp] -> m ()) -> m ([VName], [VName])
- genScatter :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> VName -> SubExp -> (SubExp -> m (VName, SubExp)) -> m (Exp GPU)
- genScatterND :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> VName -> [SubExp] -> ([SubExp] -> m ([SubExp], SubExp)) -> m (Exp GPU)
- genShapeIota :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Shape -> m VName
- exScanAndSum :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> VName -> m (SubExp, VName, SubExp)
- genExPrefixSum :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> VName -> m VName
- genSegPrefixSum :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> VName -> VName -> m VName
- doRepIota :: SegLevel -> VName -> FlattenM (VName, VName, VName)
- doSegIota :: SegLevel -> VName -> FlattenM (VName, VName, VName)
- doPrefixSum :: SegLevel -> VName -> FlattenM VName
- doPartition :: SegLevel -> VName -> VName -> FlattenM (VName, VName, VName)
Documentation
A representation of the different kinds of builtin functions we can generate. This is used to only generate the ones we actually need for a given program.
Constructors
| BuiltinSegIota | |
| BuiltinRepIota | |
| BuiltinPrefixSum | |
| BuiltinPartition |
Instances
| Show BuiltinFn Source # | |
| Eq BuiltinFn Source # | |
| Ord BuiltinFn Source # | |
builtinFunDef :: BuiltinFn -> FunDef GPU Source #
Retrieve the function definition corresponding to a builtin.
determineReduceOp :: MonadBuilder m => Lambda SOACS -> [SubExp] -> m (Lambda SOACS, [SubExp], Shape) Source #
genUniformSegHist :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> [SubExp] -> [HistOp SOACS] -> Lambda GPU -> [VName] -> ([SubExp] -> m ()) -> m [VName] Source #
mkSegSpace :: MonadFreshNames m => [(VName, SubExp)] -> m SegSpace Source #
segMap :: (MonadBuilder m, Rep m ~ GPU, Traversable f) => SegLevel -> f SubExp -> (f SubExp -> m Result) -> m (Exp GPU) Source #
genScan :: (Traversable f, MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> f SubExp -> Lambda GPU -> [SubExp] -> [VName] -> m [VName] Source #
genSegScan :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> Lambda GPU -> [SubExp] -> VName -> [VName] -> m [VName] Source #
genSegScanomap :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> Lambda GPU -> [SubExp] -> VName -> Lambda GPU -> [VName] -> ([SubExp] -> m ()) -> m [VName] Source #
genSegScanomapWithPost :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> Lambda GPU -> [SubExp] -> VName -> Lambda GPU -> Lambda GPU -> [VName] -> ([SubExp] -> m ()) -> m [VName] Source #
genNonSegRed :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> [SubExp] -> Reduce GPU -> Shape -> Lambda GPU -> [VName] -> m [VName] Source #
genUniformSegScanomapWithPost :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> [SubExp] -> Name -> Lambda GPU -> Shape -> [SubExp] -> Lambda GPU -> Lambda GPU -> [VName] -> ([SubExp] -> m ()) -> m [VName] Source #
genUniformSegRed :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> [SubExp] -> [Reduce GPU] -> Shape -> Lambda GPU -> [VName] -> ([SubExp] -> m ()) -> m [VName] Source #
genSegRed :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> VName -> VName -> VName -> [VName] -> Reduce SOACS -> m [VName] Source #
genSegRedomap :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> VName -> VName -> VName -> [VName] -> Reduce SOACS -> Lambda GPU -> ([SubExp] -> m ()) -> m ([VName], [VName]) Source #
genScatter :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> VName -> SubExp -> (SubExp -> m (VName, SubExp)) -> m (Exp GPU) Source #
Convenience wrapper around genScatterND for one-dimensional
destinations.
genScatterND :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> VName -> [SubExp] -> ([SubExp] -> m ([SubExp], SubExp)) -> m (Exp GPU) Source #
genShapeIota :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Shape -> m VName Source #
Produces a multidimensional iota for the given shape.
exScanAndSum :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> VName -> m (SubExp, VName, SubExp) Source #
genSegPrefixSum :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> VName -> VName -> m VName Source #
doRepIota :: SegLevel -> VName -> FlattenM (VName, VName, VName) Source #
Produces [0,0,0,1,1,2,2,2,...]. Returns (flags, offsets,
elems).