diff --git a/include/mace/public/mace.h b/include/mace/public/mace.h index 6417fe98a90c06f59c40722001f9020b96d24877..77488e77ba7097692aea12ef11f760b9df56dfb2 100644 --- a/include/mace/public/mace.h +++ b/include/mace/public/mace.h @@ -431,6 +431,12 @@ class MACE_API MaceEngine { std::map *outputs, RunMetadata *run_metadata); + // @Deprecated, will be removed in future version + MaceStatus Init(const NetDef *net_def, + const std::vector &input_nodes, + const std::vector &output_nodes, + const unsigned char *model_data); + private: class Impl; std::unique_ptr impl_; diff --git a/mace/core/runtime/apu/apu_wrapper.cc b/mace/core/runtime/apu/apu_wrapper.cc index 08740364fc40e5d47b8e3045c405e31740e08bdd..42b8956af504b26df903b58cde01ec8f9ce4bd42 100644 --- a/mace/core/runtime/apu/apu_wrapper.cc +++ b/mace/core/runtime/apu/apu_wrapper.cc @@ -106,8 +106,10 @@ bool ApuWrapper::Init(const NetDef &net_def, } const auto tensor_end = const_tensor.offset() + const_tensor->data_size() * GetEnumTypeSize(const_tensor.data_type()); - MACE_CHECK(tensor_end <= model_data_size, "tensor_end (", tensor_end, - ") should <= ", model_data_size); + if (model_data_size >= 0) { + MACE_CHECK(tensor_end <= model_data_size, "tensor_end (", tensor_end, + ") should <= ", model_data_size); + } tensor.data_buf = const_cast(model_data + const_tensor.offset()); const_tensors.push_back(tensor); diff --git a/mace/core/runtime/hexagon/hexagon_dsp_wrapper.cc b/mace/core/runtime/hexagon/hexagon_dsp_wrapper.cc index 4519e19c2e57e5969788052673c17084fc03eb84..e5c7086ef6ea22274fedbc8d47d64db53c242360 100644 --- a/mace/core/runtime/hexagon/hexagon_dsp_wrapper.cc +++ b/mace/core/runtime/hexagon/hexagon_dsp_wrapper.cc @@ -189,9 +189,11 @@ bool HexagonDSPWrapper::SetupGraph(const NetDef &net_def, data = const_cast(model_data + const_tensor.offset()); data_len = const_tensor.data_size() * GetEnumTypeSize(const_tensor.data_type()); - MACE_CHECK(const_tensor.offset() + data_len <= model_data_size, - "tensor end (", const_tensor.offset() + data_len, - ") should <= ", model_data_size); + if (model_data_size >= 0) { + MACE_CHECK(const_tensor.offset() + data_len <= model_data_size, + "tensor end (", const_tensor.offset() + data_len, + ") should <= ", model_data_size); + } } MACE_CHECK( hexagon_nn_append_const_node(nn_id_, diff --git a/mace/core/runtime/hexagon/hexagon_hta_wrapper.cc b/mace/core/runtime/hexagon/hexagon_hta_wrapper.cc index ed70e48ecc2bd84f70c57a5ec1f03b140743b6df..ebcdf3cd31eb6a0495506e61d7d213cb30911569 100644 --- a/mace/core/runtime/hexagon/hexagon_hta_wrapper.cc +++ b/mace/core/runtime/hexagon/hexagon_hta_wrapper.cc @@ -160,9 +160,12 @@ bool HexagonHTAWrapper::SetupGraph(const NetDef &net_def, const_cast(model_data + const_tensor.offset()); const_node_data_len = const_tensor.data_size() * GetEnumTypeSize(const_tensor.data_type()); - MACE_CHECK(const_tensor.offset() + const_node_data_len <= model_data_size, - "tensor end (", const_tensor.offset() + const_node_data_len, - ") should <= ", model_data_size); + if (model_data_size >= 0) { + MACE_CHECK( + const_tensor.offset() + const_node_data_len <= model_data_size, + "tensor end (", const_tensor.offset() + const_node_data_len, + ") should <= ", model_data_size); + } } hexagon_hta_nn_append_const_node(nn_id_, diff --git a/mace/core/workspace.cc b/mace/core/workspace.cc index c735b2fbdf779847747020ad6374217cabd43333..77ecfa77c0989ca3ae8cca2eba684ea54c6c6214 100644 --- a/mace/core/workspace.cc +++ b/mace/core/workspace.cc @@ -123,8 +123,10 @@ MaceStatus Workspace::LoadModelTensor(const NetDef &net_def, Device *device, MACE_LATENCY_LOGGER(1, "Load model tensors"); index_t valid_data_size = GetModelValidSize(net_def); VLOG(3) << "Model valid data size: " << valid_data_size; - MACE_CHECK(valid_data_size <= model_data_size, - valid_data_size, "should be smaller than", model_data_size); + if (model_data_size >= 0) { + MACE_CHECK(valid_data_size <= model_data_size, + valid_data_size, "should be smaller than", model_data_size); + } const DeviceType device_type = device->device_type(); if (valid_data_size > 0) { @@ -170,8 +172,10 @@ MaceStatus Workspace::LoadModelTensor(const NetDef &net_def, Device *device, "Tensor's data_size not equal with the shape"); const index_t tensor_end = const_tensor.offset() + tensor->size() * GetEnumTypeSize(const_tensor.data_type()); - MACE_CHECK(tensor_end <= model_data_size, "tensor_end (", tensor_end, - ") should <= ", model_data_size); + if (model_data_size >= 0) { + MACE_CHECK(tensor_end <= model_data_size, "tensor_end (", tensor_end, + ") should <= ", model_data_size); + } if (device_type == DeviceType::CPU && const_tensor.data_type() == DataType::DT_HALF) { diff --git a/mace/libmace/BUILD.bazel b/mace/libmace/BUILD.bazel index 051a57e7ad231e703650453d9bfead0a60c11c5b..f7935811cbb64234737c997a9b8b1ef09ffe9a3e 100644 --- a/mace/libmace/BUILD.bazel +++ b/mace/libmace/BUILD.bazel @@ -119,6 +119,8 @@ genrule( ]) + if_opencl_enabled([ "//mace/ops:opencl_kernels", "//mace/codegen:generated_opencl", + ]) + if_rpcmem_enabled([ + "//third_party/rpcmem:rpcmem.a", ]) + if_neon_enabled([ "//mace/ops:arm_neon_kernels", ]), @@ -165,6 +167,10 @@ genrule( "$(locations //mace/codegen:generated_opencl) ", default_value = "", ) + + if_rpcmem_enabled( + "$(locations //third_party/rpcmem:rpcmem.a) ", + default_value = "", + ) + "$@ " + "$$tmp_mri_file);" + if_darwin( diff --git a/mace/libmace/mace.cc b/mace/libmace/mace.cc index a03e877499785913671524ab31753535c146acca..743d10c6acdad0559c7aa310f0f653ef6eb897c8 100644 --- a/mace/libmace/mace.cc +++ b/mace/libmace/mace.cc @@ -1032,6 +1032,13 @@ MaceStatus MaceEngine::Run(const std::map &inputs, return impl_->Run(inputs, outputs, nullptr); } +MaceStatus MaceEngine::Init(const NetDef *net_def, + const std::vector &input_nodes, + const std::vector &output_nodes, + const unsigned char *model_data) { + return impl_->Init(net_def, input_nodes, output_nodes, model_data, -1); +} + MaceStatus CreateMaceEngineFromProto( const unsigned char *model_graph_proto, const size_t model_graph_proto_size, diff --git a/mace/mace.bzl b/mace/mace.bzl index 895cc9ba8050aad0dedfe0282af4fea4fd7d1050..007b8b655cc4a3a67b7d7ae4e5d3e9aa4ce5d63c 100644 --- a/mace/mace.bzl +++ b/mace/mace.bzl @@ -109,10 +109,10 @@ def if_bfloat16_enabled(a): "//conditions:default": [], }) -def if_rpcmem_enabled(a): +def if_rpcmem_enabled(a, default_value = []): return select({ "//mace:rpcmem_enabled": a, - "//conditions:default": [], + "//conditions:default": default_value, }) def mace_version_genrule(): diff --git a/third_party/rpcmem/BUILD.bazel b/third_party/rpcmem/BUILD.bazel index 1a1a061cca7f2c99637bcec066c040763133a94b..5bfee305b98c51a3e5c62f7e3424176d647fca8e 100644 --- a/third_party/rpcmem/BUILD.bazel +++ b/third_party/rpcmem/BUILD.bazel @@ -1,4 +1,7 @@ # These files are generated fron rpcmem project +package( + default_visibility = ["//visibility:public"], +) licenses(["notice"]) @@ -10,13 +13,20 @@ load( "if_android_armv7", ) -cc_library( - name = "rpcmem", +filegroup( + name = "rpcmem.a", srcs = if_android_armv7([ "armeabi-v7a/rpcmem.a", ]) + if_android_arm64([ "arm64-v8a/rpcmem.a", ]), +) + +cc_library( + name = "rpcmem", + srcs = [ + ":rpcmem.a", + ], hdrs = [ "rpcmem.h", ],