[enco] Introduce SubnetBlockCompiler template (#1213)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Tue, 28 Aug 2018 23:52:12 +0000 (08:52 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Tue, 28 Aug 2018 23:52:12 +0000 (08:52 +0900)
This commit introduces SubnetBlockCompiler which will generate the code
that invokes Android NN network inference.

Note that the current implementation simply generates some assert code.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/enco/core/src/CppCode.cpp
contrib/enco/core/src/CppGen/Subnet.cpp
contrib/enco/core/src/CppGen/Subnet.h

index f841913..9840cf0 100644 (file)
@@ -179,6 +179,7 @@ void CppCode::dump(std::ostream &os) const
   }
 
   // Create Code Block Builder
+  SubnetBlockCompiler subnet_compiler{mem};
   HostBlockCompiler host_compiler{mem};
 
   for (auto blk = m->block()->head(); blk; blk = blk->next())
@@ -188,7 +189,9 @@ void CppCode::dump(std::ostream &os) const
 
     if (auto binder = _code->ann()->find(blk))
     {
-      throw std::runtime_error{"NYI; Android NN codegen is not supported, yet"};
+      // Generate code that invokes Android NN sub-network
+      auto lines = subnet_compiler.compile(binder);
+      invoke.body.append(*lines);
     }
     else
     {
index 327b2bc..105208f 100644 (file)
@@ -53,4 +53,14 @@ std::unique_ptr<SubnetStruct> SubnetStructBuilder::build(const ANNBinder *binder
   return std::move(res);
 }
 
+std::unique_ptr<pp::MultiLineText> SubnetBlockCompiler::compile(const ANNBinder *binder) const
+{
+  auto res = nncc::foundation::make_unique<pp::LinearDocument>();
+
+  // TODO Generate appropriate code
+  res->append(S(assert("NYI")));
+
+  return std::move(res);
+}
+
 } // namespace enco
index 36d66db..4e9b405 100644 (file)
@@ -3,6 +3,7 @@
 
 #include "ANN/Binder.h"
 #include "CppGen/Global.h"
+#include "CppGen/MemoryContext.h"
 
 #include <pp/MultiLineText.h>
 
@@ -36,6 +37,24 @@ private:
   enco::Global *_global;
 };
 
+/**
+ * @brief Generate C++ code that invokes Android NN subnet
+ */
+class SubnetBlockCompiler
+{
+public:
+  SubnetBlockCompiler(const enco::MemoryContext &mem) : _mem(mem)
+  {
+    // DO NOTHING
+  }
+
+public:
+  std::unique_ptr<pp::MultiLineText> compile(const ANNBinder *binder) const;
+
+private:
+  const enco::MemoryContext &_mem;
+};
+
 } // namespace enco
 
 #endif // __ENCO_CPP_GEN_SUBNET_H__