tensor_access.bend checks
raw source on the hub · import stelliferous@0.0.2.0/tensor_access.bend as Tensor_access
Internal tensor read layouts and unchecked traversal kernels.
5 imports
import Base import ./tensor_view.bend as Views import ./traversal_array.bend as Traversal import ./traversal_loop.bend as Loop import ./tensor_cursor.bend as Cursor
Types
type Pool source · line 140 · raw
Data
The geometry of a two-dimensional window reduction over the last two axes. It runs as two sweeps: along the columns of every row, then along the rows.
Pool@height:U32 -> @width:U32 -> @kernel:U32 -> @stride:U32 -> @padding:U32 -> @out_height:U32 -> @out_width:U32 -> Pool
type Sweep source · line 155 · raw
Data
Window reduction along one axis. step is the number of elements after the axis, the same in the input and the output. Output position p keeps its step offset p % step, lies at coordinate (p / step) % out_extent of the axis, and folds kernel samples in increasing coordinate from pad; a sample outside the axis reads pad. origin is the coordinate at which the window of output coordinate zero starts before padding: zero for a whole axis, the stored row for the rows of a taller image.
Sweep@extent:U32 -> @step:U32 -> @kernel:U32 -> @stride:U32 -> @padding:U32 -> @out_extent:U32 -> @origin:U32 -> Sweep
type SweepContext source · line 158 · raw
@-Element:Data -> Data
SweepContext@-Element:Data -> @sweep:Sweep -> @pad:Element -> SweepContext<Element>
type Line source · line 161 · raw
@-Element:Data -> Data
Line@-Element:Data -> @base:U32 -> @first:U32 -> @extent:U32 -> @step:U32 -> @padding:U32 -> @pad:Element -> Line<Element>
Definitions
def zero_contiguous source · line 93 · raw
@+view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> Bool
def pool_columns source · line 191 · raw
@pool:Pool -> Sweep
The sweep along the columns of a pool: every stored row is one line.
def pool_rows source · line 197 · raw
@pool:Pool -> @origin:U32 -> Sweep
The sweep along the rows of the column-swept planes. The stored rows may be a window of a taller image; see Sweep for origin.
Templates
template last_of_run source · line 15 · raw
@-Element:Data -> @extent:Nat -> @stride:U32 -> @rewind:U32 -> @rest:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Depth1 -> @state:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Stride> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor>
A strided operation visits the source view in row-major order. It proceeds in runs of the innermost axis: every element of a run but the last advances only the address, and the last takes the ordinary cursor step, which carries into the outer axes. The element loop is a small native loop whatever else shares the cursor; stepping the whole cursor per element costs several calls with a wide state once more than one operation uses it. inside and last are the same element action, stepping a stride and the whole cursor.
template run_axis source · line 20 · raw
@-Element:Data -> @-inside:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Stride> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Stride>) -> @-last:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor>) -> @remaining:Nat -> @extent:Nat -> @+stride:U32 -> @rewind:U32 -> @rest:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Depth1 -> @+address:U32 -> @input:Array<Element> -> @output:Array<Element> -> @position:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor>
template run_step source · line 29 · raw
@-Element:Data -> @-inside:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Stride> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Stride>) -> @-last:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor>) -> @state:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor>
template run_guarded source · line 37 · raw
@-Element:Data -> @-inside:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Stride> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Stride>) -> @-last:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor>) -> @full_run:Bool -> @whole_runs:Bool -> @runs:Nat -> @count:Nat -> @cursor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor -> @destination:U32 -> @input:Array<Element> -> @output:Array<Element> -> Pair(Array<Element>, Array<Element>)
Runs are used when the cursor starts a full run and count is a whole number of runs; any other call steps element by element. Both visit the same elements in the same order.
template run_remaining source · line 48 · raw
@-Element:Data -> @-inside:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Stride> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Stride>) -> @-last:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor>) -> @remaining:Nat -> @+extent:Nat -> @stride:U32 -> @rewind:U32 -> @rest:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Depth1 -> @address:U32 -> @+count:Nat -> @destination:U32 -> @input:Array<Element> -> @output:Array<Element> -> Pair(Array<Element>, Array<Element>)
template run_strided source · line 60 · raw
@-Element:Data -> @-inside:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Stride> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Stride>) -> @-last:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.State<&1, &1, Array<Element>, Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor>) -> @count:Nat -> @cursor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor -> @destination:U32 -> @input:Array<Element> -> @output:Array<Element> -> Pair(Array<Element>, Array<Element>)
template copy_strided source · line 65 · raw
@-Element:Data -> @count:Nat -> @cursor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor -> @destination:U32 -> @input:Array<Element> -> @output:Array<Element> -> Pair(Array<Element>, Array<Element>)
template update_strided source · line 71 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @count:Nat -> @cursor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor -> @destination:U32 -> @input:Array<Element> -> @output:Array<Element> -> Pair(Array<Element>, Array<Element>)
output[destination + i] = operation(output[destination + i], element i of the view).
template scatter_strided source · line 77 · raw
@-Element:Data -> @count:Nat -> @cursor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_cursor.Cursor -> @source:U32 -> @input:Array<Element> -> @output:Array<Element> -> Pair(Array<Element>, Array<Element>)
output[address of element i of the cursor] = input[source + i].
template scatter_run source · line 82 · raw
@-Element:Data -> @count:Nat -> @target:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @source:U32 -> @input:Array<Element> -> @output:Array<Element> -> Pair(Array<Element>, Array<Element>)
template copy_run source · line 85 · raw
@-Element:Data -> @contiguous:Bool -> @count:Nat -> @source:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @destination:U32 -> @input:Array<Element> -> @output:Array<Element> -> Pair(Array<Element>, Array<Element>)
template combine_run source · line 97 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @fast:Bool -> @count:Nat -> @right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @destination:U32 -> @right:Array<Element> -> @output:Array<Element> -> Pair(Array<Element>, Array<Element>)
template apply_element source · line 106 · raw
@-Element:Data -> @-operation:(@_:Element -> Element) -> @context:Unit -> @value:Element -> Element
template reduce_run source · line 109 · raw
@-Element:Data -> @-Accumulator:Data -> @-operation:(@_:Accumulator -> @_:Element -> Accumulator) -> @fast:Bool -> @count:Nat -> @view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @storage:Array<Element> -> @initial:Accumulator -> Pair(Array<Element>, Accumulator)
template indexed_value source · line 121 · raw
@-Element:Data -> @-operation:(@_:U32 -> @_:Element -> Element) -> @+position:U32 -> @result:Pair(Array<Element>, Element) -> Pair(Array<Element>, Element)
template read_indexed source · line 125 · raw
@-Element:Data -> @-operation:(@_:U32 -> @_:Element -> Element) -> @input:Array<Element> -> @context:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.Offsets -> @position:U32 -> Pair(Array<Element>, Element)
template apply_indexed_run source · line 131 · raw
@-Element:Data -> @-operation:(@_:U32 -> @_:Element -> Element) -> @count:Nat -> @view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @input:Array<Element> -> @output:Array<Element> -> Pair(Array<Element>, Array<Element>)
Reads a contiguous view and writes a separate contiguous output from zero.
template window_read source · line 143 · raw
@-Element:Data -> @+pad:Element -> @valid:Bool -> @input:Array<Element> -> @index:U32 -> Pair(Array<Element>, Element)
template read_line source · line 164 · raw
@-Element:Data -> @input:Array<Element> -> @line:Line<Element> -> @position:U32 -> Pair(Array<Element>, Element)
template line_at source · line 169 · raw
@-Element:Data -> @+sweep:Sweep -> @+pad:Element -> @+position:U32 -> Line<Element>
template read_swept source · line 174 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @input:Array<Element> -> @context:SweepContext<Element> -> @position:U32 -> Pair(Array<Element>, Element)
template swept_index source · line 181 · raw
@-Element:Data -> @context:SweepContext<Element> -> @position:U32 -> U32
template sweep_run source · line 184 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @count:Nat -> @context:SweepContext<Element> -> @input:Array<Element> -> @output:Array<Element> -> Pair(Array<Element>, Array<Element>)