kernel_packing_buffer.bend
stelliferous@0.0.3.0 · 24 lines · 0 definitions
1import Base
2import stelliferous@0.0.3.0/kernel_spatial_packing.bend as Packing
3import stelliferous@0.0.3.0/kernel_tile.bend as Tile
4import stelliferous@0.0.3.0/storage_buffer.bend as Storage
5import stelliferous@0.0.3.0/proofs/kernel_packing_certificate.bend as PackingCertificate
6import stelliferous@0.0.3.0/proofs/storage_certificate.bend as Certificate
7import stelliferous@0.0.3.0/proofs/traversal_certificate.bend as TraversalCertificate
8
9def buffers(input_length: Nat,output_length: Nat,result: Array<F32> & Array<Tile.Tile8>,
10 certificates: TraversalCertificate.Certificates<Array<F32>,Tile.Tile8,Certificate.family(~F32),result>) ->
11 Storage.Buffer<F32> & Storage.Buffer<Tile.Tile8>:
12 (input,output) = result
13 TraversalCertificate.Certificates{source_certificate,output_certificate} = certificates
14 (Storage.Buffer{input,input_length,source_certificate},Storage.Buffer{output,output_length,output_certificate})
15
16def run(+call: Packing.Call,input: Storage.Buffer<F32>,output: Storage.Buffer<Tile.Tile8>) -> Storage.Buffer<F32> & Storage.Buffer<Tile.Tile8>:
17 Storage.Buffer{input,input_length,input_certificate} = input
18 Storage.Buffer{output,output_length,output_certificate} = output
19 buffers(input_length,output_length,Packing.run(call,input,output),PackingCertificate.certificates(call,input,output,input_certificate,output_certificate))
20
21def run_window(+window: Packing.Stencil,+count: Nat,+start: U32,input: Storage.Buffer<F32>,output: Storage.Buffer<Tile.Tile8>) -> Storage.Buffer<F32> & Storage.Buffer<Tile.Tile8>:
22 Storage.Buffer{input,input_length,input_certificate} = input
23 Storage.Buffer{output,output_length,output_certificate} = output
24 buffers(input_length,output_length,Packing.pack_window(window,count,start,input,output),PackingCertificate.window_certificates(window,count,start,input,output,input_certificate,output_certificate))