Safe Haskell | None |
---|---|
Language | Haskell2010 |
This module contains a representation for the index function based on linear-memory accessor descriptors; see Zhu, Hoeflinger and David work.
Synopsis
- data IxFun num = IxFun {
- ixfunLMADs :: NonEmpty (LMAD num)
- base :: Shape num
- ixfunContig :: Bool
- index :: (IntegralExp num, Eq num) => IxFun num -> Indices num -> num
- iota :: IntegralExp num => Shape num -> IxFun num
- offsetIndex :: (Eq num, IntegralExp num) => IxFun num -> num -> IxFun num
- strideIndex :: (Eq num, IntegralExp num) => IxFun num -> num -> IxFun num
- permute :: IntegralExp num => IxFun num -> Permutation -> IxFun num
- rotate :: (Eq num, IntegralExp num) => IxFun num -> Indices num -> IxFun num
- reshape :: (Eq num, IntegralExp num) => IxFun num -> ShapeChange num -> IxFun num
- slice :: (Eq num, IntegralExp num) => IxFun num -> Slice num -> IxFun num
- rebase :: (Eq num, IntegralExp num) => IxFun num -> IxFun num -> IxFun num
- repeat :: (Eq num, IntegralExp num) => IxFun num -> [Shape num] -> Shape num -> IxFun num
- isContiguous :: (Eq num, IntegralExp num) => IxFun num -> Bool
- shape :: (Eq num, IntegralExp num) => IxFun num -> Shape num
- rank :: IntegralExp num => IxFun num -> Int
- linearWithOffset :: (Eq num, IntegralExp num) => IxFun num -> num -> Maybe num
- rearrangeWithOffset :: (Eq num, IntegralExp num) => IxFun num -> num -> Maybe (num, [(Int, num)])
- isDirect :: (Eq num, IntegralExp num) => IxFun num -> Bool
- isLinear :: (Eq num, IntegralExp num) => IxFun num -> Bool
- substituteInIxFun :: Ord a => Map a (PrimExp a) -> IxFun (PrimExp a) -> IxFun (PrimExp a)
Documentation
IxFun | |
|
Instances
Functor IxFun Source # | |
Foldable IxFun Source # | |
Defined in Futhark.Representation.ExplicitMemory.IndexFunction fold :: Monoid m => IxFun m -> m # foldMap :: Monoid m => (a -> m) -> IxFun a -> m # foldr :: (a -> b -> b) -> b -> IxFun a -> b # foldr' :: (a -> b -> b) -> b -> IxFun a -> b # foldl :: (b -> a -> b) -> b -> IxFun a -> b # foldl' :: (b -> a -> b) -> b -> IxFun a -> b # foldr1 :: (a -> a -> a) -> IxFun a -> a # foldl1 :: (a -> a -> a) -> IxFun a -> a # elem :: Eq a => a -> IxFun a -> Bool # maximum :: Ord a => IxFun a -> a # minimum :: Ord a => IxFun a -> a # | |
Traversable IxFun Source # | |
Eq num => Eq (IxFun num) Source # | |
Show num => Show (IxFun num) Source # | |
Pretty num => Pretty (IxFun num) Source # | |
FreeIn num => FreeIn (IxFun num) Source # | |
Substitute num => Substitute (IxFun num) Source # | |
Substitute num => Rename (IxFun num) Source # | |
index :: (IntegralExp num, Eq num) => IxFun num -> Indices num -> num Source #
Compute the flat memory index for a complete set inds
of array indices
and a certain element size elem_size
.
iota :: IntegralExp num => Shape num -> IxFun num Source #
iota.
offsetIndex :: (Eq num, IntegralExp num) => IxFun num -> num -> IxFun num Source #
Offset index. Results in the index function corresponding to indexing with
i
on the outermost dimension.
strideIndex :: (Eq num, IntegralExp num) => IxFun num -> num -> IxFun num Source #
Stride index. Results in the index function corresponding to making the
outermost dimension strided by s
.
rotate :: (Eq num, IntegralExp num) => IxFun num -> Indices num -> IxFun num Source #
Rotate an index function.
reshape :: (Eq num, IntegralExp num) => IxFun num -> ShapeChange num -> IxFun num Source #
Reshape an index function.
slice :: (Eq num, IntegralExp num) => IxFun num -> Slice num -> IxFun num Source #
Slice an index function.
rebase :: (Eq num, IntegralExp num) => IxFun num -> IxFun num -> IxFun num Source #
Rebase an index function on top of a new base.
repeat :: (Eq num, IntegralExp num) => IxFun num -> [Shape num] -> Shape num -> IxFun num Source #
Repeat dimensions.
isContiguous :: (Eq num, IntegralExp num) => IxFun num -> Bool Source #
Does the index function have contiguous memory support?
linearWithOffset :: (Eq num, IntegralExp num) => IxFun num -> num -> Maybe num Source #
If the memory support of the index function is contiguous and row-major (i.e., no transpositions, repetitions, rotates, etc.), then this should return the offset from which the memory-support of this index function starts.
rearrangeWithOffset :: (Eq num, IntegralExp num) => IxFun num -> num -> Maybe (num, [(Int, num)]) Source #
Similar restrictions to linearWithOffset
except for transpositions, which
are returned together with the offset.