futhark
Safe HaskellNone
LanguageGHC2021

Futhark.Pass.Flatten.Builtins

Synopsis

Documentation

data BuiltinFn Source #

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.

builtinFunDef :: BuiltinFn -> FunDef GPU Source #

Retrieve the function definition corresponding to a builtin.

genUniformSegHist :: (MonadBuilder m, Rep m ~ GPU) => SegLevel -> Name -> [SubExp] -> [HistOp SOACS] -> Lambda GPU -> [VName] -> ([SubExp] -> m ()) -> m [VName] 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 #

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 #

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.

doRepIota :: SegLevel -> VName -> FlattenM (VName, VName, VName) Source #

Produces [0,0,0,1,1,2,2,2,...]. Returns (flags, offsets, elems).

doSegIota :: SegLevel -> VName -> FlattenM (VName, VName, VName) Source #

[0,1,2,0,1,0,1,2,3,4,...]. Returns (flags,offsets,elems).