You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by GitBox <gi...@apache.org> on 2022/09/16 11:10:44 UTC

[GitHub] [tvm] Mousius commented on a diff in pull request #12789: Added macro generation in MLF export

Mousius commented on code in PR #12789:
URL: https://github.com/apache/tvm/pull/12789#discussion_r972909757


##########
src/target/source/interface_c.cc:
##########
@@ -46,20 +46,46 @@ class InterfaceCNode : public runtime::ModuleNode {
   InterfaceCNode(std::string module_name, Array<String> inputs, Array<String> outputs,
                  Array<tir::usmp::AllocatedPoolInfo> pools,
                  Map<String, tir::usmp::PoolAllocation> io_pool_allocations, Array<String> devices,
-                 int workspace_size)
+                 int workspace_size, Map<String, IntImm> input_sizes,
+                 Map<String, IntImm> output_sizes)
       : module_name_(module_name),
         inputs_(inputs),
         outputs_(outputs),
         devices_(devices),
         pools_(FilterExternalPools(pools)),
         io_pool_allocations_(io_pool_allocations),
-        workspace_size_(workspace_size) {}
+        workspace_size_(workspace_size),
+        input_sizes_(input_sizes),
+        output_sizes_(output_sizes) {}
   const char* type_key() const final { return "h"; }
 
   std::string GetSource(const std::string& format) final {
     std::stringstream code;
 
     EmitUpperHeaderGuard(code);
+
+    // Emit macros for input sizes
+    for (auto const& it : input_sizes_) {
+      auto input_name = std::string(it.first);
+      std::replace(input_name.begin(), input_name.end(), ':', '_');
+      std::replace(input_name.begin(), input_name.end(), '+', '_');
+      std::replace(input_name.begin(), input_name.end(), '-', '_');

Review Comment:
   We can use the existing name sanitisation logic here:
   
   ```suggestion
         std::string input_name = SanitizeName(it.first);
   ```



##########
python/tvm/micro/model_library_format.py:
##########
@@ -519,7 +570,7 @@ def _export_operator_model_library_format(mod: build_module.OperatorModule, temp
     """
     targets = []
     for target in mod.ir_module_by_target.keys():
-        if str(target.kind) not in ("llvm", "c"):
+        if str(target.kind) not in ("llvm", "c", "gemmini"):

Review Comment:
   This seems like an unrelated change?



##########
src/target/source/interface_c.cc:
##########
@@ -46,20 +46,46 @@ class InterfaceCNode : public runtime::ModuleNode {
   InterfaceCNode(std::string module_name, Array<String> inputs, Array<String> outputs,
                  Array<tir::usmp::AllocatedPoolInfo> pools,
                  Map<String, tir::usmp::PoolAllocation> io_pool_allocations, Array<String> devices,
-                 int workspace_size)
+                 int workspace_size, Map<String, IntImm> input_sizes,
+                 Map<String, IntImm> output_sizes)
       : module_name_(module_name),
         inputs_(inputs),
         outputs_(outputs),
         devices_(devices),
         pools_(FilterExternalPools(pools)),
         io_pool_allocations_(io_pool_allocations),
-        workspace_size_(workspace_size) {}
+        workspace_size_(workspace_size),
+        input_sizes_(input_sizes),
+        output_sizes_(output_sizes) {}
   const char* type_key() const final { return "h"; }
 
   std::string GetSource(const std::string& format) final {
     std::stringstream code;
 
     EmitUpperHeaderGuard(code);
+
+    // Emit macros for input sizes
+    for (auto const& it : input_sizes_) {
+      auto input_name = std::string(it.first);
+      std::replace(input_name.begin(), input_name.end(), ':', '_');
+      std::replace(input_name.begin(), input_name.end(), '+', '_');
+      std::replace(input_name.begin(), input_name.end(), '-', '_');
+      auto input_size = it.second->value;

Review Comment:
   Where possible, we should avoid `auto` types:
   
   ```suggestion
         int input_size = it.second->value;
   ```



##########
src/target/source/interface_c.cc:
##########
@@ -46,20 +46,46 @@ class InterfaceCNode : public runtime::ModuleNode {
   InterfaceCNode(std::string module_name, Array<String> inputs, Array<String> outputs,
                  Array<tir::usmp::AllocatedPoolInfo> pools,
                  Map<String, tir::usmp::PoolAllocation> io_pool_allocations, Array<String> devices,
-                 int workspace_size)
+                 int workspace_size, Map<String, IntImm> input_sizes,
+                 Map<String, IntImm> output_sizes)
       : module_name_(module_name),
         inputs_(inputs),
         outputs_(outputs),
         devices_(devices),
         pools_(FilterExternalPools(pools)),
         io_pool_allocations_(io_pool_allocations),
-        workspace_size_(workspace_size) {}
+        workspace_size_(workspace_size),
+        input_sizes_(input_sizes),
+        output_sizes_(output_sizes) {}
   const char* type_key() const final { return "h"; }
 
   std::string GetSource(const std::string& format) final {
     std::stringstream code;
 
     EmitUpperHeaderGuard(code);
+
+    // Emit macros for input sizes
+    for (auto const& it : input_sizes_) {
+      auto input_name = std::string(it.first);
+      std::replace(input_name.begin(), input_name.end(), ':', '_');
+      std::replace(input_name.begin(), input_name.end(), '+', '_');
+      std::replace(input_name.begin(), input_name.end(), '-', '_');
+      auto input_size = it.second->value;
+      EmitIntegerValueMacro(code, "Input tensor " + input_name + " size (in bytes)", input_name,
+                            input_size);
+    }
+
+    // Emit macros for output sizes
+    for (auto const& it : output_sizes_) {
+      auto output_name = std::string(it.first);
+      std::replace(output_name.begin(), output_name.end(), ':', '_');
+      std::replace(output_name.begin(), output_name.end(), '+', '_');
+      std::replace(output_name.begin(), output_name.end(), '-', '_');
+      auto output_size = it.second->value;

Review Comment:
   ```suggestion
         std::string output_name = SanitizeName(it.first);
         int output_size = it.second->value;
   ```



-- 
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: commits-unsubscribe@tvm.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org