diff --git a/python/tvm/micro/contrib/zephyr.py b/python/tvm/micro/contrib/zephyr.py index ed1c9866c741..29bb5ecdbe6f 100644 --- a/python/tvm/micro/contrib/zephyr.py +++ b/python/tvm/micro/contrib/zephyr.py @@ -55,7 +55,7 @@ def run(self, cmd, **kw): for k, v in self.default_overrides.items(): env[k] = v - return subprocess.check_output(cmd, env=env, **kw) + return subprocess.check_output(cmd, env=env, **kw, universal_newlines=True) class ProjectNotFoundError(Exception): @@ -204,6 +204,25 @@ def library(self, output, sources, options=None): ) return tvm.micro.MicroLibrary(build_dir, [f"lib{project_name}.a"]) + def _print_make_statistics(self, output): + output = output.splitlines() + lines = iter(output) + for line in lines: + if line.startswith("Memory region"): + # print statistics header + _LOG.info(line) + _LOG.info("--------------------- ---------- ------------ ---------") + line = next(lines) + # while there is a region print it + try: + while ":" in line: + _LOG.info(line) + line = next(lines) + else: + break + except StopIteration: + pass + def binary(self, output, objects, options=None, link_main=True, main_options=None): assert link_main, "Must pass link_main=True" assert self._project_dir is not None, "Must supply project_dir= to build binaries" @@ -224,7 +243,9 @@ def binary(self, output, objects, options=None, link_main=True, main_options=Non cmake_args.append(f'-DTVM_LIBS={";".join(copied_libs)}') self._subprocess_env.run(cmake_args, cwd=output) - self._subprocess_env.run(["make"], cwd=output) + make_output = self._subprocess_env.run(["make"], cwd=output) + + self._print_make_statistics(make_output) return tvm.micro.MicroBinary( output, diff --git a/tutorials/micro/micro_tflite.py b/tutorials/micro/micro_tflite.py index c979216d0c6b..e822485c947f 100644 --- a/tutorials/micro/micro_tflite.py +++ b/tutorials/micro/micro_tflite.py @@ -122,6 +122,8 @@ import os import numpy as np +import logging + import tvm import tvm.micro as micro from tvm.contrib.download import download_testdata @@ -227,6 +229,10 @@ # ) # # opts = tvm.micro.default_options(f"{project_dir}/crt") +# +# enable printing memory usage statistics of the runtime image +# generated by Zephyr compiler for the physical hardware +# logging.basicConfig(level="INFO") workspace = tvm.micro.Workspace() micro_binary = tvm.micro.build_static_runtime(