~/bend-docscommunity

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.

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.

type SweepContext source · line 158 · raw

@-Element:Data -> Data

type Line source · line 161 · raw

@-Element:Data -> Data

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>)