kernel_band_pipeline.bend checks
raw source on the hub · import stelliferous@0.0.2.0/kernel_band_pipeline.bend as Kernel_band_pipeline
Independent row bands keep their output owners. Fork distributes existing core/halo owners; only read-only weights and bias need affine clones.
11 imports
import Base import ./tensor_band.bend as Bands import ./tensor_band_window.bend as BandWindow import ./kernel_window.bend as KernelWindow import ./kernel_pipeline.bend as Pipeline import ./kernel_gemm_buffer.bend as GemmBuffer import ./kernel_tile.bend as Tile import ./storage_buffer.bend as Storage import ./storage_clone.bend as Clone import ./traversal_partition.bend as Partition import ./math_activation.bend as Activations
Types
type Context source · line 15 · raw
Data
Context@window:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band_window.Geometry -> @channels:U32 -> @inner:U32 -> @parallel:Bool -> @activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> Context
Definitions
def parallel source · line 38 · raw
@context:Context -> Bool
def input_geometry source · line 42 · raw
@context:Context -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry
def parallel_plan source · line 46 · raw
@+context:Context -> @plan:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan -> Bool
def Parameters source · line 49 · raw
Type
Templates
template windowed source · line 21 · raw
@-custom:(@_:F32 -> F32) -> @activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @+geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band_window.Geometry -> @+channels:U32 -> @+inner:U32 -> @+first:U32 -> @+rows:U32 -> @+rows_read:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band_window.RowWindow -> @core:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @above:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @below:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32)
A leaf assembles the rows its outputs read into one contiguous window whose first row is a stride multiple, then runs the dense leaf on it: packing a window is packing a shorter image with output rows shifted by first / stride.
template leaf source · line 32 · raw
@-custom:(@_:F32 -> F32) -> @context:Context -> @+first:U32 -> @+rows:U32 -> @core:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @halo:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band_window.Halo<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32)
template band source · line 62 · raw
@-custom:(@_:F32 -> F32) -> @context:Context -> @first:U32 -> @rows:U32 -> @core:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @halo:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band_window.Halo<F32> -> @parameters:Parameters -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32)
template run source · line 70 · raw
@-custom:(@_:F32 -> F32) -> @plan:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan -> @mode:Bool -> @+context:Context -> @bands:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32) -> @halos:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band_window.Halos(F32) -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32)
Every core leaf with its halo, through the shared band recursion. Trees of another shape keep the cores.
template prepared source · line 77 · raw
@-custom:(@_:F32 -> F32) -> @+context:Context -> @+plan:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @owners:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32), 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band_window.Halos(F32)) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32)
template planned source · line 82 · raw
@-custom:(@_:F32 -> F32) -> @+context:Context -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @owners:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32), 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32)
template execute source · line 89 · raw
@-custom:(@_:F32 -> F32) -> @context:Context -> @bands:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32) -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32)
The weights arrive in the order the kernel reads them.