From 1924b41b7b5760361aac9eb382181d1c5f6bd3a9 Mon Sep 17 00:00:00 2001 From: Luke Hutton Date: Mon, 1 Aug 2022 09:33:18 +0000 Subject: [PATCH 1/2] [TVMC] Only load extra targets when there are workspace pools After #11427, `tvmc compile` wouldn't work for external codegens that don't have a `Target` registered by `TVM_REGISTER_TARGET_KIND`. Such external codegens can be expected to have no workspace pools and may not always have a target associated as their implementation predates this mechanism. While it is likely a `Target` is specified for all external codegens in the future, we should still support external codegens without an associated `Target` until this is enforced. Change-Id: Ida8bf85ed1cafd301b9465641c66a5370d73c429 --- python/tvm/driver/tvmc/workspace_pools.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/python/tvm/driver/tvmc/workspace_pools.py b/python/tvm/driver/tvmc/workspace_pools.py index 2c91488fb48b..fe304f7fc0af 100644 --- a/python/tvm/driver/tvmc/workspace_pools.py +++ b/python/tvm/driver/tvmc/workspace_pools.py @@ -161,16 +161,6 @@ def workspace_pools_recombobulate(parsed, targets, extra_target): "workspace_pools_target_burst_bytes", ] - # Load extra targets from CLI - additional_targets = [] - - for t in extra_target: - additional_targets.append(Target(t["raw"], host=targets[0].host or targets[0])) - - target = targets + additional_targets - if targets[0].host: - target.append(targets[0].host) - workspace_pools = _split_pools_to_pool_names(parsed.workspace_pools) if not workspace_pools: return None @@ -186,6 +176,16 @@ def workspace_pools_recombobulate(parsed, targets, extra_target): for workspace_pool_param in WORKSPACE_POOL_TARGET_PARAMS } + # Load extra targets from CLI + additional_targets = [] + + for t in extra_target: + additional_targets.append(Target(t["raw"], host=targets[0].host or targets[0])) + + target = targets + additional_targets + if targets[0].host: + target.append(targets[0].host) + return WorkspaceMemoryPools( [ WorkspacePoolInfo( From 330be7d74766f2a77eaa42fcbde66c2ee23670f4 Mon Sep 17 00:00:00 2001 From: Luke Hutton Date: Mon, 1 Aug 2022 11:25:14 +0000 Subject: [PATCH 2/2] add test case Co-authored-by: Chris Sidebottom Change-Id: I6a6bc9a023afd5a62a3c932dbc3ad535815b3963 --- tests/python/driver/tvmc/test_workspace_pools.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/python/driver/tvmc/test_workspace_pools.py b/tests/python/driver/tvmc/test_workspace_pools.py index 386181aaf20b..2e34c90252c3 100644 --- a/tests/python/driver/tvmc/test_workspace_pools.py +++ b/tests/python/driver/tvmc/test_workspace_pools.py @@ -18,6 +18,7 @@ import pytest import argparse +import tvm from tvm.driver.tvmc.workspace_pools import ( generate_workspace_pools_args, workspace_pools_recombobulate, @@ -402,3 +403,18 @@ def test_workspace_pools_recombobulate_single_pool_overrides(): assert len(memory_pools.pools[0].targets) == 2 assert len(memory_pools.pools[1].targets) == 1 + + +@tvm.testing.requires_ethosn +def test_workspace_pools_recombobulate_ext_codegen(): + """No error should occur when using an external code generator without an attached Target""" + + parser = argparse.ArgumentParser() + generate_workspace_pools_args(parser) + parsed, _ = parser.parse_known_args([]) + + targets = [Target("llvm")] + extra_targets = [{"raw": "ethos-n"}] + + memory_pools = workspace_pools_recombobulate(parsed, targets, extra_targets) + assert memory_pools is None