Mousius commented on code in PR #65:
URL: https://github.com/apache/tvm-rfcs/pull/65#discussion_r855252415
##########
rfcs/0009_Unified_Static_Memory_Planning.md:
##########
@@ -500,6 +602,52 @@ This actual pass would traverse full TIR program and
construct BufferInfo object
<compute>
...
```
+
+## The optional lowering changes to support U4
+
+After Step 1, the I/O tensors will be bound as allocate nodes with special
annotation to keep track of the offsets within workspace pools. As an e.g. :
+
+### Pre U4 IR transformation
+
+```
+__tvm_main__ = primfn(input1: handle, input2: handle, output1: handle,
output2: handle) -> ()
+ attr = {"global_symbol": "__tvm_main__", "runner_function": True}
+ buffers = {output1_buffer_var: Buffer(output1_buffer_var_1: Pointer(global
int16), int16, [452], []),
+ output2_buffer_var: Buffer(output2_buffer_var_1: Pointer(global
int16), int16, [452], []),
+ input2_buffer_var: Buffer(input2_buffer_var_1: Pointer(global
uint8), uint8, [150528], []),
+ input1_buffer_var: Buffer(input1_buffer_var_1: Pointer(global
uint8), uint8, [150528], [])}
+ buffer_map = {input2: input2_buffer_var, input1: input1_buffer_var, output2:
output2_buffer_var, output1: output1_buffer_var} {
+ @tir.call_extern("tvmgen_default_fused_cast_subtract", input1_buffer_var_1,
@tir.lookup_param("p0", dtype=handle), output1_buffer_var_1, dtype=int32)
+ @tir.call_extern("tvmgen_default_fused_cast_subtract", input2_buffer_var_1,
@tir.lookup_param("p1", dtype=handle), output2_buffer_var_1, dtype=int32)
+}
+```
+
+### Post U4 IR transformation
+
+```
+@__tvm_main__ = primfn() -> ()
+ attr = {"global_symbol": "__tvm_main__", "runner_function": True}
+ buffers = {output2_buffer_var: Buffer(output2_buffer_var_1: Pointer(global
int16), int16, [452], []),
+ output1_buffer_var: Buffer(output1_buffer_var_1: Pointer(global
int16), int16, [452], []),
+ input2_buffer_var: Buffer(input2_buffer_var_1: Pointer(global
uint8), uint8, [150528], []),
+ input1_buffer_var: Buffer(input1_buffer_var_1: Pointer(global
uint8), uint8, [150528], [])}
+ buffer_map = {output1: handle: output1_buffer_var, input1: handle:
input1_buffer_var, input2: handle: input2_buffer_var, output2: handle:
output2_buffer_var} {
+ allocate(output2_buffer_var_1, int16, [452]), storage_scope = global,
annotations = {"output_tensor": "output2"});
+ allocate(output1_buffer_var_1, int16, [452]), storage_scope = global,
annotations = {"output_tensor": "output1"});
+ allocate(input2_buffer_var_1, uint8, [150528]), storage_scope = global,
annotations = {"input_tensor": "input2"});
+ allocate(input1_buffer_var_1, uint8, [150528]), storage_scope = global,
annotations = {"input_tensor": "input1"}) {
+ @tir.call_extern("tvmgen_default_fused_cast_subtract",
input1_buffer_var_1, @tir.lookup_param("p0", dtype=handle),
output1_buffer_var_1, dtype=int32)
+ @tir.call_extern("tvmgen_default_fused_cast_subtract",
input2_buffer_var_1, @tir.lookup_param("p1", dtype=handle),
output2_buffer_var_1, dtype=int32)
+ }
+}
+
+```
+
+Through out the USMP lowering, the allocate node with such special annotations
will maintained as a Map\<String, PoolAllocation>, where the key indicates the
name of the I/O tensor while PoolAllocation captures the pool and the offset it
was assigned in the USMP.
Review Comment:
```suggestion
Through out the USMP lowering, the allocate node with such special
annotations will be maintained as a `Map<String, PoolAllocation>`, where the
key indicates the name of the I/O tensor while `PoolAllocation` captures the
pool and the offset it was assigned in the USMP.
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]