This is an automated email from the ASF dual-hosted git repository.
jroesch pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git
The following commit(s) were added to refs/heads/main by this push:
new 7072743 Remove old AOT Executor code (#8758)
7072743 is described below
commit 70727435a0827cd6cefe0b52f4407e08b799e39a
Author: Christopher Sidebottom <[email protected]>
AuthorDate: Wed Aug 18 22:57:37 2021 +0100
Remove old AOT Executor code (#8758)
* Remove old AOT Executor code
This removes the old AOT execution functions that relied on the model
descriptor which was removed in https://github.com/apache/tvm/pull/8280.
* Remove rogue tvm_model_t from demo app
* Remove aot_executor from demo CRT libs
---
.../zephyr/template_project/microtvm_api_server.py | 2 +-
.../zephyr/template_project/src/aot_demo/main.c | 2 -
cmake/modules/StandaloneCrt.cmake | 3 +-
src/runtime/crt/Makefile | 1 -
src/runtime/crt/aot_executor/aot_executor.c | 62 -------
.../crt/internal/aot_executor/aot_executor.h | 83 ----------
tests/crt/aot_executor_test.cc | 178 ---------------------
tests/python/relay/aot/aot_test.mk | 6 +-
8 files changed, 3 insertions(+), 334 deletions(-)
diff --git a/apps/microtvm/zephyr/template_project/microtvm_api_server.py
b/apps/microtvm/zephyr/template_project/microtvm_api_server.py
index d937728..c51389a 100644
--- a/apps/microtvm/zephyr/template_project/microtvm_api_server.py
+++ b/apps/microtvm/zephyr/template_project/microtvm_api_server.py
@@ -324,7 +324,7 @@ class Handler(server.ProjectAPIHandler):
CRT_LIBS_BY_PROJECT_TYPE = {
"host_driven": "microtvm_rpc_server microtvm_rpc_common common",
- "aot_demo": "aot_executor memory microtvm_rpc_common common",
+ "aot_demo": "memory microtvm_rpc_common common",
}
def generate_project(self, model_library_format_path, standalone_crt_dir,
project_dir, options):
diff --git a/apps/microtvm/zephyr/template_project/src/aot_demo/main.c
b/apps/microtvm/zephyr/template_project/src/aot_demo/main.c
index 276c231..a96e3b4 100644
--- a/apps/microtvm/zephyr/template_project/src/aot_demo/main.c
+++ b/apps/microtvm/zephyr/template_project/src/aot_demo/main.c
@@ -24,7 +24,6 @@
#include <stdio.h>
#include <string.h>
#include <tvm/runtime/c_runtime_api.h>
-#include <tvm/runtime/crt/internal/aot_executor/aot_executor.h>
#include <tvm/runtime/crt/logging.h>
#include <tvm/runtime/crt/stack_allocator.h>
#include <unistd.h>
@@ -42,7 +41,6 @@
#define WORKSPACE_SIZE (270 * 1024)
static uint8_t g_aot_memory[WORKSPACE_SIZE];
-extern tvm_model_t tvmgen_default_network;
tvm_workspace_t app_workspace;
// Wakeup sequence used to wake up QEMU on the host.
diff --git a/cmake/modules/StandaloneCrt.cmake
b/cmake/modules/StandaloneCrt.cmake
index 32d7e59..072cba0 100644
--- a/cmake/modules/StandaloneCrt.cmake
+++ b/cmake/modules/StandaloneCrt.cmake
@@ -44,7 +44,6 @@ if(USE_MICRO)
"src/runtime/crt/include *.h -> include"
"src/runtime/crt/common *.c -> src/runtime/crt/common"
"src/runtime/crt/graph_executor *.c -> src/runtime/crt/graph_executor"
- "src/runtime/crt/aot_executor *.c -> src/runtime/crt/aot_executor"
"src/runtime/crt/graph_executor_module *.c ->
src/runtime/crt/graph_executor_module"
"src/runtime/crt/host *.cc -> template/host"
"src/runtime/crt/host *.py -> template/host"
@@ -99,7 +98,7 @@ if(USE_MICRO)
set(make_quiet )
endif(${VERBOSE})
- list(APPEND crt_libraries memory graph_executor aot_executor
microtvm_rpc_server microtvm_rpc_common common) # NOTE: listed in link order.
+ list(APPEND crt_libraries memory graph_executor microtvm_rpc_server
microtvm_rpc_common common) # NOTE: listed in link order.
foreach(crt_lib_name IN LISTS crt_libraries)
list(APPEND crt_library_paths "host_standalone_crt/lib${crt_lib_name}.a")
endforeach()
diff --git a/src/runtime/crt/Makefile b/src/runtime/crt/Makefile
index f458a2f..99efdda 100644
--- a/src/runtime/crt/Makefile
+++ b/src/runtime/crt/Makefile
@@ -68,7 +68,6 @@ endef
LIBS = \
src/runtime/crt/common \
src/runtime/crt/graph_executor \
- src/runtime/crt/aot_executor \
src/runtime/crt/graph_executor_module \
src/runtime/crt/memory \
src/runtime/crt/microtvm_rpc_common \
diff --git a/src/runtime/crt/aot_executor/aot_executor.c
b/src/runtime/crt/aot_executor/aot_executor.c
deleted file mode 100644
index d34639b..0000000
--- a/src/runtime/crt/aot_executor/aot_executor.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/*!
- * \brief Main entry point for
- * \param model Model descriptor structure to reference for runtime information
- * \param inputs Pointer to input pointer(s)
- * \param outputs Pointer to output pointer(s)
- * \param context Context information to be passed through to operators
- * \return tvm_status_t containing success or errors from the model run
- */
-#include <tvm/runtime/c_runtime_api.h>
-#include <tvm/runtime/crt/internal/aot_executor/aot_executor.h>
-
-tvm_crt_error_t tvm_runtime_run(const tvm_model_t* model, void** inputs,
void** outputs) {
- static DLDevice fake_device = {kDLCPU, 0};
- static int64_t fake_dims = 0;
- static int64_t fake_shape = {0};
-
- DLTensor tensors[model->num_input_tensors + model->num_output_tensors];
// NOLINT
- TVMValue tvm_values[model->num_input_tensors + model->num_output_tensors];
// NOLINT
- int32_t tvm_typeids[model->num_input_tensors + model->num_output_tensors];
// NOLINT
-
- for (size_t i = 0; i < model->num_input_tensors; i++) {
- tensors[i].device = fake_device;
- tensors[i].data = inputs[i];
- tensors[i].shape = &fake_shape;
- tensors[i].ndim = fake_dims;
- tensors[i].byte_offset = 0;
- tensors[i].strides = NULL;
- tvm_values[i].v_handle = &tensors[i];
- }
-
- for (size_t i = 0; i < model->num_output_tensors; i++) {
- size_t j = model->num_input_tensors + i;
- tensors[j].device = fake_device;
- tensors[j].data = outputs[i];
- tensors[j].shape = &fake_shape;
- tensors[j].ndim = fake_dims;
- tensors[j].byte_offset = 0;
- tensors[j].strides = NULL;
- tvm_values[j].v_handle = &tensors[j];
- }
-
- return (tvm_crt_error_t)model->run_func(tvm_values, tvm_typeids, 0, NULL, 0,
NULL);
-}
diff --git
a/src/runtime/crt/include/tvm/runtime/crt/internal/aot_executor/aot_executor.h
b/src/runtime/crt/include/tvm/runtime/crt/internal/aot_executor/aot_executor.h
deleted file mode 100644
index edfd0ec..0000000
---
a/src/runtime/crt/include/tvm/runtime/crt/internal/aot_executor/aot_executor.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/*!
- * \brief TVM Executor for the Ahead-of-Time Runtime
- *
- * AOT models are described by the TVM model descriptor format
- * which can be passed to tvm_runtime_run. These descriptors will be
- * generated by the AOT compilation process. This can optionally be
- * augmented with platform specific context to be passed to the TVM
- * operators.
- *
- * Example:
- * extern tvm_model_t my_network;
- * int main() {
- * void* data = get_data();
- * void* output[4] = {0, 0, 0, 0};
- * void* inputs = {data};
- * void* outputs = {output};
- * tvm_context_t my_context = {
- * .driver = ...;
- * };
- * tvm_runtime_run(
- * &my_network,
- * inputs,
- * outputs
- * &my_context
- * );
- * return 0;
- * }
- */
-
-#ifndef
TVM_RUNTIME_CRT_INCLUDE_TVM_RUNTIME_CRT_INTERNAL_AOT_EXECUTOR_AOT_EXECUTOR_H_
-#define
TVM_RUNTIME_CRT_INCLUDE_TVM_RUNTIME_CRT_INTERNAL_AOT_EXECUTOR_AOT_EXECUTOR_H_
-
-#include <stdint.h>
-#include <tvm/runtime/c_backend_api.h>
-#include <tvm/runtime/crt/error_codes.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*!
- * \brief TVM Model descriptor to describe the
- * model to the runtime.
- */
-typedef struct {
- size_t num_input_tensors; /** Number of expected input tensors */
- size_t num_output_tensors; /** Number of expected output tensors */
- TVMBackendPackedCFunc run_func; /** Generated model function, called through
tvm_runtime_run */
-} tvm_model_t;
-
-/*!
- * \brief Main entry point to execute the AOT runner function
- * \param model Model descriptor structure to reference for runtime information
- * \param inputs Pointer to input pointer(s)
- * \param outputs Pointer to output pointer(s)
- * \return tvm_status_t containing success or errors from the model run
- */
-tvm_crt_error_t tvm_runtime_run(const tvm_model_t* model, void** inputs,
void** outputs);
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif //
TVM_RUNTIME_CRT_INCLUDE_TVM_RUNTIME_CRT_INTERNAL_AOT_EXECUTOR_AOT_EXECUTOR_H_
diff --git a/tests/crt/aot_executor_test.cc b/tests/crt/aot_executor_test.cc
deleted file mode 100644
index e8afa13..0000000
--- a/tests/crt/aot_executor_test.cc
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <dlpack/dlpack.h>
-#include <gtest/gtest.h>
-#include <tvm/runtime/c_runtime_api.h>
-#include <tvm/runtime/crt/internal/aot_executor/aot_executor.h>
-
-int test_run_func(TVMValue* args, int* arg_type_ids, int num_args, TVMValue*
out_ret_value,
- int* out_ret_tcode, void* resource_handle) {
- return kTvmErrorNoError;
-}
-
-TEST(AOTRuntime, NoOp) {
- const tvm_model_t test_model = {
- .num_input_tensors = 0,
- .num_output_tensors = 0,
- .run_func = &test_run_func,
- };
-
- ASSERT_EQ(kTvmErrorNoError, tvm_runtime_run(&test_model, NULL, NULL));
-}
-
-int32_t error_run_func(TVMValue* args, int* arg_type_ids, int32_t num_args,
TVMValue* out_ret_value,
- int* out_ret_tcode, void* resource_handle) {
- return kTvmErrorPlatformNoMemory;
-}
-
-TEST(AOTRuntime, Error) {
- const tvm_model_t error_model = {
- .num_input_tensors = 0,
- .num_output_tensors = 0,
- .run_func = &error_run_func,
- };
-
- ASSERT_EQ(kTvmErrorPlatformNoMemory, tvm_runtime_run(&error_model, NULL,
NULL));
-}
-
-int32_t identity_run_func(TVMValue* args, int* arg_type_ids, int32_t num_args,
- TVMValue* out_ret_value, int* out_ret_tcode, void*
resource_handle) {
- void* arg0 = (((TVMValue*)args)[0].v_handle);
- void* arg1 = (((TVMValue*)args)[1].v_handle);
- void* placeholder = (((DLTensor*)arg0)[0].data);
- void* T_id = (((DLTensor*)arg1)[0].data);
- ((uint32_t*)T_id)[(0)] = ((uint32_t*)placeholder)[(0)];
- return kTvmErrorNoError;
-}
-
-TEST(AOTRuntime, Identity) {
- const tvm_model_t identity_model = {
- .num_input_tensors = 1,
- .num_output_tensors = 1,
- .run_func = &identity_run_func,
- };
-
- uint32_t inputs1[1] = {404};
- void* inputs[] = {inputs1};
- uint32_t outputs1[1];
- void* outputs[] = {outputs1};
-
- ASSERT_EQ(kTvmErrorNoError, tvm_runtime_run(&identity_model, inputs,
outputs));
- ASSERT_EQ(outputs1[0], 404U);
-}
-
-int32_t add_run_func(TVMValue* args, int* arg_type_ids, int32_t num_args,
TVMValue* out_ret_value,
- int* out_ret_tcode, void* resource_handle) {
- void* arg0 = (((TVMValue*)args)[0].v_handle);
- void* arg1 = (((TVMValue*)args)[1].v_handle);
- void* placeholder = (((DLTensor*)arg0)[0].data);
- void* T_add = (((DLTensor*)arg1)[0].data);
- ((uint32_t*)T_add)[(0)] = ((uint32_t*)placeholder)[(0)] +
((uint32_t*)placeholder)[(1)];
- return kTvmErrorNoError;
-
- return kTvmErrorNoError;
-}
-
-TEST(AOTRuntime, Add) {
- const tvm_model_t add_model = {
- .num_input_tensors = 1,
- .num_output_tensors = 1,
- .run_func = &add_run_func,
- };
-
- uint32_t inputs1[2] = {404, 500};
- void* inputs[] = {inputs1};
- uint32_t outputs1[1];
- void* outputs[] = {outputs1};
-
- ASSERT_EQ(kTvmErrorNoError, tvm_runtime_run(&add_model, inputs, outputs));
- ASSERT_EQ(outputs1[0], 904U);
-}
-
-int32_t multiple_inputs_run_func(TVMValue* args, int* arg_type_ids, int32_t
num_args,
- TVMValue* out_ret_value, int* out_ret_tcode,
- void* resource_handle) {
- void* arg0 = (((TVMValue*)args)[0].v_handle);
- void* arg1 = (((TVMValue*)args)[1].v_handle);
- void* arg2 = (((TVMValue*)args)[2].v_handle);
- void* placeholder = (((DLTensor*)arg0)[0].data);
- void* placeholder1 = (((DLTensor*)arg1)[0].data);
- void* T_add = (((DLTensor*)arg2)[0].data);
- ((uint32_t*)T_add)[(0)] = ((uint32_t*)placeholder)[(0)] +
((uint32_t*)placeholder)[(1)] +
- ((uint32_t*)placeholder1)[(0)] +
((uint32_t*)placeholder1)[(1)];
- return kTvmErrorNoError;
-}
-
-TEST(AOTRuntime, MultipleInputs) {
- const tvm_model_t multiple_inputs_model = {
- .num_input_tensors = 2,
- .num_output_tensors = 1,
- .run_func = &multiple_inputs_run_func,
- };
-
- uint32_t inputs1[2] = {404, 500};
- uint32_t inputs2[2] = {200, 202};
- void* inputs[] = {inputs1, inputs2};
-
- uint32_t outputs1[1];
- void* outputs[] = {outputs1};
-
- ASSERT_EQ(kTvmErrorNoError, tvm_runtime_run(&multiple_inputs_model, inputs,
outputs));
- ASSERT_EQ(outputs1[0], 1306U);
-}
-
-int32_t multiple_outputs_run_func(TVMValue* args, int* arg_type_ids, int32_t
num_args,
- TVMValue* out_ret_value, int* out_ret_tcode,
- void* resource_handle) {
- void* arg0 = (((TVMValue*)args)[0].v_handle);
- void* arg1 = (((TVMValue*)args)[1].v_handle);
- void* arg2 = (((TVMValue*)args)[2].v_handle);
- void* placeholder = (((DLTensor*)arg0)[0].data);
- void* T_split1 = (((DLTensor*)arg1)[0].data);
- void* T_split2 = (((DLTensor*)arg2)[0].data);
- ((uint32_t*)T_split1)[(0)] = ((uint32_t*)placeholder)[(0)];
- ((uint32_t*)T_split2)[(0)] = ((uint32_t*)placeholder)[(1)];
- return kTvmErrorNoError;
-}
-
-TEST(AOTRuntime, MultipleOutputs) {
- const tvm_model_t multiple_outputs_model = {
- .num_input_tensors = 1,
- .num_output_tensors = 2,
- .run_func = &multiple_outputs_run_func,
- };
-
- uint32_t inputs1[2] = {404, 500};
- void* inputs[] = {inputs1};
-
- uint32_t outputs1[1];
- uint32_t outputs2[1];
- void* outputs[] = {outputs1, outputs2};
-
- ASSERT_EQ(kTvmErrorNoError, tvm_runtime_run(&multiple_outputs_model, inputs,
outputs));
- ASSERT_EQ(outputs1[0], 404U);
- ASSERT_EQ(outputs2[0], 500U);
-}
-
-int main(int argc, char** argv) {
- testing::InitGoogleTest(&argc, argv);
- testing::FLAGS_gtest_death_test_style = "threadsafe";
- return RUN_ALL_TESTS();
-}
diff --git a/tests/python/relay/aot/aot_test.mk
b/tests/python/relay/aot/aot_test.mk
index 0c47a32..04a77f0 100644
--- a/tests/python/relay/aot/aot_test.mk
+++ b/tests/python/relay/aot/aot_test.mk
@@ -42,7 +42,7 @@ aot_test_runner: $(build_dir)/aot_test_runner
source_libs= $(wildcard $(build_dir)/../codegen/host/src/*.c)
lib_objs =$(source_libs:.c=.o)
-$(build_dir)/aot_test_runner: $(build_dir)/test.c $(build_dir)/aot_executor.o
$(source_libs) $(build_dir)/stack_allocator.o $(build_dir)/crt_backend_api.o
+$(build_dir)/aot_test_runner: $(build_dir)/test.c $(source_libs)
$(build_dir)/stack_allocator.o $(build_dir)/crt_backend_api.o
$(QUIET)mkdir -p $(@D)
$(QUIET)$(CC) $(CFLAGS) $(PKG_CFLAGS) -o $@ $^ $(PKG_LDFLAGS)
$(BACKTRACE_LDFLAGS) $(BACKTRACE_CFLAGS) -lm
@@ -50,10 +50,6 @@ $(build_dir)/%.o: $(build_dir)/../codegen/host/src/%.c
$(QUIET)mkdir -p $(@D)
$(QUIET)$(CC) $(CFLAGS) -c $(PKG_CFLAGS) -o $@ $^ $(BACKTRACE_CFLAGS)
-$(build_dir)/aot_executor.o:
$(STANDALONE_CRT_DIR)/src/runtime/crt/aot_executor/aot_executor.c
- $(QUIET)mkdir -p $(@D)
- $(QUIET)$(CC) $(CFLAGS) -c $(PKG_CFLAGS) -o $@ $^ $(BACKTRACE_CFLAGS)
-
$(build_dir)/stack_allocator.o:
$(STANDALONE_CRT_DIR)/src/runtime/crt/memory/stack_allocator.c
$(QUIET)mkdir -p $(@D)
$(QUIET)$(CC) $(CFLAGS) -c $(PKG_CFLAGS) -o $@ $^ $(BACKTRACE_CFLAGS)