def batch

stelliferous@0.0.2.0 · tensor_convolution.bend:80

import stelliferous@0.0.2.0/tensor_convolution.bend as TensorConvolution
import Base
import stelliferous@0.0.2.0/storage_buffer.bend as Storage
import stelliferous@0.0.2.0/storage_clone.bend as Clone
import stelliferous@0.0.2.0/storage_copy.bend as Copy
import stelliferous@0.0.2.0/kernel_pipeline.bend as Pipeline
import stelliferous@0.0.2.0/kernel_tile.bend as Tile
import stelliferous@0.0.2.0/math_activation.bend as Activations

80def batch(~custom: F32 -> F32,+activation: Activations.Activation,count: Nat,+index: U32,+depth: U32,+work: Pipeline.Work,+input_size: U32,+output_size: U32,
81  input: Storage.Buffer<F32>,weights: Storage.Buffer<Tile.Tile8>,bias: Storage.Buffer<F32>,output: Storage.Buffer<F32>) -> Storage.Buffer<F32>:
82  match count:
83    case 0n: output
84    case 1n:
85      Storage.bind_pair(~Storage.Buffer<F32>,~Storage.Buffer<F32>,~Storage.Buffer<F32>,
86        image(~custom,activation,depth,work,index,input_size,input,weights,bias),source => result =>
87          copied_output(Copy.range(~F32,output_size,0,(index * output_size : U32),result,output)))
88    case 2n+rest:
89      Storage.bind_pair(~Storage.Buffer<Tile.Tile8>,~Storage.Buffer<Tile.Tile8>,~Storage.Buffer<F32>,Clone.clone(~Tile.Tile8,weights),current_weights => remaining_weights =>
90        Storage.bind_pair(~Storage.Buffer<F32>,~Storage.Buffer<F32>,~Storage.Buffer<F32>,Clone.clone(~F32,bias),current_bias => remaining_bias =>
91          Storage.bind_pair(~Storage.Buffer<F32>,~Storage.Buffer<F32>,~Storage.Buffer<F32>,
92            image(~custom,activation,depth,work,index,input_size,input,current_weights,current_bias),source => result =>
93              batch(~custom,activation,1n+rest,(index + 1 : U32),depth,work,input_size,output_size,source,remaining_weights,remaining_bias,
94                copied_output(Copy.range(~F32,output_size,0,(index * output_size : U32),result,output))))))

Uses (14)

Used by (1)