tensor_convolution.bend checks
raw source on the hub · import stelliferous@0.0.2.0/tensor_convolution.bend as Tensor_convolution
CHW / NCHW entry. Geometry and allocation checks finish before planning. Every image uses the same reordered weights; the batch is processed in order.
20 imports
import Base import ./tensor.bend as Tensors import ./storage_buffer.bend as Storage import ./storage_clone.bend as Clone import ./storage_copy.bend as Copy import ./kernel_shape.bend as KernelShape import ./kernel_pipeline.bend as Pipeline import ./kernel_gemm_buffer.bend as GemmBuffer import ./kernel_tile.bend as Tile import ./kernel_planning.bend as KernelPlanning import ./default_kernel_cost.bend as DefaultCost import ./kernel_cost.bend as Cost import ./default_machine_limits.bend as Default import ./machine_limits.bend as Machine import ./proofs/storage_certificate.bend as Certificate import ./tensor_band.bend as Bands import ./tensor_band_window.bend as BandWindow import ./kernel_band_pipeline.bend as BandPipeline import ./kernel_band_planning.bend as BandPlanning import ./math_activation.bend as Activations
Types
type InputShape source · line 24 · raw
Data
InputShape@batch:U32 -> @batched:Bool -> @channels:U32 -> @height:U32 -> @width:U32 -> InputShape
type Geometry source · line 27 · raw
Data
Geometry@batch:U32 -> @batched:Bool -> @dimensions:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_shape.Dimensions -> Geometry
type DenseArguments source · line 30 · raw
Data
DenseArguments@image_count:U32 -> @work:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_pipeline.Work -> @input_size:U32 -> @output_size:U32 -> @output_extents:List<&2, U32> -> @selected_depth:U32 -> DenseArguments
Definitions
def input_shape source · line 33 · raw
@shape:List<&2, U32> -> Maybe<&2, InputShape>
def matched source · line 39 · raw
@matches:Bool -> @geometry:Geometry -> Maybe<&2, Geometry>
def geometry source · line 44 · raw
@input:Maybe<&2, InputShape> -> @weights:List<&2, U32> -> @bias:List<&2, U32> -> @stride:U32 -> @padding:U32 -> Maybe<&2, Geometry>
def output_shape source · line 51 · raw
@batched:Bool -> @batch:U32 -> @rows:U32 -> @height:U32 -> @width:U32 -> List<&2, U32>
def selected_depth source · line 56 · raw
@plan:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_planning.Plan -> U32
def configured_depth source · line 60 · raw
@work:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_pipeline.Work -> @input_capacity:U32 -> @bias_capacity:U32 -> @workers:U32 -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @+config:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_cost.Configuration -> U32
def depth source · line 67 · raw
@work:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_pipeline.Work -> @input_capacity:U32 -> @bias_capacity:U32 -> @workers:U32 -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> U32
The input tensor's workers bound the split, as a thread pool bounds PyTorch's parallel_for.
def copied_output source · line 70 · raw
@pair:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32>) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32>
def dense_arguments source · line 116 · raw
@geometry:Geometry -> @+bias_depth:Nat -> @+workers:U32 -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> DenseArguments
def band_context source · line 134 · raw
@geometry:Geometry -> @parallel:Bool -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> 0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_band_pipeline.Context
def band_work source · line 139 · raw
@context:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_band_pipeline.Context -> @bias_capacity:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_planning.Work
def context_window source · line 144 · raw
@context:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_band_pipeline.Context -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band_window.Geometry
def uses_band_windows source · line 176 · raw
@geometry:Geometry -> Bool
Padding-only output windows and an empty batch use the existing dense path. This is a representation choice, not a restriction on valid convolution shapes.
def reordered source · line 195 · raw
@dimensions:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_shape.Dimensions -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8>
The weights in the order the kernel reads them: once, after the checks.
def packed source · line 199 · raw
@geometry:Geometry -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8>
def machine_support source · line 208 · raw
@geometry:Geometry -> @+limits:0x9be3b13bf249759bc81e1958bcd1a4c0/machine_limits.Limits -> Bool
def dense_call_valid source · line 222 · raw
@+dimensions:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_shape.Dimensions -> @+count:U32 -> @+input_length:Nat -> @+input_depth:Nat -> @+weight_length:Nat -> @+weight_depth:Nat -> @+bias_length:Nat -> @+bias_depth:Nat -> Bool
What a dense call needs of its three buffers: lengths that fit the shape and the capacities that hold them.
def band_call_valid source · line 287 · raw
@+dimensions:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_shape.Dimensions -> @+count:U32 -> @layout:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @inspection:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Inspection -> @+weight_length:Nat -> @+weight_depth:Nat -> @+bias_length:Nat -> @+bias_depth:Nat -> Bool
What a call on bands needs: bands that cover the images of the geometry, and parameters whose lengths fit the shape and their capacities.
Templates
template image source · line 74 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @depth:U32 -> @work:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_pipeline.Work -> @index:U32 -> @+input_size:U32 -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32>)
template batch source · line 80 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @count:Nat -> @+index:U32 -> @+depth:U32 -> @+work:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_pipeline.Work -> @+input_size:U32 -> @+output_size:U32 -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @output:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32>
template images_selected source · line 96 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @empty:Bool -> @single:Bool -> @+count:U32 -> @depth:U32 -> @work:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_pipeline.Work -> @input_size:U32 -> @+output_size:U32 -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32>
template images source · line 107 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @+count:U32 -> @depth:U32 -> @work:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_pipeline.Work -> @input_size:U32 -> @+output_size:U32 -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32>
template execute_dense_at_depth source · line 111 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @+image_count:U32 -> @+selected_depth:U32 -> @+work:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_pipeline.Work -> @+input_size:U32 -> @+output_size:U32 -> @+output_extents:List<&2, U32> -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template execute_dense_arguments source · line 126 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @arguments:DenseArguments -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template execute_dense source · line 130 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @geometry:Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template band_output source · line 148 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @+geometry:Geometry -> @parallel:Bool -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32) -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template start_bands source · line 155 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @depth:U32 -> @parallel:Bool -> @+geometry:Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template initial_layout_selected source · line 159 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @zero:Bool -> @depth:U32 -> @parallel:Bool -> @+geometry:Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template initial_layout source · line 164 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @plan:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_band_planning.Plan -> @+geometry:Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template execute_many source · line 168 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @+geometry:Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template execute_layout source · line 180 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @band_windows:Bool -> @+geometry:Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template execute_selected source · line 186 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @single_worker:Bool -> @+geometry:Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template execute source · line 191 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @+geometry:Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template machine source · line 203 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @supported:Bool -> @+geometry:Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+shape:List<&2, U32> -> @fill:F32 -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template supported source · line 214 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @valid:Bool -> @+geometry:Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+shape:List<&2, U32> -> @fill:F32 -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template checked source · line 230 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @geometry:Maybe<&2, Geometry> -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+shape:List<&2, U32> -> @fill:F32 -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template status source · line 244 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+input_extents:List<&2, U32> -> @fill:F32 -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weight_shape:List<&2, U32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @bias_shape:List<&2, U32> -> @stride:U32 -> @padding:U32 -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template replanned source · line 250 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @+geometry:Geometry -> @selection:0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_band_planning.LayoutPlan -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32) -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template existing_layout source · line 254 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @+geometry:Geometry -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+workers:U32 -> @owners:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32), 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template execute_existing_layout source · line 262 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @band_windows:Bool -> @+geometry:Geometry -> @+layout:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32) -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<0x9be3b13bf249759bc81e1958bcd1a4c0/kernel_tile.Tile8> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template band_machine source · line 272 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @supported:Bool -> @+geometry:Geometry -> @layout:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32) -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+shape:List<&2, U32> -> @fill:F32 -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template band_supported source · line 278 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @valid:Bool -> @+geometry:Geometry -> @layout:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32) -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+shape:List<&2, U32> -> @fill:F32 -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template band_inspected source · line 297 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @+geometry:Geometry -> @+layout:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @shape:List<&2, U32> -> @fill:F32 -> @workers:U32 -> @inspected:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32), 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Inspection) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template band_checked source · line 307 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @geometry:Maybe<&2, Geometry> -> @+layout:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32) -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @+shape:List<&2, U32> -> @fill:F32 -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template band_status source · line 313 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @layout:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(F32) -> @+shape:List<&2, U32> -> @fill:F32 -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weight_shape:List<&2, U32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @bias_shape:List<&2, U32> -> @stride:U32 -> @padding:U32 -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template input_layout source · line 319 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weight_shape:List<&2, U32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @bias_shape:List<&2, U32> -> @parameter_status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @parameter_workers:U32 -> @stride:U32 -> @padding:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template input_selected source · line 327 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @dense:Bool -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @weight_shape:List<&2, U32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<F32> -> @bias_shape:List<&2, U32> -> @+parameter_status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @+parameter_workers:U32 -> @+stride:U32 -> @+padding:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template conv2d_selected source · line 337 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @+dense:Bool -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32> -> @+stride:U32 -> @+padding:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
Parameter representations select one public path before any element work. Dense parameters retain the existing incoming-band convolution leaf path.
template conv2d_bias_layout source · line 342 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @dense:Bool -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32> -> @stride:U32 -> @padding:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>
template conv2d source · line 349 · raw
@-custom:(@_:F32 -> F32) -> @+activation:0x9be3b13bf249759bc81e1958bcd1a4c0/math_activation.Activation -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32> -> @weights:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32> -> @bias:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32> -> @stride:U32 -> @padding:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<F32>