Merge pull request !2130 from yanghaoran/mastertags/v1.8.0^0
| @@ -125,7 +125,6 @@ else () | |||||
| message(STATUS "PLATFORM param is invalid, should be train or inference, you choose nothing!") | message(STATUS "PLATFORM param is invalid, should be train or inference, you choose nothing!") | ||||
| endif() | endif() | ||||
| endif() | endif() | ||||
| set(METADEF_DIR ${CMAKE_CURRENT_LIST_DIR}/metadef) | set(METADEF_DIR ${CMAKE_CURRENT_LIST_DIR}/metadef) | ||||
| set(PARSER_DIR ${CMAKE_CURRENT_LIST_DIR}/parser) | set(PARSER_DIR ${CMAKE_CURRENT_LIST_DIR}/parser) | ||||
| set(GE_DEPEND_DIR ${CMAKE_CURRENT_LIST_DIR}/..) | set(GE_DEPEND_DIR ${CMAKE_CURRENT_LIST_DIR}/..) | ||||
| @@ -158,6 +157,7 @@ else () | |||||
| elseif(ENABLE_MS_TESTCASES) | elseif(ENABLE_MS_TESTCASES) | ||||
| include(cmake/external_libs/protobuf_static.cmake) | include(cmake/external_libs/protobuf_static.cmake) | ||||
| include(cmake/external_libs/protoc.cmake) | include(cmake/external_libs/protoc.cmake) | ||||
| include(cmake/external_libs/json.cmake) | |||||
| include(cmake/external_libs/securec.cmake) | include(cmake/external_libs/securec.cmake) | ||||
| include(cmake/FindModule.cmake) | include(cmake/FindModule.cmake) | ||||
| include(cmake/intf_pub_linux.cmake) | include(cmake/intf_pub_linux.cmake) | ||||
| @@ -175,5 +175,4 @@ else () | |||||
| endif() | endif() | ||||
| add_subdirectory(ge) | add_subdirectory(ge) | ||||
| endif () | endif () | ||||
| @@ -9,10 +9,6 @@ if (GE_PB_PKG) | |||||
| set(REQ_URL "${GE_PB_PKG}/libs/ge_nlohmann_json/include.zip") | set(REQ_URL "${GE_PB_PKG}/libs/ge_nlohmann_json/include.zip") | ||||
| set(MD5 "0dc903888211db3a0f170304cd9f3a89") | set(MD5 "0dc903888211db3a0f170304cd9f3a89") | ||||
| set(JSON_INCLUDE_DIR ${JSON_SRC_DIR}) | set(JSON_INCLUDE_DIR ${JSON_SRC_DIR}) | ||||
| #elseif (ENABLE_GITEE) | |||||
| # set(REQ_URL "https://gitee.com/mirrors/JSON-for-Modern-CPP/repository/archive/v3.6.1.zip") | |||||
| # set(MD5 "5bda78ce308e6cfcf614dcf1d5ff27a7") | |||||
| #set(JSON_INCLUDE_DIR "${JSON_SRC_DIR}/include") | |||||
| else() | else() | ||||
| set(REQ_URL "https://github.com/nlohmann/json/releases/download/v3.6.1/include.zip") | set(REQ_URL "https://github.com/nlohmann/json/releases/download/v3.6.1/include.zip") | ||||
| set(MD5 "0dc903888211db3a0f170304cd9f3a89") | set(MD5 "0dc903888211db3a0f170304cd9f3a89") | ||||
| @@ -34,7 +34,6 @@ void GeModel::Init() { | |||||
| } | } | ||||
| GeModel::GeModel() { | GeModel::GeModel() { | ||||
| attrs_.InitDefault(); | |||||
| Init(); | Init(); | ||||
| } | } | ||||
| @@ -78,12 +77,12 @@ void GeModel::SetPlatformVersion(const std::string &platform_version) { this->pl | |||||
| void GeModel::SetPlatformType(uint8_t platform_type) { this->platform_type_ = platform_type; } | void GeModel::SetPlatformType(uint8_t platform_type) { this->platform_type_ = platform_type; } | ||||
| void GeModel::SetAttr(const ProtoAttrMapHelper &attrs) { attrs_ = attrs; } | |||||
| void GeModel::SetAttr(const ProtoAttrMap &attrs) { attrs_ = attrs; } | |||||
| ProtoAttrMapHelper GeModel::MutableAttrMap() { return attrs_; } | |||||
| ProtoAttrMap &GeModel::MutableAttrMap() { return attrs_; } | |||||
| ConstProtoAttrMapHelper GeModel::GetAttrMap() const { | |||||
| return ConstProtoAttrMapHelper(attrs_.GetProtoOwner(), attrs_.GetProtoMsg()); | |||||
| ConstProtoAttrMap &GeModel::GetAttrMap() const { | |||||
| return attrs_; | |||||
| } | } | ||||
| Status GeModel::GetSessionId(uint32_t model_id, uint64_t &session_id) const { | Status GeModel::GetSessionId(uint32_t model_id, uint64_t &session_id) const { | ||||
| @@ -17,24 +17,26 @@ | |||||
| #ifndef GE_MODEL_GE_MODEL_H_ | #ifndef GE_MODEL_GE_MODEL_H_ | ||||
| #define GE_MODEL_GE_MODEL_H_ | #define GE_MODEL_GE_MODEL_H_ | ||||
| #include <securec.h> | |||||
| #include <map> | #include <map> | ||||
| #include <memory> | #include <memory> | ||||
| #include <string> | #include <string> | ||||
| #include "securec.h" | |||||
| #include "runtime/rt.h" | |||||
| #include "common/tbe_kernel_store.h" | #include "common/tbe_kernel_store.h" | ||||
| #include "common/cust_aicpu_kernel_store.h" | #include "common/cust_aicpu_kernel_store.h" | ||||
| #include "framework/common/debug/log.h" | #include "framework/common/debug/log.h" | ||||
| #include "framework/common/fmk_error_codes.h" | #include "framework/common/fmk_error_codes.h" | ||||
| #include "framework/common/ge_types.h" | |||||
| #include "graph/buffer.h" | #include "graph/buffer.h" | ||||
| #include "external/graph/graph.h" | #include "external/graph/graph.h" | ||||
| #include "proto/task.pb.h" | #include "proto/task.pb.h" | ||||
| namespace ge { | namespace ge { | ||||
| const uint32_t INVALID_MODEL_ID = 0xFFFFFFFFUL; | |||||
| class GeModel : public AttrHolder { | class GeModel : public AttrHolder { | ||||
| public: | public: | ||||
| GeModel(); | GeModel(); | ||||
| ~GeModel() = default; | |||||
| ~GeModel() override = default; | |||||
| GeModel(const GeModel &other) = delete; | GeModel(const GeModel &other) = delete; | ||||
| GeModel &operator=(const GeModel &other) = delete; | GeModel &operator=(const GeModel &other) = delete; | ||||
| @@ -55,34 +57,34 @@ class GeModel : public AttrHolder { | |||||
| void SetCustAICPUKernelStore(const CustAICPUKernelStore &cust_aicpu_kernal_store); | void SetCustAICPUKernelStore(const CustAICPUKernelStore &cust_aicpu_kernal_store); | ||||
| void SetWeight(const Buffer &weights_buffer); | void SetWeight(const Buffer &weights_buffer); | ||||
| bool LoadTBEKernelStore(const uint8_t *const data, const size_t len); | |||||
| bool loadAICPUKernelStore(const uint8_t *const data, const size_t len); | |||||
| void SetName(const std::string &name); | void SetName(const std::string &name); | ||||
| void SetVersion(uint32_t version); | |||||
| void SetVersion(const uint32_t version); | |||||
| void SetPlatformVersion(const std::string &platform_version); | void SetPlatformVersion(const std::string &platform_version); | ||||
| void SetPlatformType(uint8_t platform_type); | |||||
| void SetPlatformType(const uint8_t platform_type); | |||||
| void SetAttr(const ProtoAttrMapHelper &attrs); | |||||
| void SetAttr(const ProtoAttrMap &attrs); | |||||
| ProtoAttrMapHelper MutableAttrMap() override; | |||||
| ProtoAttrMap &MutableAttrMap() override; | |||||
| using AttrHolder::SetAttr; | using AttrHolder::SetAttr; | ||||
| using AttrHolder::GetAllAttrs; | using AttrHolder::GetAllAttrs; | ||||
| using AttrHolder::GetAllAttrNames; | using AttrHolder::GetAllAttrNames; | ||||
| void SetModelId(uint32_t model_id) { model_id_ = model_id; } | |||||
| void SetModelId(const uint32_t model_id) { model_id_ = model_id; } | |||||
| uint32_t GetModelId() const { return model_id_; } | uint32_t GetModelId() const { return model_id_; } | ||||
| Status GetSessionId(uint32_t model_id, uint64_t &session_id) const; | |||||
| void InsertSessionMap(uint32_t model_id, uint64_t session_id) { | |||||
| model_id_to_session_id_map_.insert({model_id, session_id}); | |||||
| } | |||||
| Status GetSessionId(const uint32_t model_id, uint64_t &session_id) const; | |||||
| protected: | protected: | ||||
| ConstProtoAttrMapHelper GetAttrMap() const override; | |||||
| ConstProtoAttrMap &GetAttrMap() const override; | |||||
| private: | private: | ||||
| void Init(); | void Init(); | ||||
| ProtoAttrMapHelper attrs_; /*lint !e148*/ | |||||
| ProtoAttrMap attrs_; /*lint !e148*/ | |||||
| Graph graph_; | Graph graph_; | ||||
| std::shared_ptr<domi::ModelTaskDef> task_; /*lint !e148*/ | std::shared_ptr<domi::ModelTaskDef> task_; /*lint !e148*/ | ||||
| @@ -91,9 +93,9 @@ class GeModel : public AttrHolder { | |||||
| Buffer weights_buffer_; /*lint !e148*/ | Buffer weights_buffer_; /*lint !e148*/ | ||||
| std::string name_; | std::string name_; | ||||
| uint32_t version_ = {0}; | |||||
| uint32_t version_ = {0U}; | |||||
| std::string platform_version_; | std::string platform_version_; | ||||
| uint8_t platform_type_ = {0}; | |||||
| uint8_t platform_type_ = {0U}; | |||||
| uint32_t model_id_ = INVALID_MODEL_ID; | uint32_t model_id_ = INVALID_MODEL_ID; | ||||
| std::map<uint32_t, uint64_t> model_id_to_session_id_map_; | std::map<uint32_t, uint64_t> model_id_to_session_id_map_; | ||||
| }; | }; | ||||
| @@ -16,6 +16,7 @@ set(GE_SRC_LIST | |||||
| "task/label_goto_task.cc" | "task/label_goto_task.cc" | ||||
| "task/label_set_task.cc" | "task/label_set_task.cc" | ||||
| "task/label_switch_task.cc" | "task/label_switch_task.cc" | ||||
| "task/label_manager.cc" | |||||
| ) | ) | ||||
| add_library(ge_runtime SHARED ${GE_SRC_LIST}) | add_library(ge_runtime SHARED ${GE_SRC_LIST}) | ||||
| @@ -53,15 +53,7 @@ HcclTask::HcclTask(const ModelContext &model_context, const std::shared_ptr<Hccl | |||||
| } | } | ||||
| } | } | ||||
| HcclTask::~HcclTask() { | |||||
| if (workspace_mem_ != nullptr) { | |||||
| rtError_t rt_ret = rtFree(workspace_mem_); | |||||
| if (rt_ret != RT_ERROR_NONE) { | |||||
| GELOGE(RT_FAILED, "rtFree workspace_mem_ failed! ret: 0x%X.", rt_ret); | |||||
| } | |||||
| workspace_mem_ = nullptr; | |||||
| } | |||||
| } | |||||
| HcclTask::~HcclTask() {} | |||||
| bool HcclTask::Distribute() { | bool HcclTask::Distribute() { | ||||
| // Ops kernel info store | // Ops kernel info store | ||||
| @@ -80,11 +72,7 @@ bool HcclTask::Distribute() { | |||||
| SetSecondaryStream(); | SetSecondaryStream(); | ||||
| if (task_info_->workspace_size() > 0) { | if (task_info_->workspace_size() > 0) { | ||||
| rtError_t rt_ret = rtMalloc(&workspace_mem_, task_info_->workspace_size(), RT_MEMORYINFO_HBM); | |||||
| if (rt_ret != RT_ERROR_NONE) { | |||||
| GELOGE(RT_FAILED, "Call rt api failed, ret: 0x%X", rt_ret); | |||||
| return false; | |||||
| } | |||||
| workspace_mem_ = task_info_->workspace_addr(); | |||||
| } | } | ||||
| GELOGI("HcclTaskInfo Distribute Start. begin to call function LoadTask in hccl."); | GELOGI("HcclTaskInfo Distribute Start. begin to call function LoadTask in hccl."); | ||||
| @@ -16,33 +16,46 @@ | |||||
| #include "ge_runtime/task/label_goto_task.h" | #include "ge_runtime/task/label_goto_task.h" | ||||
| #include "ge_runtime/task/task_factory.h" | #include "ge_runtime/task/task_factory.h" | ||||
| #include "framework/common/util.h" | |||||
| namespace ge { | namespace ge { | ||||
| namespace model_runner { | namespace model_runner { | ||||
| LabelGotoTask::LabelGotoTask(const ModelContext &model_context, const std::shared_ptr<LabelGotoTaskInfo> &task_info) | LabelGotoTask::LabelGotoTask(const ModelContext &model_context, const std::shared_ptr<LabelGotoTaskInfo> &task_info) | ||||
| : TaskRepeater<LabelGotoTaskInfo>(model_context, task_info), task_info_(task_info) { | |||||
| : TaskRepeater<LabelGotoTaskInfo>(model_context, task_info), | |||||
| task_info_(task_info), | |||||
| stream_(nullptr), | |||||
| index_value_(nullptr) { | |||||
| if (task_info_ == nullptr) { | if (task_info_ == nullptr) { | ||||
| GELOGW("task_info_ is null!"); | GELOGW("task_info_ is null!"); | ||||
| return; | return; | ||||
| } | } | ||||
| auto stream_list = model_context.stream_list(); | auto stream_list = model_context.stream_list(); | ||||
| auto label_list = model_context.label_list(); | auto label_list = model_context.label_list(); | ||||
| rt_model_handle_ = model_context.rt_model_handle(); | |||||
| uint32_t stream_id = task_info->stream_id(); | uint32_t stream_id = task_info->stream_id(); | ||||
| uint32_t label_id = task_info->label_id(); | |||||
| label_id_ = task_info->label_id(); | |||||
| GELOGI("Stream list size:%zu, stream id:%u.", stream_list.size(), stream_id); | GELOGI("Stream list size:%zu, stream id:%u.", stream_list.size(), stream_id); | ||||
| GELOGI("Label list size:%zu, label id:%u.", label_list.size(), label_id); | |||||
| if (stream_id >= stream_list.size() || label_id >= label_list.size()) { | |||||
| GELOGI("Label list size:%zu, label id:%u.", label_list.size(), label_id_); | |||||
| if (stream_id >= stream_list.size() || label_id_ >= label_list.size()) { | |||||
| GELOGW("Stream/Label id invalid."); | GELOGW("Stream/Label id invalid."); | ||||
| return; | return; | ||||
| } | } | ||||
| stream_ = stream_list[stream_id]; | stream_ = stream_list[stream_id]; | ||||
| label_ = label_list[label_id]; | |||||
| label_manager_ = LabelManager::GetInstance(); | |||||
| if (label_manager_ == nullptr) { | |||||
| GELOGW("Get label manager instance failed."); | |||||
| return; | |||||
| } | |||||
| label_info_ = label_manager_->GetLabelInfo(rt_model_handle_, {label_id_}, label_list); | |||||
| } | } | ||||
| LabelGotoTask::~LabelGotoTask() { | LabelGotoTask::~LabelGotoTask() { | ||||
| GE_FREE_RT_LOG(label_info_); | |||||
| GE_FREE_RT_LOG(index_value_); | |||||
| if (index_value_ != nullptr) { | |||||
| rtError_t rt_ret = rtFree(index_value_); | |||||
| if (rt_ret != RT_ERROR_NONE) { | |||||
| GELOGE(RT_FAILED, "rtFree index_value_ failed! ret: 0x%X.", rt_ret); | |||||
| } | |||||
| index_value_ = nullptr; | |||||
| } | |||||
| } | } | ||||
| bool LabelGotoTask::Distribute() { | bool LabelGotoTask::Distribute() { | ||||
| @@ -94,21 +107,34 @@ bool LabelGotoTask::CheckParamValid() { | |||||
| return false; | return false; | ||||
| } | } | ||||
| if (label_ == nullptr) { | |||||
| GELOGE(PARAM_INVALID, "label is null!"); | |||||
| if (label_info_ == nullptr) { | |||||
| GELOGE(PARAM_INVALID, "label info is null!"); | |||||
| return false; | return false; | ||||
| } | } | ||||
| if (label_info_ != nullptr) { | |||||
| GELOGE(PARAM_INVALID, "label_info_ has dirty data."); | |||||
| return false; | |||||
| if (index_value_ == nullptr) { | |||||
| rtError_t rt_ret = rtMalloc(&index_value_, sizeof(uint64_t), RT_MEMORY_HBM); | |||||
| if (rt_ret != RT_ERROR_NONE) { | |||||
| GELOGE(RT_FAILED, "Call rt api failed, ret: 0x%X", rt_ret); | |||||
| return false; | |||||
| } | |||||
| uint64_t index = 0; | |||||
| rt_ret = rtMemcpy(index_value_, sizeof(uint64_t), &index, sizeof(index), RT_MEMCPY_HOST_TO_DEVICE); | |||||
| if (rt_ret != RT_ERROR_NONE) { | |||||
| GELOGE(RT_FAILED, "Call rt api failed, ret: 0x%X", rt_ret); | |||||
| return false; | |||||
| } | |||||
| } | } | ||||
| if (index_value_ != nullptr) { | |||||
| GELOGE(PARAM_INVALID, "index_value_ has dirty data."); | |||||
| void *label_info = label_info_->GetLabelInfo(); | |||||
| rtError_t rt_ret = rtLabelSwitchByIndex(index_value_, 1, label_info, stream_); | |||||
| if (rt_ret != RT_ERROR_NONE) { | |||||
| GELOGE(RT_FAILED, "Call rt api failed, ret: 0x%X", rt_ret); | |||||
| return false; | return false; | ||||
| } | } | ||||
| GELOGI("DistributeTask end."); | |||||
| return true; | return true; | ||||
| } | } | ||||
| @@ -18,7 +18,11 @@ | |||||
| #define GE_GE_RUNTIME_TASK_LABEL_GOTO_TASK_H_ | #define GE_GE_RUNTIME_TASK_LABEL_GOTO_TASK_H_ | ||||
| #include <memory> | #include <memory> | ||||
| #include <vector> | |||||
| #include <map> | |||||
| #include <mutex> | |||||
| #include "ge_runtime/task/task.h" | #include "ge_runtime/task/task.h" | ||||
| #include "ge_runtime/task/label_manager.h" | |||||
| namespace ge { | namespace ge { | ||||
| namespace model_runner { | namespace model_runner { | ||||
| @@ -31,13 +35,13 @@ class LabelGotoTask : public TaskRepeater<LabelGotoTaskInfo> { | |||||
| bool Distribute() override; | bool Distribute() override; | ||||
| private: | private: | ||||
| bool CheckParamValid(); | |||||
| std::shared_ptr<LabelGotoTaskInfo> task_info_; | std::shared_ptr<LabelGotoTaskInfo> task_info_; | ||||
| void *stream_{nullptr}; | |||||
| void *label_{nullptr}; | |||||
| void *label_info_{nullptr}; | |||||
| void *index_value_{nullptr}; | |||||
| void *stream_; | |||||
| std::shared_ptr<LabelGuard> label_info_; | |||||
| void *index_value_; | |||||
| uint32_t label_id_; | |||||
| rtModel_t rt_model_handle_; | |||||
| std::shared_ptr<LabelManager> label_manager_; | |||||
| }; | }; | ||||
| } // namespace model_runner | } // namespace model_runner | ||||
| } // namespace ge | } // namespace ge | ||||
| @@ -0,0 +1,119 @@ | |||||
| /** | |||||
| * Copyright 2021 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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 "ge_runtime/task/label_manager.h" | |||||
| #include <algorithm> | |||||
| #include <string> | |||||
| #include "runtime/mem.h" | |||||
| #include "runtime/rt_model.h" | |||||
| #include "common/ge_inner_error_codes.h" | |||||
| #include "framework/common/debug/ge_log.h" | |||||
| namespace ge { | |||||
| namespace model_runner { | |||||
| std::weak_ptr<LabelManager> LabelManager::instance_; | |||||
| std::mutex LabelManager::instance_mutex_; | |||||
| template <class T> | |||||
| static std::string GetVectorString(const std::vector<T> &vec) { | |||||
| std::string ret; | |||||
| for (size_t i = 0; i < vec.size(); ++i) { | |||||
| if (i != 0) { | |||||
| ret.push_back(','); | |||||
| } | |||||
| ret += std::to_string(vec[i]); | |||||
| } | |||||
| return ret; | |||||
| } | |||||
| LabelGuard::~LabelGuard() { | |||||
| void *label_info = GetLabelInfo(); | |||||
| if (label_info != nullptr) { | |||||
| rtError_t rt_ret = rtFree(label_info); | |||||
| if (rt_ret != RT_ERROR_NONE) { | |||||
| GELOGE(RT_FAILED, "rtFree label_info failed! ret: 0x%X.", rt_ret); | |||||
| } | |||||
| } | |||||
| } | |||||
| std::shared_ptr<LabelManager> LabelManager::GetInstance() { | |||||
| std::lock_guard<std::mutex> lock(instance_mutex_); | |||||
| auto instance = instance_.lock(); | |||||
| if (instance != nullptr) { | |||||
| return instance; | |||||
| } | |||||
| instance = std::make_shared<LabelManager>(); | |||||
| instance_ = instance; | |||||
| return instance; | |||||
| } | |||||
| std::shared_ptr<LabelGuard> LabelManager::GetLabelInfo(rtModel_t model, const std::vector<uint32_t> &label_ids, | |||||
| const std::vector<void *> &all_label) { | |||||
| std::lock_guard<std::mutex> lock(model_info_mapping_mutex_); | |||||
| rtError_t rt_ret; | |||||
| auto model_iter = model_info_mapping_.find(model); | |||||
| if (model_iter == model_info_mapping_.end()) { | |||||
| model_info_mapping_.emplace(model, std::map<std::string, std::weak_ptr<LabelGuard>>()); | |||||
| model_iter = model_info_mapping_.find(model); | |||||
| } | |||||
| std::string label_id_str = GetVectorString(label_ids); | |||||
| auto &label_map = model_iter->second; | |||||
| auto label_iter = label_map.find(label_id_str); | |||||
| if (label_iter != label_map.end()) { | |||||
| auto label_guard = label_iter->second.lock(); | |||||
| if (label_guard != nullptr) { | |||||
| GELOGI("model %p find same label id %s.", model, label_id_str.c_str()); | |||||
| return label_guard; | |||||
| } | |||||
| } | |||||
| GELOGI("Alloc label id %s for model %p.", label_id_str.c_str(), model); | |||||
| void *label_info; | |||||
| std::vector<void *> label_list; | |||||
| bool status = true; | |||||
| std::transform(label_ids.begin(), label_ids.end(), std::back_inserter(label_list), | |||||
| [&all_label, &status](uint32_t idx) -> void * { | |||||
| if (idx >= all_label.size()) { | |||||
| GELOGE(PARAM_INVALID, "Invalid label id %u, all label list size %zu.", idx, all_label.size()); | |||||
| status = false; | |||||
| return nullptr; | |||||
| } | |||||
| return all_label[idx]; | |||||
| }); | |||||
| if (!status) { | |||||
| GELOGE(PARAM_INVALID, "Get label info failed."); | |||||
| return nullptr; | |||||
| } | |||||
| uint32_t label_info_size = sizeof(rtLabelDevInfo) * label_list.size(); | |||||
| rt_ret = rtMalloc(&label_info, label_info_size, RT_MEMORY_HBM); | |||||
| if (rt_ret != RT_ERROR_NONE) { | |||||
| GELOGE(RT_FAILED, "Call rt api failed, ret: 0x%X", rt_ret); | |||||
| return nullptr; | |||||
| } | |||||
| rt_ret = rtLabelListCpy(label_list.data(), label_list.size(), label_info, label_info_size); | |||||
| if (rt_ret != RT_ERROR_NONE) { | |||||
| GELOGE(RT_FAILED, "Call rt api failed, ret: 0x%X", rt_ret); | |||||
| return nullptr; | |||||
| } | |||||
| auto label_guard = std::make_shared<LabelGuard>(label_info); | |||||
| label_map.emplace(label_id_str, label_guard); | |||||
| return label_guard; | |||||
| } | |||||
| } // namespace model_runner | |||||
| } // namespace ge | |||||
| @@ -0,0 +1,54 @@ | |||||
| /** | |||||
| * Copyright 2021 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef GE_GE_RUNTIME_TASK_LABEL_MANAGER_H_ | |||||
| #define GE_GE_RUNTIME_TASK_LABEL_MANAGER_H_ | |||||
| #include <vector> | |||||
| #include <memory> | |||||
| #include <mutex> | |||||
| #include <map> | |||||
| #include <runtime/base.h> | |||||
| namespace ge { | |||||
| namespace model_runner { | |||||
| class LabelGuard { | |||||
| public: | |||||
| explicit LabelGuard(void *label_info) : label_info_(reinterpret_cast<uintptr_t>(label_info)) {} | |||||
| ~LabelGuard(); | |||||
| void *GetLabelInfo() { return reinterpret_cast<void *>(label_info_); } | |||||
| private: | |||||
| uintptr_t label_info_; | |||||
| }; | |||||
| class LabelManager { | |||||
| public: | |||||
| static std::shared_ptr<LabelManager> GetInstance(); | |||||
| std::shared_ptr<LabelGuard> GetLabelInfo(rtModel_t model, const std::vector<uint32_t> &label_ids, | |||||
| const std::vector<void *> &all_label); | |||||
| private: | |||||
| std::mutex model_info_mapping_mutex_; | |||||
| std::map<rtModel_t, std::map<std::string, std::weak_ptr<LabelGuard>>> model_info_mapping_; | |||||
| static std::weak_ptr<LabelManager> instance_; | |||||
| static std::mutex instance_mutex_; | |||||
| }; | |||||
| } // namespace model_runner | |||||
| } // namespace ge | |||||
| #endif // GE_GE_RUNTIME_TASK_LABEL_MANAGER_H_ | |||||
| @@ -24,14 +24,14 @@ LabelSwitchTask::LabelSwitchTask(const ModelContext &model_context, | |||||
| : TaskRepeater<LabelSwitchTaskInfo>(model_context, task_info), | : TaskRepeater<LabelSwitchTaskInfo>(model_context, task_info), | ||||
| task_info_(task_info), | task_info_(task_info), | ||||
| stream_(nullptr), | stream_(nullptr), | ||||
| all_label_resource_(), | |||||
| label_info_(nullptr) { | label_info_(nullptr) { | ||||
| if (task_info_ == nullptr) { | if (task_info_ == nullptr) { | ||||
| GELOGW("task_info_ is null!"); | GELOGW("task_info_ is null!"); | ||||
| return; | return; | ||||
| } | } | ||||
| all_label_resource_ = model_context.label_list(); | |||||
| rt_model_handle_ = model_context.rt_model_handle(); | |||||
| auto all_label_resource = model_context.label_list(); | |||||
| auto stream_list = model_context.stream_list(); | auto stream_list = model_context.stream_list(); | ||||
| uint32_t stream_id = task_info->stream_id(); | uint32_t stream_id = task_info->stream_id(); | ||||
| GELOGI("Stream list size:%zu, stream id:%u.", stream_list.size(), stream_id); | GELOGI("Stream list size:%zu, stream id:%u.", stream_list.size(), stream_id); | ||||
| @@ -40,18 +40,16 @@ LabelSwitchTask::LabelSwitchTask(const ModelContext &model_context, | |||||
| return; | return; | ||||
| } | } | ||||
| stream_ = stream_list[stream_id]; | stream_ = stream_list[stream_id]; | ||||
| } | |||||
| LabelSwitchTask::~LabelSwitchTask() { | |||||
| if (label_info_ != nullptr) { | |||||
| rtError_t rt_ret = rtFree(label_info_); | |||||
| if (rt_ret != RT_ERROR_NONE) { | |||||
| GELOGE(RT_FAILED, "rtFree fwkOpBuf failed! ret: 0x%X.", rt_ret); | |||||
| } | |||||
| label_info_ = nullptr; | |||||
| label_manager_ = LabelManager::GetInstance(); | |||||
| if (label_manager_ == nullptr) { | |||||
| GELOGW("Get label manager instance failed."); | |||||
| return; | |||||
| } | } | ||||
| label_info_ = label_manager_->GetLabelInfo(rt_model_handle_, task_info_->label_list(), all_label_resource); | |||||
| } | } | ||||
| LabelSwitchTask::~LabelSwitchTask() {} | |||||
| bool LabelSwitchTask::Distribute() { | bool LabelSwitchTask::Distribute() { | ||||
| GELOGI("LabelSwitchTask Distribute start."); | GELOGI("LabelSwitchTask Distribute start."); | ||||
| if (!CheckParamValid()) { | if (!CheckParamValid()) { | ||||
| @@ -117,8 +115,8 @@ bool LabelSwitchTask::CheckParamValid() { | |||||
| return false; | return false; | ||||
| } | } | ||||
| if (label_info_ != nullptr) { | |||||
| GELOGE(PARAM_INVALID, "label_info_ has dirty data."); | |||||
| if (label_info_ == nullptr) { | |||||
| GELOGE(PARAM_INVALID, "CopyLabelList failed, label info is null."); | |||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -126,6 +124,5 @@ bool LabelSwitchTask::CheckParamValid() { | |||||
| } | } | ||||
| REGISTER_TASK(TaskInfoType::LABEL_SWITCH, LabelSwitchTask, LabelSwitchTaskInfo); | REGISTER_TASK(TaskInfoType::LABEL_SWITCH, LabelSwitchTask, LabelSwitchTaskInfo); | ||||
| } // namespace model_runner | } // namespace model_runner | ||||
| } // namespace ge | } // namespace ge | ||||
| @@ -19,6 +19,7 @@ | |||||
| #include <memory> | #include <memory> | ||||
| #include "ge_runtime/task/task.h" | #include "ge_runtime/task/task.h" | ||||
| #include "ge_runtime/task/label_manager.h" | |||||
| namespace ge { | namespace ge { | ||||
| namespace model_runner { | namespace model_runner { | ||||
| @@ -35,8 +36,9 @@ class LabelSwitchTask : public TaskRepeater<LabelSwitchTaskInfo> { | |||||
| std::shared_ptr<LabelSwitchTaskInfo> task_info_; | std::shared_ptr<LabelSwitchTaskInfo> task_info_; | ||||
| void *stream_; | void *stream_; | ||||
| std::vector<void *> all_label_resource_; | |||||
| void *label_info_; | |||||
| rtModel_t rt_model_handle_; | |||||
| std::shared_ptr<LabelGuard> label_info_; | |||||
| std::shared_ptr<LabelManager> label_manager_; | |||||
| }; | }; | ||||
| } // namespace model_runner | } // namespace model_runner | ||||
| } // namespace ge | } // namespace ge | ||||
| @@ -0,0 +1,82 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_EXTERNAL_ACL_ACL_H_ | |||||
| #define INC_EXTERNAL_ACL_ACL_H_ | |||||
| #include "acl_rt.h" | |||||
| #include "acl_op.h" | |||||
| #include "acl_mdl.h" | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| // Current version is 1.2.0 | |||||
| #define ACL_MAJOR_VERSION 1 | |||||
| #define ACL_MINOR_VERSION 2 | |||||
| #define ACL_PATCH_VERSION 0 | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief acl initialize | |||||
| * | |||||
| * @par Restriction | |||||
| * The aclInit interface can be called only once in a process | |||||
| * @param configPath [IN] the config path,it can be NULL | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclInit(const char *configPath); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief acl finalize | |||||
| * | |||||
| * @par Restriction | |||||
| * Need to call aclFinalize before the process exits. | |||||
| * After calling aclFinalize,the services cannot continue to be used normally. | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclFinalize(); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief query ACL interface version | |||||
| * | |||||
| * @param majorVersion[OUT] ACL interface major version | |||||
| * @param minorVersion[OUT] ACL interface minor version | |||||
| * @param patchVersion[OUT] ACL interface patch version | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclrtGetVersion(int32_t *majorVersion, int32_t *minorVersion, int32_t *patchVersion); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get recent error message | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY const char *aclGetRecentErrMsg(); | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif // INC_EXTERNAL_ACL_ACL_H_ | |||||
| @@ -0,0 +1,656 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_EXTERNAL_ACL_ACL_BASE_H_ | |||||
| #define INC_EXTERNAL_ACL_ACL_BASE_H_ | |||||
| #include <stdint.h> | |||||
| #include <stddef.h> | |||||
| #include "error_codes/rt_error_codes.h" | |||||
| #include "error_codes/ge_error_codes.h" | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| #if defined(_MSC_VER) | |||||
| #ifdef FUNC_VISIBILITY | |||||
| #define ACL_FUNC_VISIBILITY _declspec(dllexport) | |||||
| #else | |||||
| #define ACL_FUNC_VISIBILITY | |||||
| #endif | |||||
| #else | |||||
| #ifdef FUNC_VISIBILITY | |||||
| #define ACL_FUNC_VISIBILITY __attribute__((visibility("default"))) | |||||
| #else | |||||
| #define ACL_FUNC_VISIBILITY | |||||
| #endif | |||||
| #endif | |||||
| #ifdef __GNUC__ | |||||
| #define ACL_DEPRECATED __attribute__((deprecated)) | |||||
| #define ACL_DEPRECATED_MESSAGE(message) __attribute__((deprecated(message))) | |||||
| #elif defined(_MSC_VER) | |||||
| #define ACL_DEPRECATED __declspec(deprecated) | |||||
| #define ACL_DEPRECATED_MESSAGE(message) __declspec(deprecated(message)) | |||||
| #else | |||||
| #define ACL_DEPRECATED | |||||
| #define ACL_DEPRECATED_MESSAGE(message) | |||||
| #endif | |||||
| typedef void *aclrtStream; | |||||
| typedef void *aclrtEvent; | |||||
| typedef void *aclrtContext; | |||||
| typedef int aclError; | |||||
| typedef uint16_t aclFloat16; | |||||
| typedef struct aclDataBuffer aclDataBuffer; | |||||
| typedef struct aclTensorDesc aclTensorDesc; | |||||
| static const int ACL_ERROR_NONE = 0; | |||||
| static const int ACL_SUCCESS = 0; | |||||
| static const int ACL_ERROR_INVALID_PARAM = 100000; | |||||
| static const int ACL_ERROR_UNINITIALIZE = 100001; | |||||
| static const int ACL_ERROR_REPEAT_INITIALIZE = 100002; | |||||
| static const int ACL_ERROR_INVALID_FILE = 100003; | |||||
| static const int ACL_ERROR_WRITE_FILE = 100004; | |||||
| static const int ACL_ERROR_INVALID_FILE_SIZE = 100005; | |||||
| static const int ACL_ERROR_PARSE_FILE = 100006; | |||||
| static const int ACL_ERROR_FILE_MISSING_ATTR = 100007; | |||||
| static const int ACL_ERROR_FILE_ATTR_INVALID = 100008; | |||||
| static const int ACL_ERROR_INVALID_DUMP_CONFIG = 100009; | |||||
| static const int ACL_ERROR_INVALID_PROFILING_CONFIG = 100010; | |||||
| static const int ACL_ERROR_INVALID_MODEL_ID = 100011; | |||||
| static const int ACL_ERROR_DESERIALIZE_MODEL = 100012; | |||||
| static const int ACL_ERROR_PARSE_MODEL = 100013; | |||||
| static const int ACL_ERROR_READ_MODEL_FAILURE = 100014; | |||||
| static const int ACL_ERROR_MODEL_SIZE_INVALID = 100015; | |||||
| static const int ACL_ERROR_MODEL_MISSING_ATTR = 100016; | |||||
| static const int ACL_ERROR_MODEL_INPUT_NOT_MATCH = 100017; | |||||
| static const int ACL_ERROR_MODEL_OUTPUT_NOT_MATCH = 100018; | |||||
| static const int ACL_ERROR_MODEL_NOT_DYNAMIC = 100019; | |||||
| static const int ACL_ERROR_OP_TYPE_NOT_MATCH = 100020; | |||||
| static const int ACL_ERROR_OP_INPUT_NOT_MATCH = 100021; | |||||
| static const int ACL_ERROR_OP_OUTPUT_NOT_MATCH = 100022; | |||||
| static const int ACL_ERROR_OP_ATTR_NOT_MATCH = 100023; | |||||
| static const int ACL_ERROR_OP_NOT_FOUND = 100024; | |||||
| static const int ACL_ERROR_OP_LOAD_FAILED = 100025; | |||||
| static const int ACL_ERROR_UNSUPPORTED_DATA_TYPE = 100026; | |||||
| static const int ACL_ERROR_FORMAT_NOT_MATCH = 100027; | |||||
| static const int ACL_ERROR_BIN_SELECTOR_NOT_REGISTERED = 100028; | |||||
| static const int ACL_ERROR_KERNEL_NOT_FOUND = 100029; | |||||
| static const int ACL_ERROR_BIN_SELECTOR_ALREADY_REGISTERED = 100030; | |||||
| static const int ACL_ERROR_KERNEL_ALREADY_REGISTERED = 100031; | |||||
| static const int ACL_ERROR_INVALID_QUEUE_ID = 100032; | |||||
| static const int ACL_ERROR_REPEAT_SUBSCRIBE = 100033; | |||||
| static const int ACL_ERROR_STREAM_NOT_SUBSCRIBE = 100034; | |||||
| static const int ACL_ERROR_THREAD_NOT_SUBSCRIBE = 100035; | |||||
| static const int ACL_ERROR_WAIT_CALLBACK_TIMEOUT = 100036; | |||||
| static const int ACL_ERROR_REPEAT_FINALIZE = 100037; | |||||
| static const int ACL_ERROR_NOT_STATIC_AIPP = 100038; | |||||
| static const int ACL_ERROR_COMPILING_STUB_MODE = 100039; | |||||
| static const int ACL_ERROR_GROUP_NOT_SET = 100040; | |||||
| static const int ACL_ERROR_GROUP_NOT_CREATE = 100041; | |||||
| static const int ACL_ERROR_PROF_ALREADY_RUN = 100042; | |||||
| static const int ACL_ERROR_PROF_NOT_RUN = 100043; | |||||
| static const int ACL_ERROR_DUMP_ALREADY_RUN = 100044; | |||||
| static const int ACL_ERROR_DUMP_NOT_RUN = 100045; | |||||
| static const int ACL_ERROR_PROF_REPEAT_SUBSCRIBE = 148046; | |||||
| static const int ACL_ERROR_PROF_API_CONFLICT = 148047; | |||||
| static const int ACL_ERROR_INVALID_MAX_OPQUEUE_NUM_CONFIG = 148048; | |||||
| static const int ACL_ERROR_INVALID_OPP_PATH = 148049; | |||||
| static const int ACL_ERROR_OP_UNSUPPORTED_DYNAMIC = 148050; | |||||
| static const int ACL_ERROR_RELATIVE_RESOURCE_NOT_CLEARED = 148051; | |||||
| static const int ACL_ERROR_UNSUPPORTED_JPEG = 148052; | |||||
| static const int ACL_ERROR_BAD_ALLOC = 200000; | |||||
| static const int ACL_ERROR_API_NOT_SUPPORT = 200001; | |||||
| static const int ACL_ERROR_INVALID_DEVICE = 200002; | |||||
| static const int ACL_ERROR_MEMORY_ADDRESS_UNALIGNED = 200003; | |||||
| static const int ACL_ERROR_RESOURCE_NOT_MATCH = 200004; | |||||
| static const int ACL_ERROR_INVALID_RESOURCE_HANDLE = 200005; | |||||
| static const int ACL_ERROR_FEATURE_UNSUPPORTED = 200006; | |||||
| static const int ACL_ERROR_PROF_MODULES_UNSUPPORTED = 200007; | |||||
| static const int ACL_ERROR_STORAGE_OVER_LIMIT = 300000; | |||||
| static const int ACL_ERROR_INTERNAL_ERROR = 500000; | |||||
| static const int ACL_ERROR_FAILURE = 500001; | |||||
| static const int ACL_ERROR_GE_FAILURE = 500002; | |||||
| static const int ACL_ERROR_RT_FAILURE = 500003; | |||||
| static const int ACL_ERROR_DRV_FAILURE = 500004; | |||||
| static const int ACL_ERROR_PROFILING_FAILURE = 500005; | |||||
| #define ACL_TENSOR_SHAPE_RANGE_NUM 2 | |||||
| #define ACL_TENSOR_VALUE_RANGE_NUM 2 | |||||
| #define ACL_UNKNOWN_RANK 0xFFFFFFFFFFFFFFFE | |||||
| typedef enum { | |||||
| ACL_DT_UNDEFINED = -1, | |||||
| ACL_FLOAT = 0, | |||||
| ACL_FLOAT16 = 1, | |||||
| ACL_INT8 = 2, | |||||
| ACL_INT32 = 3, | |||||
| ACL_UINT8 = 4, | |||||
| ACL_INT16 = 6, | |||||
| ACL_UINT16 = 7, | |||||
| ACL_UINT32 = 8, | |||||
| ACL_INT64 = 9, | |||||
| ACL_UINT64 = 10, | |||||
| ACL_DOUBLE = 11, | |||||
| ACL_BOOL = 12, | |||||
| ACL_STRING = 13, | |||||
| ACL_COMPLEX64 = 16, | |||||
| ACL_COMPLEX128 = 17, | |||||
| ACL_BF16 = 27 | |||||
| } aclDataType; | |||||
| typedef enum { | |||||
| ACL_FORMAT_UNDEFINED = -1, | |||||
| ACL_FORMAT_NCHW = 0, | |||||
| ACL_FORMAT_NHWC = 1, | |||||
| ACL_FORMAT_ND = 2, | |||||
| ACL_FORMAT_NC1HWC0 = 3, | |||||
| ACL_FORMAT_FRACTAL_Z = 4, | |||||
| ACL_FORMAT_NC1HWC0_C04 = 12, | |||||
| ACL_FORMAT_HWCN = 16, | |||||
| ACL_FORMAT_NDHWC = 27, | |||||
| ACL_FORMAT_FRACTAL_NZ = 29, | |||||
| ACL_FORMAT_NCDHW = 30, | |||||
| ACL_FORMAT_NDC1HWC0 = 32, | |||||
| ACL_FRACTAL_Z_3D = 33 | |||||
| } aclFormat; | |||||
| typedef enum { | |||||
| ACL_DEBUG = 0, | |||||
| ACL_INFO = 1, | |||||
| ACL_WARNING = 2, | |||||
| ACL_ERROR = 3, | |||||
| } aclLogLevel; | |||||
| typedef enum { ACL_MEMTYPE_DEVICE = 0, ACL_MEMTYPE_HOST = 1, ACL_MEMTYPE_HOST_COMPILE_INDEPENDENT = 2 } aclMemType; | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Converts data of type aclFloat16 to data of type float | |||||
| * | |||||
| * @param value [IN] Data to be converted | |||||
| * | |||||
| * @retval Transformed data | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY float aclFloat16ToFloat(aclFloat16 value); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Converts data of type float to data of type aclFloat16 | |||||
| * | |||||
| * @param value [IN] Data to be converted | |||||
| * | |||||
| * @retval Transformed data | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclFloat16 aclFloatToFloat16(float value); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create data of aclDataBuffer | |||||
| * | |||||
| * @param data [IN] pointer to data | |||||
| * @li Need to be managed by the user, | |||||
| * call aclrtMalloc interface to apply for memory, | |||||
| * call aclrtFree interface to release memory | |||||
| * | |||||
| * @param size [IN] size of data in bytes | |||||
| * | |||||
| * @retval pointer to created instance. nullptr if run out of memory | |||||
| * | |||||
| * @see aclrtMalloc | aclrtFree | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclDataBuffer *aclCreateDataBuffer(void *data, size_t size); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief destroy data of aclDataBuffer | |||||
| * | |||||
| * @par Function | |||||
| * Only the aclDataBuffer type data is destroyed here. | |||||
| * The memory of the data passed in when the aclDataDataBuffer interface | |||||
| * is called to create aclDataBuffer type data must be released by the user | |||||
| * | |||||
| * @param dataBuffer [IN] pointer to the aclDataBuffer | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclCreateDataBuffer | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclDestroyDataBuffer(const aclDataBuffer *dataBuffer); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief update new data of aclDataBuffer | |||||
| * | |||||
| * @param dataBuffer [OUT] pointer to aclDataBuffer | |||||
| * @li The old data need to be released by the user, otherwise it may occur memory leak leakage | |||||
| * call aclGetDataBufferAddr interface to get old data address | |||||
| * call aclrtFree interface to release memory | |||||
| * | |||||
| * @param data [IN] pointer to new data | |||||
| * @li Need to be managed by the user, | |||||
| * call aclrtMalloc interface to apply for memory, | |||||
| * call aclrtFree interface to release memory | |||||
| * | |||||
| * @param size [IN] size of data in bytes | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclrtMalloc | aclrtFree | aclGetDataBufferAddr | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclUpdateDataBuffer(aclDataBuffer *dataBuffer, void *data, size_t size); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get data address from aclDataBuffer | |||||
| * | |||||
| * @param dataBuffer [IN] pointer to the data of aclDataBuffer | |||||
| * | |||||
| * @retval data address | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY void *aclGetDataBufferAddr(const aclDataBuffer *dataBuffer); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get data size of aclDataBuffer | |||||
| * | |||||
| * @param dataBuffer [IN] pointer to the data of aclDataBuffer | |||||
| * | |||||
| * @retval data size | |||||
| */ | |||||
| ACL_DEPRECATED_MESSAGE("aclGetDataBufferSize is deprecated, use aclGetDataBufferSizeV2 instead") | |||||
| ACL_FUNC_VISIBILITY uint32_t aclGetDataBufferSize(const aclDataBuffer *dataBuffer); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get data size of aclDataBuffer to replace aclGetDataBufferSize | |||||
| * | |||||
| * @param dataBuffer [IN] pointer to the data of aclDataBuffer | |||||
| * | |||||
| * @retval data size | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY size_t aclGetDataBufferSizeV2(const aclDataBuffer *dataBuffer); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get size of aclDataType | |||||
| * | |||||
| * @param dataType [IN] aclDataType data the size to get | |||||
| * | |||||
| * @retval size of the aclDataType | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY size_t aclDataTypeSize(aclDataType dataType); | |||||
| // interfaces of tensor desc | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create data aclTensorDesc | |||||
| * | |||||
| * @param dataType [IN] Data types described by tensor | |||||
| * @param numDims [IN] the number of dimensions of the shape | |||||
| * @param dims [IN] the size of the specified dimension | |||||
| * @param format [IN] tensor format | |||||
| * | |||||
| * @retval aclTensorDesc pointer. | |||||
| * @retval nullptr if param is invalid or run out of memory | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclTensorDesc *aclCreateTensorDesc(aclDataType dataType, int numDims, const int64_t *dims, | |||||
| aclFormat format); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief destroy data aclTensorDesc | |||||
| * | |||||
| * @param desc [IN] pointer to the data of aclTensorDesc to destroy | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY void aclDestroyTensorDesc(const aclTensorDesc *desc); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set tensor shape range for aclTensorDesc | |||||
| * | |||||
| * @param desc [OUT] pointer to the data of aclTensorDesc | |||||
| * @param dimsCount [IN] the number of dimensions of the shape | |||||
| * @param dimsRange [IN] the range of dimensions of the shape | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclSetTensorShapeRange(aclTensorDesc *desc, size_t dimsCount, | |||||
| int64_t dimsRange[][ACL_TENSOR_SHAPE_RANGE_NUM]); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set value range for aclTensorDesc | |||||
| * | |||||
| * @param desc [OUT] pointer to the data of aclTensorDesc | |||||
| * @param valueCount [IN] the number of value | |||||
| * @param valueRange [IN] the range of value | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclSetTensorValueRange(aclTensorDesc *desc, size_t valueCount, | |||||
| int64_t valueRange[][ACL_TENSOR_VALUE_RANGE_NUM]); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get data type specified by the tensor description | |||||
| * | |||||
| * @param desc [IN] pointer to the instance of aclTensorDesc | |||||
| * | |||||
| * @retval data type specified by the tensor description. | |||||
| * @retval ACL_DT_UNDEFINED if description is null | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclDataType aclGetTensorDescType(const aclTensorDesc *desc); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get data format specified by the tensor description | |||||
| * | |||||
| * @param desc [IN] pointer to the instance of aclTensorDesc | |||||
| * | |||||
| * @retval data format specified by the tensor description. | |||||
| * @retval ACL_FORMAT_UNDEFINED if description is null | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclFormat aclGetTensorDescFormat(const aclTensorDesc *desc); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get tensor size specified by the tensor description | |||||
| * | |||||
| * @param desc [IN] pointer to the instance of aclTensorDesc | |||||
| * | |||||
| * @retval data size specified by the tensor description. | |||||
| * @retval 0 if description is null | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY size_t aclGetTensorDescSize(const aclTensorDesc *desc); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get element count specified by the tensor description | |||||
| * | |||||
| * @param desc [IN] pointer to the instance of aclTensorDesc | |||||
| * | |||||
| * @retval element count specified by the tensor description. | |||||
| * @retval 0 if description is null | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY size_t aclGetTensorDescElementCount(const aclTensorDesc *desc); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get number of dims specified by the tensor description | |||||
| * | |||||
| * @param desc [IN] pointer to the instance of aclTensorDesc | |||||
| * | |||||
| * @retval number of dims specified by the tensor description. | |||||
| * @retval 0 if description is null | |||||
| * @retval ACL_UNKNOWN_RANK if the tensor dim is -2 | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY size_t aclGetTensorDescNumDims(const aclTensorDesc *desc); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get the size of the specified dim in the tensor description | |||||
| * | |||||
| * @param desc [IN] pointer to the instance of aclTensorDesc | |||||
| * @param index [IN] index of dims, start from 0. | |||||
| * | |||||
| * @retval dim specified by the tensor description and index. | |||||
| * @retval -1 if description or index is invalid | |||||
| */ | |||||
| ACL_DEPRECATED_MESSAGE("aclGetTensorDescDim is deprecated, use aclGetTensorDescDimV2 instead") | |||||
| ACL_FUNC_VISIBILITY int64_t aclGetTensorDescDim(const aclTensorDesc *desc, size_t index); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get the size of the specified dim in the tensor description | |||||
| * | |||||
| * @param desc [IN] pointer to the instance of aclTensorDesc | |||||
| * @param index [IN] index of dims, start from 0. | |||||
| * @param dimSize [OUT] size of the specified dim. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclGetTensorDescDimV2(const aclTensorDesc *desc, size_t index, int64_t *dimSize); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get the range of the specified dim in the tensor description | |||||
| * | |||||
| * @param desc [IN] pointer to the instance of aclTensorDesc | |||||
| * @param index [IN] index of dims, start from 0. | |||||
| * @param dimRangeNum [IN] number of dimRange. | |||||
| * @param dimRange [OUT] range of the specified dim. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclGetTensorDescDimRange(const aclTensorDesc *desc, size_t index, size_t dimRangeNum, | |||||
| int64_t *dimRange); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set tensor description name | |||||
| * | |||||
| * @param desc [OUT] pointer to the instance of aclTensorDesc | |||||
| * @param name [IN] tensor description name | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY void aclSetTensorDescName(aclTensorDesc *desc, const char *name); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get tensor description name | |||||
| * | |||||
| * @param desc [IN] pointer to the instance of aclTensorDesc | |||||
| * | |||||
| * @retval tensor description name. | |||||
| * @retval empty string if description is null | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY const char *aclGetTensorDescName(aclTensorDesc *desc); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Convert the format in the source aclTensorDesc according to | |||||
| * the specified dstFormat to generate a new target aclTensorDesc. | |||||
| * The format in the source aclTensorDesc remains unchanged. | |||||
| * | |||||
| * @param srcDesc [IN] pointer to the source tensor desc | |||||
| * @param dstFormat [IN] destination format | |||||
| * @param dstDesc [OUT] pointer to the pointer to the destination tensor desc | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclTransTensorDescFormat(const aclTensorDesc *srcDesc, aclFormat dstFormat, | |||||
| aclTensorDesc **dstDesc); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Set the storage format specified by the tensor description | |||||
| * | |||||
| * @param desc [OUT] pointer to the instance of aclTensorDesc | |||||
| * @param format [IN] the storage format | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_DEPRECATED_MESSAGE("aclSetTensorStorageFormat is deprecated, use aclSetTensorFormat instead") | |||||
| ACL_FUNC_VISIBILITY aclError aclSetTensorStorageFormat(aclTensorDesc *desc, aclFormat format); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Set the storage shape specified by the tensor description | |||||
| * | |||||
| * @param desc [OUT] pointer to the instance of aclTensorDesc | |||||
| * @param numDims [IN] the number of dimensions of the shape | |||||
| * @param dims [IN] the size of the specified dimension | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_DEPRECATED_MESSAGE("aclSetTensorStorageShape is deprecated, use aclSetTensorShape instead") | |||||
| ACL_FUNC_VISIBILITY aclError aclSetTensorStorageShape(aclTensorDesc *desc, int numDims, const int64_t *dims); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Set the format specified by the tensor description | |||||
| * | |||||
| * @param desc [OUT] pointer to the instance of aclTensorDesc | |||||
| * @param format [IN] the storage format | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclSetTensorFormat(aclTensorDesc *desc, aclFormat format); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Set the shape specified by the tensor description | |||||
| * | |||||
| * @param desc [OUT] pointer to the instance of aclTensorDesc | |||||
| * @param numDims [IN] the number of dimensions of the shape | |||||
| * @param dims [IN] the size of the specified dimension | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclSetTensorShape(aclTensorDesc *desc, int numDims, const int64_t *dims); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Set the original format specified by the tensor description | |||||
| * | |||||
| * @param desc [OUT] pointer to the instance of aclTensorDesc | |||||
| * @param format [IN] the storage format | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclSetTensorOriginFormat(aclTensorDesc *desc, aclFormat format); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Set the original shape specified by the tensor description | |||||
| * | |||||
| * @param desc [OUT] pointer to the instance of aclTensorDesc | |||||
| * @param numDims [IN] the number of dimensions of the shape | |||||
| * @param dims [IN] the size of the specified dimension | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclSetTensorOriginShape(aclTensorDesc *desc, int numDims, const int64_t *dims); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get op description info | |||||
| * | |||||
| * @param desc [IN] pointer to tensor description | |||||
| * @param index [IN] index of tensor | |||||
| * | |||||
| * @retval null for failed. | |||||
| * @retval OtherValues success. | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclTensorDesc *aclGetTensorDescByIndex(aclTensorDesc *desc, size_t index); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get address of tensor | |||||
| * | |||||
| * @param desc [IN] pointer to tensor description | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY void *aclGetTensorDescAddress(const aclTensorDesc *desc); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Set the dynamic input name specified by the tensor description | |||||
| * | |||||
| * @param desc [OUT] pointer to the instance of aclTensorDesc | |||||
| * @param dynamicInputName [IN] pointer to the dynamic input name | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclSetTensorDynamicInput(aclTensorDesc *desc, const char *dynamicInputName); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Set const data specified by the tensor description | |||||
| * | |||||
| * @param desc [OUT] pointer to the instance of aclTensorDesc | |||||
| * @param dataBuffer [IN] pointer to the const databuffer | |||||
| * @param length [IN] the length of const databuffer | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclSetTensorConst(aclTensorDesc *desc, void *dataBuffer, size_t length); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Set tensor memory type specified by the tensor description | |||||
| * | |||||
| * @param desc [OUT] pointer to the instance of aclTensorDesc | |||||
| * @param memType [IN] ACL_MEMTYPE_DEVICE means device, ACL_MEMTYPE_HOST or | |||||
| * ACL_MEMTYPE_HOST_COMPILE_INDEPENDENT means host | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclSetTensorPlaceMent(aclTensorDesc *desc, aclMemType memType); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief an interface for users to output APP logs | |||||
| * | |||||
| * @param logLevel [IN] the level of current log | |||||
| * @param func [IN] the function where the log is located | |||||
| * @param file [IN] the file where the log is located | |||||
| * @param line [IN] Number of source lines where the log is located | |||||
| * @param fmt [IN] the format of current log | |||||
| * @param ... [IN] the value of current log | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY void aclAppLog(aclLogLevel logLevel, const char *func, const char *file, uint32_t line, | |||||
| const char *fmt, ...); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get soc name | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY const char *aclrtGetSocName(); | |||||
| #define ACL_APP_LOG(level, fmt, ...) aclAppLog(level, __FUNCTION__, __FILE__, __LINE__, fmt, ##__VA_ARGS__) | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif // INC_EXTERNAL_ACL_ACL_BASE_H_ | |||||
| @@ -0,0 +1,532 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_EXTERNAL_ACL_ACL_OP_H_ | |||||
| #define INC_EXTERNAL_ACL_ACL_OP_H_ | |||||
| #include "acl_base.h" | |||||
| #include "acl_rt.h" | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| typedef struct aclopHandle aclopHandle; | |||||
| typedef struct aclopAttr aclopAttr; | |||||
| typedef struct aclopKernelDesc aclopKernelDesc; | |||||
| typedef void (*aclDataDeallocator)(void *data, size_t length); | |||||
| static const int ACL_COMPILE_FLAG_BIN_SELECTOR = 1; | |||||
| typedef enum aclEngineType { | |||||
| ACL_ENGINE_SYS, | |||||
| ACL_ENGINE_AICORE, | |||||
| ACL_ENGINE_VECTOR, | |||||
| } aclopEngineType; | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Set base directory that contains single op models | |||||
| * | |||||
| * @par Restriction | |||||
| * The aclopSetModelDir interface can be called only once in a process. | |||||
| * @param modelDir [IN] path of the directory | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetModelDir(const char *modelDir); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief load single op models from memory | |||||
| * | |||||
| * @par Restriction | |||||
| * The aclopLoad interface can be called more than one times in a process. | |||||
| * @param model [IN] address of single op models | |||||
| * @param modelSize [IN] size of single op models | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopLoad(const void *model, size_t modelSize); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create data of type aclopAttr | |||||
| * | |||||
| * @retval pointer to created instance. | |||||
| * @retval nullptr if run out of memory | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclopAttr *aclopCreateAttr(); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief destroy data of typ aclopAttr | |||||
| * | |||||
| * @param attr [IN] pointer to the instance of aclopAttr | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY void aclopDestroyAttr(const aclopAttr *attr); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set an attribute. the type of the attribute is bool | |||||
| * | |||||
| * @param attr [OUT] pointer to the instance of aclopAttr | |||||
| * @param attrName [IN] attribute name | |||||
| * @param attrValue [IN] attribute value | |||||
| * false if attrValue is 0, true otherwise. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetAttrBool(aclopAttr *attr, const char *attrName, uint8_t attrValue); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set an attribute. the type of the attribute is int64_t | |||||
| * | |||||
| * @param attr [OUT] pointer to the instance of aclopAttr | |||||
| * @param attrName [IN] attribute name | |||||
| * @param attrValue [IN] attribute value | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetAttrInt(aclopAttr *attr, const char *attrName, int64_t attrValue); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set an attribute. the type of the attribute is float | |||||
| * | |||||
| * @param attr [OUT] pointer to the instance of aclopAttr | |||||
| * @param attrName [IN] attribute name | |||||
| * @param attrValue [IN] attribute value | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetAttrFloat(aclopAttr *attr, const char *attrName, float attrValue); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set an attribute. the type of the attribute is string | |||||
| * | |||||
| * @param attr [OUT] pointer to the instance of aclopAttr | |||||
| * @param attrName [IN] attribute name | |||||
| * @param attrValue [IN] attribute value | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetAttrString(aclopAttr *attr, const char *attrName, const char *attrValue); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set an attribute. the type of the attribute is aclDataType | |||||
| * | |||||
| * @param attr [OUT] pointer to the instance of aclopAttr | |||||
| * @param attrName [IN] attribute name | |||||
| * @param attrValue [IN] attribute value | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetAttrDataType(aclopAttr *attr, const char *attrName, aclDataType attrValue); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set an attribute. the type of the attribute is list of aclDataType | |||||
| * | |||||
| * @param attr [OUT] pointer to the instance of aclopAttr | |||||
| * @param attrName [IN] attribute name | |||||
| * @param numValues [IN] number of values. false if attrValue is 0, true otherwise. | |||||
| * @param values [IN] pointer to values | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetAttrListDataType(aclopAttr *attr, const char *attrName, int numValues, | |||||
| const aclDataType values[]); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set an attribute. the type of the attribute is list of bools | |||||
| * | |||||
| * @param attr [OUT] pointer to the instance of aclopAttr | |||||
| * @param attrName [IN] attribute name | |||||
| * @param numValues [IN] number of values. false if attrValue is 0, true otherwise. | |||||
| * @param values [IN] pointer to values | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetAttrListBool(aclopAttr *attr, const char *attrName, int numValues, | |||||
| const uint8_t *values); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set an attribute. the type of the attribute is list of ints | |||||
| * | |||||
| * @param attr [OUT] pointer to the instance of aclopAttr | |||||
| * @param attrName [IN] attribute name | |||||
| * @param numValues [IN] number of values | |||||
| * @param values [IN] pointer to values | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetAttrListInt(aclopAttr *attr, const char *attrName, int numValues, | |||||
| const int64_t *values); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set an attribute. the type of the attribute is list of floats | |||||
| * | |||||
| * @param attr [OUT] pointer to the instance of aclopAttr | |||||
| * @param attrName [IN] attribute name | |||||
| * @param numValues [IN] number of values | |||||
| * @param values [IN] pointer to values | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetAttrListFloat(aclopAttr *attr, const char *attrName, int numValues, | |||||
| const float *values); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set an attribute. the type of the attribute is list of strings | |||||
| * | |||||
| * @param attr [OUT] pointer to the instance of aclopAttr | |||||
| * @param attrName [IN] attribute name | |||||
| * @param numValues [IN] number of values | |||||
| * @param values [IN] pointer to values | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetAttrListString(aclopAttr *attr, const char *attrName, int numValues, | |||||
| const char **values); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set an attribute. the type of the attribute is list of list of ints | |||||
| * | |||||
| * @param attr [OUT] pointer to the instance of aclopAttr | |||||
| * @param attrName [IN] attribute name | |||||
| * @param numLists [IN] number of lists | |||||
| * @param numValues [IN] pointer to number of values of each list | |||||
| * @param values [IN] pointer to values | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetAttrListListInt(aclopAttr *attr, const char *attrName, int numLists, | |||||
| const int *numValues, const int64_t *const values[]); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Load and execute the specified operator asynchronously | |||||
| * | |||||
| * @par Restriction | |||||
| * @li The input and output organization of each operator is different, | |||||
| * and the application needs to organize the operator strictly | |||||
| * according to the operator input and output parameters when calling. | |||||
| * @li When the user calls aclopExecute, | |||||
| * the ACL finds the corresponding task according to the optype, | |||||
| * the description of the input tesnsor, | |||||
| * the description of the output tesnsor, and attr, and issues the execution. | |||||
| * | |||||
| * @param opType [IN] type of op | |||||
| * @param numInputs [IN] number of inputs | |||||
| * @param inputDesc [IN] pointer to array of input tensor descriptions | |||||
| * @param inputs [IN] pointer to array of input buffers | |||||
| * @param numOutputs [IN] number of outputs | |||||
| * @param outputDesc [IN] pointer to array of output tensor descriptions | |||||
| * @param outputs [OUT] pointer to array of output buffers | |||||
| * @param attr [IN] pointer to instance of aclopAttr. | |||||
| * may pass nullptr if the op has no attribute | |||||
| * @param stream [IN] stream | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_DEPRECATED_MESSAGE("aclopExecute is deprecated, use aclopExecuteV2 instead") | |||||
| ACL_FUNC_VISIBILITY aclError aclopExecute(const char *opType, int numInputs, const aclTensorDesc *const inputDesc[], | |||||
| const aclDataBuffer *const inputs[], int numOutputs, | |||||
| const aclTensorDesc *const outputDesc[], aclDataBuffer *const outputs[], | |||||
| const aclopAttr *attr, aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Load and execute the specified operator | |||||
| * The difference with aclopExecute is that aclopExecuteV2 will refresh outputDesc | |||||
| * | |||||
| * @par Restriction | |||||
| * @li The input and output organization of each operator is different, | |||||
| * and the application needs to organize the operator strictly | |||||
| * according to the operator input and output parameters when calling. | |||||
| * @li When the user calls aclopExecuteV2, | |||||
| * the ACL finds the corresponding task according to the optype, | |||||
| * the description of the input tesnsor, | |||||
| * the description of the output tesnsor, and attr, and issues the execution. | |||||
| * | |||||
| * @param opType [IN] type of op | |||||
| * @param numInputs [IN] number of inputs | |||||
| * @param inputDesc [IN] pointer to array of input tensor descriptions | |||||
| * @param inputs [IN] pointer to array of input buffers | |||||
| * @param numOutputs [IN] number of outputs | |||||
| * @param outputDesc [IN|OUT] pointer to array of output tensor descriptions | |||||
| * @param outputs [OUT] pointer to array of output buffers | |||||
| * @param attr [IN] pointer to instance of aclopAttr. | |||||
| * may pass nullptr if the op has no attribute | |||||
| * @param stream [IN] stream | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopExecuteV2(const char *opType, int numInputs, aclTensorDesc *inputDesc[], | |||||
| aclDataBuffer *inputs[], int numOutputs, aclTensorDesc *outputDesc[], | |||||
| aclDataBuffer *outputs[], aclopAttr *attr, aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create a instance of aclopHandle. | |||||
| * | |||||
| * @param opType [IN] type of op | |||||
| * @param numInputs [IN] number of inputs | |||||
| * @param inputDesc [IN] pointer to array of input tensor descriptions | |||||
| * @param numOutputs [IN] number of outputs | |||||
| * @param outputDesc [IN] pointer to array of output tensor descriptions | |||||
| * @param opAttr [IN] pointer to instance of aclopAttr. | |||||
| * may pass nullptr if the op has no attribute | |||||
| * @param handle [OUT] pointer to the pointer to the handle | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopCreateHandle(const char *opType, int numInputs, | |||||
| const aclTensorDesc *const inputDesc[], int numOutputs, | |||||
| const aclTensorDesc *const outputDesc[], const aclopAttr *opAttr, | |||||
| aclopHandle **handle); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief destroy aclopHandle instance | |||||
| * | |||||
| * @param handle [IN] pointer to the instance of aclopHandle | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY void aclopDestroyHandle(aclopHandle *handle); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief execute an op with the handle. | |||||
| * can save op model matching cost compared with aclopExecute | |||||
| * | |||||
| * @param handle [IN] pointer to the instance of aclopHandle. | |||||
| * The aclopCreateHandle interface has been called | |||||
| * in advance to create aclopHandle type data. | |||||
| * @param numInputs [IN] number of inputs | |||||
| * @param inputs [IN] pointer to array of input buffers. | |||||
| * The aclCreateDataBuffer interface has been called | |||||
| * in advance to create aclDataBuffer type data. | |||||
| * @param numOutputs [IN] number of outputs | |||||
| * @param outputs [OUT] pointer to array of output buffers | |||||
| * @param stream [IN] stream | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclopCreateHandle | aclCreateDataBuffer | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopExecWithHandle(aclopHandle *handle, int numInputs, | |||||
| const aclDataBuffer *const inputs[], int numOutputs, | |||||
| aclDataBuffer *const outputs[], aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief cast data type | |||||
| * | |||||
| * @param srcDesc [IN] source tensor desc | |||||
| * @param srcBuffer [IN] source tensor buffer | |||||
| * @param dstDesc [IN] destination tensor desc | |||||
| * @param dstBuffer [OUT] destination tensor buffer | |||||
| * @param truncate [IN] do not truncate if value is 0, truncate otherwise | |||||
| * @param stream [IN] stream | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopCast(const aclTensorDesc *srcDesc, const aclDataBuffer *srcBuffer, | |||||
| const aclTensorDesc *dstDesc, aclDataBuffer *dstBuffer, uint8_t truncate, | |||||
| aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create a handle for casting datatype | |||||
| * | |||||
| * @param srcDesc [IN] source tensor desc | |||||
| * @param dstDesc [IN] destination tensor desc | |||||
| * @param truncate [IN] do not truncate if value is 0, truncate otherwise | |||||
| * @param handle [OUT] pointer to the pointer to the handle | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopCreateHandleForCast(aclTensorDesc *srcDesc, aclTensorDesc *dstDesc, uint8_t truncate, | |||||
| aclopHandle **handle); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create kernel | |||||
| * | |||||
| * @param opType [IN] op type | |||||
| * @param kernelId [IN] kernel id | |||||
| * @param kernelName [IN] kernel name | |||||
| * @param binData [IN] kernel bin data | |||||
| * @param binSize [IN] kernel bin size | |||||
| * @param enginetype [IN] enigne type | |||||
| * @param deallocator [IN] callback function for deallocating bin data, | |||||
| * null if bin data to be deallocated by caller | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclopCompile | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopCreateKernel(const char *opType, const char *kernelId, const char *kernelName, | |||||
| void *binData, int binSize, aclopEngineType enginetype, | |||||
| aclDataDeallocator deallocator); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create kernel | |||||
| * | |||||
| * @param numInputs [IN] number of inputs | |||||
| * @param inputDesc [IN] pointer to array of input tensor descriptions | |||||
| * @param numOutputs [IN] number of outputs | |||||
| * @param outputDesc [IN] pointer to array of output tensor descriptions | |||||
| * @param opAttr [IN] pointer to instance of aclopAttr | |||||
| * @param aclopKernelDesc [IN] pointer to instance of aclopKernelDesc | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| typedef aclError (*aclopCompileFunc)(int numInputs, const aclTensorDesc *const inputDesc[], int numOutputs, | |||||
| const aclTensorDesc *const outputDesc[], const aclopAttr *opAttr, | |||||
| aclopKernelDesc *aclopKernelDesc); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief register compile function | |||||
| * | |||||
| * @param opType [IN] op type | |||||
| * @param func [IN] compile function | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclopUnregisterCompileFunc | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopRegisterCompileFunc(const char *opType, aclopCompileFunc func); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief unregister compile function | |||||
| * | |||||
| * @param opType [IN] op type | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopUnregisterCompileFunc(const char *opType); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set kernel args | |||||
| * | |||||
| * @param kernelDesc [IN] pointer to instance of aclopKernelDesc | |||||
| * @param kernelId [IN] kernel id | |||||
| * @param blockDim [IN] block dim | |||||
| * @param args [IN] args | |||||
| * @param argSize [IN] size in bytes of args | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetKernelArgs(aclopKernelDesc *kernelDesc, const char *kernelId, uint32_t blockDim, | |||||
| const void *args, uint32_t argSize); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set workspace sizes | |||||
| * | |||||
| * @param kernelDesc [IN] pointer to instance of aclopKernelDesc | |||||
| * @param numWorkspaces [IN] number of workspaces | |||||
| * @param workspaceSizes [IN] pointer to array of sizes of workspaces | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetKernelWorkspaceSizes(aclopKernelDesc *kernelDesc, int numWorkspaces, | |||||
| size_t *workspaceSizes); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief compile op with dynamic shape | |||||
| * | |||||
| * @param opType [IN] op type | |||||
| * @param numInputs [IN] number of inputs | |||||
| * @param inputDesc [IN] pointer to array of input tensor descriptions | |||||
| * @param numOutputs [IN] number of outputs | |||||
| * @param outputDesc [IN] pointer to array of output tensor descriptions | |||||
| * @param attr [IN] pointer to instance of aclopAttr. | |||||
| * may pass nullptr if the op has no attribute | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopUpdateParams(const char *opType, int numInputs, | |||||
| const aclTensorDesc *const inputDesc[], int numOutputs, | |||||
| const aclTensorDesc *const outputDesc[], const aclopAttr *attr); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief inferShape the specified operator synchronously | |||||
| * | |||||
| * @param opType [IN] type of op | |||||
| * @param numInputs [IN] number of inputs | |||||
| * @param inputDesc [IN] pointer to array of input tensor descriptions | |||||
| * @param inputs [IN] pointer to array of input buffers | |||||
| * @param numOutputs [IN] number of outputs | |||||
| * @param outputDesc [OUT] pointer to array of output tensor descriptions | |||||
| * @param attr [IN] pointer to instance of aclopAttr. | |||||
| * may pass nullptr if the op has no attribute | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopInferShape(const char *opType, int numInputs, aclTensorDesc *inputDesc[], | |||||
| aclDataBuffer *inputs[], int numOutputs, aclTensorDesc *outputDesc[], | |||||
| aclopAttr *attr); | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif // INC_EXTERNAL_ACL_ACL_OP_H_ | |||||
| @@ -0,0 +1,200 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_EXTERNAL_ACL_ACL_OP_COMPILER_H_ | |||||
| #define INC_EXTERNAL_ACL_ACL_OP_COMPILER_H_ | |||||
| #include "acl_base.h" | |||||
| #include "acl_op.h" | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| typedef enum aclCompileType { ACL_COMPILE_SYS, ACL_COMPILE_UNREGISTERED } aclopCompileType; | |||||
| typedef enum { | |||||
| ACL_PRECISION_MODE, | |||||
| ACL_AICORE_NUM, | |||||
| ACL_AUTO_TUNE_MODE, | |||||
| ACL_OP_SELECT_IMPL_MODE, | |||||
| ACL_OPTYPELIST_FOR_IMPLMODE, | |||||
| ACL_OP_DEBUG_LEVEL, | |||||
| ACL_DEBUG_DIR, | |||||
| ACL_OP_COMPILER_CACHE_MODE, | |||||
| ACL_OP_COMPILER_CACHE_DIR, | |||||
| ACL_OP_PERFORMANCE_MODE | |||||
| } aclCompileOpt; | |||||
| typedef enum aclCompileFlag { ACL_OP_COMPILE_DEFAULT, ACL_OP_COMPILE_FUZZ } aclOpCompileFlag; | |||||
| typedef struct aclGraphDumpOption aclGraphDumpOption; | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief compile op | |||||
| * | |||||
| * @param opType [IN] op type | |||||
| * @param numInputs [IN] number of inputs | |||||
| * @param inputDesc [IN] pointer to array of input tensor descriptions | |||||
| * @param numOutputs [IN] number of outputs | |||||
| * @param outputDesc [IN] pointer to array of output tensor descriptions | |||||
| * @param attr [IN] pointer to instance of aclopAttr. | |||||
| * may pass nullptr if the op has no attribute | |||||
| * @param engineType [IN] engine type | |||||
| * @param compileFlag [IN] compile flag | |||||
| * @param opPath [IN] path of op | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopCompile(const char *opType, int numInputs, const aclTensorDesc *const inputDesc[], | |||||
| int numOutputs, const aclTensorDesc *const outputDesc[], | |||||
| const aclopAttr *attr, aclopEngineType engineType, | |||||
| aclopCompileType compileFlag, const char *opPath); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief compile and execute op | |||||
| * | |||||
| * @param opType [IN] op type | |||||
| * @param numInputs [IN] number of inputs | |||||
| * @param inputDesc [IN] pointer to array of input tensor descriptions | |||||
| * @param inputs [IN] pointer to array of input buffers | |||||
| * @param numOutputs [IN] number of outputs | |||||
| * @param outputDesc [IN] pointer to array of output tensor descriptions | |||||
| * @param outputs [IN] pointer to array of outputs buffers | |||||
| * @param attr [IN] pointer to instance of aclopAttr. | |||||
| * may pass nullptr if the op has no attribute | |||||
| * @param engineType [IN] engine type | |||||
| * @param compileFlag [IN] compile flag | |||||
| * @param opPath [IN] path of op | |||||
| * @param stream [IN] stream handle | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopCompileAndExecute( | |||||
| const char *opType, int numInputs, const aclTensorDesc *const inputDesc[], const aclDataBuffer *const inputs[], | |||||
| int numOutputs, const aclTensorDesc *const outputDesc[], aclDataBuffer *const outputs[], const aclopAttr *attr, | |||||
| aclopEngineType engineType, aclopCompileType compileFlag, const char *opPath, aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief compile and execute op | |||||
| * | |||||
| * @param opType [IN] op type | |||||
| * @param numInputs [IN] number of inputs | |||||
| * @param inputDesc [IN] pointer to array of input tensor descriptions | |||||
| * @param inputs [IN] pointer to array of input buffers | |||||
| * @param numOutputs [IN] number of outputs | |||||
| * @param outputDesc [IN|OUT] pointer to array of output tensor descriptions | |||||
| * @param outputs [IN] pointer to array of outputs buffers | |||||
| * @param attr [IN] pointer to instance of aclopAttr. | |||||
| * may pass nullptr if the op has no attribute | |||||
| * @param engineType [IN] engine type | |||||
| * @param compileFlag [IN] compile flag | |||||
| * @param opPath [IN] path of op | |||||
| * @param stream [IN] stream handle | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopCompileAndExecuteV2(const char *opType, int numInputs, aclTensorDesc *inputDesc[], | |||||
| aclDataBuffer *inputs[], int numOutputs, | |||||
| aclTensorDesc *outputDesc[], aclDataBuffer *outputs[], | |||||
| aclopAttr *attr, aclopEngineType engineType, | |||||
| aclopCompileType compileFlag, const char *opPath, | |||||
| aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set compile option | |||||
| * | |||||
| * @param aclCompileOpt [IN] compile option | |||||
| * @param value [IN] pointer for the option value | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclSetCompileopt(aclCompileOpt opt, const char *value); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set compile flag | |||||
| * | |||||
| * @param flag [IN] compile flag, ACL_OP_COMPILE_DEFAULT means compile with default mode | |||||
| * ACL_OP_COMPILE_FUZZ means compile with fuzz mode | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclopSetCompileFlag(aclOpCompileFlag flag); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief generate graph and dump | |||||
| * | |||||
| * @param opType [IN] op type | |||||
| * @param numInputs [IN] number of inputs | |||||
| * @param inputDesc [IN] pointer to array of input tensor descriptions | |||||
| * @param inputs [IN] pointer to array of input buffers | |||||
| * @param numOutputs [IN] number of outputs | |||||
| * @param outputDesc [IN] pointer to array of output tensor descriptions | |||||
| * @param outputs [IN] pointer to array of outputs buffers | |||||
| * @param attr [IN] pointer to instance of aclopAttr. | |||||
| * may pass nullptr if the op has no attribute | |||||
| * @param engineType [IN] engine type | |||||
| * @param graphDumpPath [IN] dump path, if the suffix is ".txt", it means file path, else it means directory path | |||||
| * @param graphDumpOpt [IN] dump option, nullptr is supported | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclGenGraphAndDumpForOp( | |||||
| const char *opType, int numInputs, const aclTensorDesc *const inputDesc[], const aclDataBuffer *const inputs[], | |||||
| int numOutputs, const aclTensorDesc *const outputDesc[], aclDataBuffer *const outputs[], const aclopAttr *attr, | |||||
| aclopEngineType engineType, const char *graphDumpPath, const aclGraphDumpOption *graphDumpOpt); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create the graph dump option | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| * | |||||
| * @see aclDestroyGraphDumpOpt | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclGraphDumpOption *aclCreateGraphDumpOpt(); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy graph dump option | |||||
| * | |||||
| * @param graphDumpOpt [IN] pointer to the graph dump option | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclCreateGraphDumpOpt | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclDestroyGraphDumpOpt(const aclGraphDumpOption *graphDumpOpt); | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif // INC_EXTERNAL_ACL_ACL_OP_COMPILER_H_ | |||||
| @@ -0,0 +1,485 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_EXTERNAL_ACL_PROF_H_ | |||||
| #define INC_EXTERNAL_ACL_PROF_H_ | |||||
| #if (defined(_WIN32) || defined(_WIN64) || defined(_MSC_VER)) | |||||
| #define MSVP_PROF_API __declspec(dllexport) | |||||
| #else | |||||
| #define MSVP_PROF_API __attribute__((visibility("default"))) | |||||
| #endif | |||||
| #include "acl_base.h" | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| #define ACL_PROF_ACL_API 0x0001ULL | |||||
| #define ACL_PROF_TASK_TIME 0x0002ULL | |||||
| #define ACL_PROF_AICORE_METRICS 0x0004ULL | |||||
| #define ACL_PROF_AICPU 0x0008ULL | |||||
| #define ACL_PROF_L2CACHE 0x0010ULL | |||||
| #define ACL_PROF_HCCL_TRACE 0x0020ULL | |||||
| #define ACL_PROF_TRAINING_TRACE 0x0040ULL | |||||
| #define ACL_PROF_MSPROFTX 0x0080ULL | |||||
| #define ACL_PROF_RUNTIME_API 0x0100ULL | |||||
| /** | |||||
| * @deprecated please use aclprofGetOpTypeLen and aclprofGetOpTNameLen instead | |||||
| */ | |||||
| #define ACL_PROF_MAX_OP_NAME_LEN 257 | |||||
| #define ACL_PROF_MAX_OP_TYPE_LEN 65 | |||||
| typedef enum { | |||||
| ACL_AICORE_ARITHMETIC_UTILIZATION = 0, | |||||
| ACL_AICORE_PIPE_UTILIZATION = 1, | |||||
| ACL_AICORE_MEMORY_BANDWIDTH = 2, | |||||
| ACL_AICORE_L0B_AND_WIDTH = 3, | |||||
| ACL_AICORE_RESOURCE_CONFLICT_RATIO = 4, | |||||
| ACL_AICORE_MEMORY_UB = 5, | |||||
| ACL_AICORE_NONE = 0xFF | |||||
| } aclprofAicoreMetrics; | |||||
| typedef enum { | |||||
| ACL_STEP_START = 0, // step start | |||||
| ACL_STEP_END = 1 // step end | |||||
| } aclprofStepTag; | |||||
| typedef enum { | |||||
| ACL_SUBSCRIBE_OP = 0, | |||||
| ACL_SUBSCRIBE_SUBGRAPH = 1, | |||||
| ACL_SUBSCRIBE_OP_THREAD = 2, | |||||
| ACL_SUBSCRIBE_NONE | |||||
| } aclprofSubscribeOpFlag; | |||||
| typedef enum { ACL_SUBSCRIBE_ATTRI_THREADID = 0, ACL_SUBSCRIBE_ATTRI_NONE } aclprofSubscribeOpAttri; | |||||
| typedef struct aclprofConfig aclprofConfig; | |||||
| typedef struct aclprofStopConfig aclprofStopConfig; | |||||
| typedef struct aclprofAicoreEvents aclprofAicoreEvents; | |||||
| typedef struct aclprofSubscribeConfig aclprofSubscribeConfig; | |||||
| typedef struct aclprofStepInfo aclprofStepInfo; | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief profiling initialize | |||||
| * | |||||
| * @param profilerResultPath [IN] path of profiling result | |||||
| * @param length [IN] length of profilerResultPath | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclprofFinalize | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofInit(const char *profilerResultPath, size_t length); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief profiling finalize | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclprofInit | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofFinalize(); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Start profiling modules by profilerConfig | |||||
| * | |||||
| * @param profilerConfig [IN] config of profiling | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclprofStop | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofStart(const aclprofConfig *profilerConfig); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create data of type aclprofConfig | |||||
| * | |||||
| * @param deviceIdList [IN] list of device id | |||||
| * @param deviceNums [IN] number of devices | |||||
| * @param aicoreMetrics [IN] type of aicore metrics | |||||
| * @param aicoreEvents [IN] pointer to aicore events, only support NULL now | |||||
| * @param dataTypeConfig [IN] config modules need profiling | |||||
| * | |||||
| * @retval the aclprofConfig pointer | |||||
| * | |||||
| * @see aclprofDestroyConfig | |||||
| */ | |||||
| MSVP_PROF_API aclprofConfig *aclprofCreateConfig(uint32_t *deviceIdList, uint32_t deviceNums, | |||||
| aclprofAicoreMetrics aicoreMetrics, aclprofAicoreEvents *aicoreEvents, | |||||
| uint64_t dataTypeConfig); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy data of type aclprofConfig | |||||
| * | |||||
| * @param profilerConfig [IN] config of profiling | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclprofCreateConfig | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofDestroyConfig(const aclprofConfig *profilerConfig); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief stop profiling modules by stopProfilingConfig | |||||
| * | |||||
| * @param profilerConfig [IN] pointer to stop config of profiling | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclprofStart | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofStop(const aclprofConfig *profilerConfig); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief subscribe profiling data of model | |||||
| * | |||||
| * @param modelId [IN] the model id subscribed | |||||
| * @param profSubscribeConfig [IN] pointer to config of model subscribe | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclprofModelUnSubscribe | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofModelSubscribe(uint32_t modelId, const aclprofSubscribeConfig *profSubscribeConfig); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief unsubscribe profiling data of model | |||||
| * | |||||
| * @param modelId [IN] the model id unsubscribed | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclprofModelSubscribe | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofModelUnSubscribe(uint32_t modelId); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create subscribe config | |||||
| * | |||||
| * @param timeInfoSwitch [IN] switch whether get time info from model | |||||
| * @param aicoreMetrics [IN] aicore metrics | |||||
| * @param fd [IN] pointer to write pipe | |||||
| * | |||||
| * @retval the aclprofSubscribeConfig pointer | |||||
| * | |||||
| * @see aclprofDestroySubscribeConfig | |||||
| */ | |||||
| MSVP_PROF_API aclprofSubscribeConfig *aclprofCreateSubscribeConfig(int8_t timeInfoSwitch, | |||||
| aclprofAicoreMetrics aicoreMetrics, void *fd); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief destroy subscribe config | |||||
| * | |||||
| * @param profSubscribeConfig [IN] subscribe config | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclprofCreateSubscribeConfig | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofDestroySubscribeConfig(const aclprofSubscribeConfig *profSubscribeConfig); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create subscribe config | |||||
| * | |||||
| * @param opDescSize [OUT] size of op desc | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofGetOpDescSize(size_t *opDescSize); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get op number from subscription data | |||||
| * | |||||
| * @param opInfo [IN] pointer to subscription data | |||||
| * @param opInfoLen [IN] memory size of subscription data | |||||
| * @param opNumber [OUT] op number of subscription data | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofGetOpNum(const void *opInfo, size_t opInfoLen, uint32_t *opNumber); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get length op type from subscription data | |||||
| * | |||||
| * @param opInfo [IN] pointer to subscription data | |||||
| * @param opInfoLen [IN] memory size of subscription data | |||||
| * @param index [IN] index of op array in opInfo | |||||
| * @param opTypeLen [OUT] actual length of op type string | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofGetOpTypeLen(const void *opInfo, size_t opInfoLen, uint32_t index, size_t *opTypeLen); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get op type from subscription data | |||||
| * | |||||
| * @param opInfo [IN] pointer to subscription data | |||||
| * @param opInfoLen [IN] memory size of subscription data | |||||
| * @param index [IN] index of op array in opInfo | |||||
| * @param opType [OUT] obtained op type string | |||||
| * @param opTypeLen [IN] obtained length of op type string | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofGetOpType(const void *opInfo, size_t opInfoLen, uint32_t index, char *opType, | |||||
| size_t opTypeLen); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get length op name from subscription data | |||||
| * | |||||
| * @param opInfo [IN] pointer to subscription data | |||||
| * @param opInfoLen [IN] memory size of subscription data | |||||
| * @param index [IN] index of op array in opInfo | |||||
| * @param opNameLen [OUT] actual length of op name string | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofGetOpNameLen(const void *opInfo, size_t opInfoLen, uint32_t index, size_t *opNameLen); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get op type from subscription data | |||||
| * | |||||
| * @param opInfo [IN] pointer to subscription data | |||||
| * @param opInfoLen [IN] memory size of subscription data | |||||
| * @param index [IN] index of op array in opInfo | |||||
| * @param opName [OUT] obtained op name string | |||||
| * @param opNameLen [IN] obtained length of op name string | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofGetOpName(const void *opInfo, size_t opInfoLen, uint32_t index, char *opName, | |||||
| size_t opNameLen); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get start time of specified op from subscription data | |||||
| * | |||||
| * @param opInfo [IN] pointer to subscription data | |||||
| * @param opInfoLen [IN] memory size of subscription data | |||||
| * @param index [IN] index of op array in opInfo | |||||
| * | |||||
| * @retval start time(us) of specified op with timestamp | |||||
| * @retval 0 for failed | |||||
| */ | |||||
| MSVP_PROF_API uint64_t aclprofGetOpStart(const void *opInfo, size_t opInfoLen, uint32_t index); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get end time of specified op from subscription data | |||||
| * | |||||
| * @param opInfo [IN] pointer to subscription data | |||||
| * @param opInfoLen [IN] memory size of subscription data | |||||
| * @param index [IN] index of op array in opInfo | |||||
| * | |||||
| * @retval end time(us) of specified op with timestamp | |||||
| * @retval 0 for failed | |||||
| */ | |||||
| MSVP_PROF_API uint64_t aclprofGetOpEnd(const void *opInfo, size_t opInfoLen, uint32_t index); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get excution time of specified op from subscription data | |||||
| * | |||||
| * @param opInfo [IN] pointer to subscription data | |||||
| * @param opInfoLen [IN] memory size of subscription data | |||||
| * @param index [IN] index of op array in opInfo | |||||
| * | |||||
| * @retval execution time(us) of specified op with timestamp | |||||
| * @retval 0 for failed | |||||
| */ | |||||
| MSVP_PROF_API uint64_t aclprofGetOpDuration(const void *opInfo, size_t opInfoLen, uint32_t index); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get model id from subscription data | |||||
| * | |||||
| * @param opInfo [IN] pointer to subscription data | |||||
| * @param opInfoLen [IN] memory size of subscription data | |||||
| * | |||||
| * @retval model id of subscription data | |||||
| * @retval 0 for failed | |||||
| */ | |||||
| MSVP_PROF_API size_t aclprofGetModelId(const void *opInfo, size_t opInfoLen, uint32_t index); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get op flag from subscription data | |||||
| * | |||||
| * @param opInfo [IN] pointer to subscription data | |||||
| * @param opInfoLen [IN] memory size of subscription data | |||||
| * @param index [IN] index of op array in opInfo | |||||
| * | |||||
| * @retval op flag | |||||
| * @retval ACL_SUBSCRIBE_NONE for failed | |||||
| */ | |||||
| MSVP_PROF_API aclprofSubscribeOpFlag aclprofGetOpFlag(const void *opInfo, size_t opInfoLen, uint32_t index); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get op flag from subscription data | |||||
| * | |||||
| * @param opInfo [IN] pointer to subscription data | |||||
| * @param opInfoLen [IN] memory size of subscription data | |||||
| * @param index [IN] index of op array in opInfo | |||||
| * @param attri [IN] attribute of op | |||||
| * | |||||
| * @retval op flag | |||||
| * @retval NULL for failed | |||||
| */ | |||||
| MSVP_PROF_API const char *aclprofGetOpAttriValue(const void *opInfo, size_t opInfoLen, uint32_t index, | |||||
| aclprofSubscribeOpAttri attri); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief | |||||
| * | |||||
| * @param stepInfo [IN] pointer to stepInfo data | |||||
| * @param aclprofstepTag [IN] start or end flag | |||||
| * @param stream [IN] steam info | |||||
| * | |||||
| * @retval 0 for failed | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofGetStepTimestamp(aclprofStepInfo *stepInfo, aclprofStepTag tag, aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create pointer to aclprofStepInfo data | |||||
| * | |||||
| * | |||||
| * @retval aclprofStepInfo pointer | |||||
| */ | |||||
| MSVP_PROF_API aclprofStepInfo *aclprofCreateStepInfo(); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief destroy aclprofStepInfo pointer | |||||
| * | |||||
| * | |||||
| * @retval void | |||||
| */ | |||||
| MSVP_PROF_API void aclprofDestroyStepInfo(aclprofStepInfo *stepinfo); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create pointer to aclprofstamp | |||||
| * | |||||
| * | |||||
| * @retval aclprofStamp pointer | |||||
| */ | |||||
| MSVP_PROF_API void *aclprofCreateStamp(); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief destory stamp pointer | |||||
| * | |||||
| * | |||||
| * @retval void | |||||
| */ | |||||
| MSVP_PROF_API void aclprofDestroyStamp(void *stamp); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Record push timestamp | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofPush(void *stamp); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Record pop timestamp | |||||
| * | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofPop(); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Record range start timestamp | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofRangeStart(void *stamp, uint32_t *rangeId); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Record range end timestamp | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofRangeStop(uint32_t rangeId); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set message to stamp | |||||
| * | |||||
| * | |||||
| * @retval void | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofSetStampTraceMessage(void *stamp, const char *msg, uint32_t msgLen); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Record mark timestamp | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| MSVP_PROF_API aclError aclprofMark(void *stamp); | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif // INC_EXTERNAL_ACL_PROF_H_ | |||||
| @@ -0,0 +1,316 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_EXTERNAL_ACL_ACL_TDT_H_ | |||||
| #define INC_EXTERNAL_ACL_ACL_TDT_H_ | |||||
| #include "acl/acl_base.h" | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| enum acltdtTensorType { | |||||
| ACL_TENSOR_DATA_UNDEFINED = -1, | |||||
| ACL_TENSOR_DATA_TENSOR, | |||||
| ACL_TENSOR_DATA_END_OF_SEQUENCE, | |||||
| ACL_TENSOR_DATA_ABNORMAL | |||||
| }; | |||||
| typedef struct acltdtDataItem acltdtDataItem; | |||||
| typedef struct acltdtDataset acltdtDataset; | |||||
| typedef struct acltdtChannelHandle acltdtChannelHandle; | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get tensor type from item | |||||
| * | |||||
| * @param dataItem [IN] pointer to the data item | |||||
| * | |||||
| * @retval Tensor type. | |||||
| * @retval ACL_DT_UNDEFINED if dataItem is null | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY acltdtTensorType acltdtGetTensorTypeFromItem(const acltdtDataItem *dataItem); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get data type from item | |||||
| * | |||||
| * @param dataItem [IN] pointer to the data item | |||||
| * | |||||
| * @retval Data type. | |||||
| * @retval ACL_DT_UNDEFINED if dataItem is null | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclDataType acltdtGetDataTypeFromItem(const acltdtDataItem *dataItem); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get data address from item | |||||
| * | |||||
| * @param dataItem [IN] pointer to data item | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY void *acltdtGetDataAddrFromItem(const acltdtDataItem *dataItem); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get data size from item | |||||
| * | |||||
| * @param dataItem [IN] pointer to data item | |||||
| * | |||||
| * @retval 0 for failed | |||||
| * @retval OtherValues success | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY size_t acltdtGetDataSizeFromItem(const acltdtDataItem *dataItem); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get dim's number from item | |||||
| * | |||||
| * @param dataItem [IN] pointer to data item | |||||
| * | |||||
| * @retval 0 for failed | |||||
| * @retval OtherValues success | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY size_t acltdtGetDimNumFromItem(const acltdtDataItem *dataItem); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get dims from item | |||||
| * | |||||
| * @param dataItem [IN] the struct of data item | |||||
| * @param dims [IN|OUT] pointer to the dims of dataTtem | |||||
| * @param dimNum [IN] the size of the dims | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtGetDimsFromItem(const acltdtDataItem *dataItem, int64_t *dims, size_t dimNum); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create the struct of data item | |||||
| * | |||||
| * @param tdtType [IN] Tdt tensor type | |||||
| * @param dims [IN] pointer of tdtDataItem's dims | |||||
| * @param dimNum [IN] Dim number | |||||
| * @param dataType [IN] Data type | |||||
| * @param data [IN] Data pointer | |||||
| * @param size [IN] Data size | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| * | |||||
| * @see acltdtDestroyDataItem | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY acltdtDataItem *acltdtCreateDataItem(acltdtTensorType tdtType, const int64_t *dims, size_t dimNum, | |||||
| aclDataType dataType, void *data, size_t size); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy the struct of data item | |||||
| * | |||||
| * @param dataItem [IN] pointer to the data item | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtCreateDataItem | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtDestroyDataItem(acltdtDataItem *dataItem); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create the tdt dataset | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| * | |||||
| * @see acltdtDestroyDataset | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY acltdtDataset *acltdtCreateDataset(); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy the tdt dataset | |||||
| * | |||||
| * @param dataset [IN] pointer to the dataset | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtCreateDataset | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtDestroyDataset(acltdtDataset *dataset); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get the data item | |||||
| * | |||||
| * @param dataset [IN] pointer to the dataset | |||||
| * @param index [IN] index of the dataset | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| * | |||||
| * @see acltdtAddDataItem | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY acltdtDataItem *acltdtGetDataItem(const acltdtDataset *dataset, size_t index); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get the data item | |||||
| * | |||||
| * @param dataset [OUT] pointer to the dataset | |||||
| * @param dataItem [IN] pointer to the data item | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtGetDataItem | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtAddDataItem(acltdtDataset *dataset, acltdtDataItem *dataItem); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get the size of dataset | |||||
| * | |||||
| * @param dataset [IN] pointer to the dataset | |||||
| * | |||||
| * @retval 0 for failed | |||||
| * @retval OtherValues success | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY size_t acltdtGetDatasetSize(const acltdtDataset *dataset); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Get the name of dataset | |||||
| * | |||||
| * @param dataset [IN] pointer to the dataset | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY const char *acltdtGetDatasetName(const acltdtDataset *dataset); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Stop the channel | |||||
| * | |||||
| * @param handle [IN] pointer to the channel handle | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtCreateChannel | acltdtDestroyChannel | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtStopChannel(acltdtChannelHandle *handle); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create the channel | |||||
| * | |||||
| * @param deviceId [IN] the device id | |||||
| * @param name [IN] the name of channel | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| * | |||||
| * @see acltdtStopChannel | acltdtDestroyChannel | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY acltdtChannelHandle *acltdtCreateChannel(uint32_t deviceId, const char *name); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create the channel with max size | |||||
| * | |||||
| * @param deviceId [IN] the device id | |||||
| * @param name [IN] the name of channel | |||||
| * @param capacity [IN] the capacity of channel | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| * | |||||
| * @see acltdtDestroyChannel | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY acltdtChannelHandle *acltdtCreateChannelWithCapacity(uint32_t deviceId, const char *name, | |||||
| size_t capacity); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy the channel | |||||
| * | |||||
| * @param handle [IN] pointer to the channel handle | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtCreateChannel | acltdtStopChannel | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtDestroyChannel(acltdtChannelHandle *handle); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Send tensor to device | |||||
| * | |||||
| * @param handle [IN] pointer to the channel handle | |||||
| * @param dataset [IN] pointer to the dataset | |||||
| * @param timeout [IN] to be reserved, now it must be -1 | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtReceiveTensor | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtSendTensor(const acltdtChannelHandle *handle, const acltdtDataset *dataset, | |||||
| int32_t timeout); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Receive tensor from device | |||||
| * | |||||
| * @param handle [IN] pointer to the channel handle | |||||
| * @param dataset [OUT] pointer to the dataset | |||||
| * @param timeout [IN] to be reserved, now it must be -1 | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtSendTensor | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtReceiveTensor(const acltdtChannelHandle *handle, acltdtDataset *dataset, | |||||
| int32_t timeout); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief query the size of the channel | |||||
| * | |||||
| * @param handle [IN] pointer to the channel handle | |||||
| * @param size [OUT] current size of this channel | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtQueryChannelSize(const acltdtChannelHandle *handle, size_t *size); | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif // INC_EXTERNAL_ACL_ACL_TDT_H_ | |||||
| @@ -0,0 +1,476 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_EXTERNAL_ACL_ACL_TDT_QUEUE_H_ | |||||
| #define INC_EXTERNAL_ACL_ACL_TDT_QUEUE_H_ | |||||
| #include "acl/acl_base.h" | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| #define ACL_TDT_QUEUE_PERMISSION_MANAGE 1 | |||||
| #define ACL_TDT_QUEUE_PERMISSION_DEQUEUE 2 | |||||
| #define ACL_TDT_QUEUE_PERMISSION_ENQUEUE 4 | |||||
| typedef void *acltdtBuf; | |||||
| typedef struct tagMemQueueAttr acltdtQueueAttr; | |||||
| typedef struct acltdtQueueRouteList acltdtQueueRouteList; | |||||
| typedef struct acltdtQueueRouteQueryInfo acltdtQueueRouteQueryInfo; | |||||
| typedef struct acltdtQueueRoute acltdtQueueRoute; | |||||
| typedef enum { ACL_TDT_QUEUE_NAME_PTR = 0, ACL_TDT_QUEUE_DEPTH_UINT32 } acltdtQueueAttrType; | |||||
| typedef enum { | |||||
| ACL_TDT_QUEUE_ROUTE_SRC_UINT32 = 0, | |||||
| ACL_TDT_QUEUE_ROUTE_DST_UINT32, | |||||
| ACL_TDT_QUEUE_ROUTE_STATUS_INT32 | |||||
| } acltdtQueueRouteParamType; | |||||
| typedef enum { | |||||
| ACL_TDT_QUEUE_ROUTE_QUERY_SRC = 0, | |||||
| ACL_TDT_QUEUE_ROUTE_QUERY_DST, | |||||
| ACL_TDT_QUEUE_ROUTE_QUERY_SRC_AND_DST | |||||
| } acltdtQueueRouteQueryMode; | |||||
| typedef enum { | |||||
| ACL_TDT_QUEUE_ROUTE_QUERY_MODE_ENUM = 0, | |||||
| ACL_TDT_QUEUE_ROUTE_QUERY_SRC_ID_UINT32, | |||||
| ACL_TDT_QUEUE_ROUTE_QUERY_DST_ID_UINT32 | |||||
| } acltdtQueueRouteQueryInfoParamType; | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create queue | |||||
| * | |||||
| * @param attr [IN] pointer to the queue attr | |||||
| * @param qid [OUT] pointer to the qid | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtDestroyQueue | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtCreateQueue(const acltdtQueueAttr *attr, uint32_t *qid); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief destroy queue | |||||
| * | |||||
| * @param qid [IN] qid which to be destroyed | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtCreateQueue | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtDestroyQueue(uint32_t qid); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief enqueue function | |||||
| * | |||||
| * @param qid [IN] qid | |||||
| * @param buf [IN] acltdtBuf | |||||
| * @param timeout [IN] timeout, -1 means blocking | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtDequeue | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtEnqueue(uint32_t qid, acltdtBuf buf, int32_t timeout); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief dequeue function | |||||
| * | |||||
| * @param qid [IN] qid | |||||
| * @param buf [OUT] pointer to the acltdtBuf | |||||
| * @param timeout [IN] timeout, -1 means blocking | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtEnqueue | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtDequeue(uint32_t qid, acltdtBuf *buf, int32_t timeout); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief enqueue function | |||||
| * | |||||
| * @param qid [IN] qid | |||||
| * @param data [IN] the pointer to data buf | |||||
| * @param dataSize [IN] the size of data buf | |||||
| * @param userData [IN] the pointer to user data buf | |||||
| * @param userDataSize [IN] the size of user data buf | |||||
| * @param timeout [IN] timeout, -1 means blocking | |||||
| * @param rsv [IN] reserved param | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtDequeueData | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtEnqueueData(uint32_t qid, const void *data, size_t dataSize, const void *userData, | |||||
| size_t userDataSize, int32_t timeout, uint32_t rsv); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief dequeue function | |||||
| * | |||||
| * @param qid [IN] qid | |||||
| * @param data [IN|OUT] the pointer to data buf | |||||
| * @param dataSize [IN] the size of data buf | |||||
| * @param retDataSize [OUT] the return size of data buf | |||||
| * @param userData [IN|OUT] the pointer to user data buf | |||||
| * @param userDataSize [IN] the size of user data buf | |||||
| * @param timeout [IN] timeout, -1 means blocking | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtEnqueueData | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtDequeueData(uint32_t qid, void *data, size_t dataSize, size_t *retDataSize, | |||||
| void *userData, size_t userDataSize, int32_t timeout); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief grant queue to other process | |||||
| * | |||||
| * @param qid [IN] qid | |||||
| * @param pid [IN] pid of dst process | |||||
| * @param permission [IN] permission of queue | |||||
| * @param timeout [IN] timeout, -1 means blocking | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see ACL_TDT_QUEUE_PERMISSION_MANAGE | ACL_TDT_QUEUE_PERMISSION_DEQUEUE | ACL_TDT_QUEUE_PERMISSION_ENQUEUE | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtGrantQueue(uint32_t qid, int32_t pid, uint32_t permission, int32_t timeout); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief attach queue in current process | |||||
| * | |||||
| * @param qid [IN] qid | |||||
| * @param timeout [IN] timeout, -1 means blocking | |||||
| * @param permission [OUT] permission of queue | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtGrantQueue | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtAttachQueue(uint32_t qid, int32_t timeout, uint32_t *permission); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief bind queue routes | |||||
| * | |||||
| * @param qRouteList [IN|OUT] pointer to the route list | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtBindQueueRoutes(acltdtQueueRouteList *qRouteList); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief unbind queue routes | |||||
| * | |||||
| * @param qRouteList [IN|OUT] pointer to the route list | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtUnbindQueueRoutes(acltdtQueueRouteList *qRouteList); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief query queue routes according to query mode | |||||
| * | |||||
| * @param queryInfo [IN] pointer to the queue route query info | |||||
| * @param qRouteList [IN|OUT] pointer to the route list | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtQueryQueueRoutes(const acltdtQueueRouteQueryInfo *queryInfo, | |||||
| acltdtQueueRouteList *qRouteList); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief alloc acltdtBuf | |||||
| * | |||||
| * @param size [IN] alloc buf size | |||||
| * @param type [IN] reserved parameters, need to set zero currently | |||||
| * @param buf [OUT] pointer to the acltdtBuf | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtFreeBuf | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtAllocBuf(size_t size, uint32_t type, acltdtBuf *buf); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief free acltdtBuf | |||||
| * | |||||
| * @param buf [IN] pointer to the acltdtBuf | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtAllocBuf | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtFreeBuf(acltdtBuf buf); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get data buf address | |||||
| * | |||||
| * @param buf [IN] acltdtBuf | |||||
| * @param dataPtr [OUT] pointer to the data ptr which is acquired from acltdtBuf | |||||
| * @param size [OUT] pointer to the size | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtAllocBuf | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtGetBufData(const acltdtBuf buf, void **dataPtr, size_t *size); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create the queue attr | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| * | |||||
| * @see acltdtDestroyQueueAttr | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY acltdtQueueAttr *acltdtCreateQueueAttr(); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy the queue attr | |||||
| * | |||||
| * @param attr [IN] pointer to the queue attr | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtCreateQueueAttr | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtDestroyQueueAttr(const acltdtQueueAttr *attr); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Set parameter for queue attr | |||||
| * | |||||
| * @param attr [IN|OUT] pointer to the queue attr | |||||
| * @param type [IN] parameter type | |||||
| * @param len [IN] parameter length | |||||
| * @param param [IN] pointer to parameter value | |||||
| * | |||||
| * @retval ACL_SUCCESS for success, other for failure | |||||
| * | |||||
| * @see acltdtCreateQueueAttr | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtSetQueueAttr(acltdtQueueAttr *attr, acltdtQueueAttrType type, size_t len, | |||||
| const void *param); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * | |||||
| * @brief Get parameter for queue attr. | |||||
| * | |||||
| * @param attr [IN] pointer to the queue attr | |||||
| * @param type [IN] parameter type | |||||
| * @param len [IN] parameter length | |||||
| * @param paramRetSize [OUT] pointer to parameter real length | |||||
| * @param param [OUT] pointer to parameter value | |||||
| * | |||||
| * @retval ACL_SUCCESS for success, other for failure | |||||
| * | |||||
| * @see acltdtCreateQueueAttr | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtGetQueueAttr(const acltdtQueueAttr *attr, acltdtQueueAttrType type, size_t len, | |||||
| size_t *paramRetSize, void *param); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create the queue route | |||||
| * | |||||
| * @param srcId [IN] src id of queue route | |||||
| * @param dstId [IN] dst id of queue route | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| * | |||||
| * @see acltdtDestroyQueueRoute | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY acltdtQueueRoute *acltdtCreateQueueRoute(uint32_t srcId, uint32_t dstId); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy the queue attr | |||||
| * | |||||
| * @param route [IN] pointer to the queue route | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtCreateQueueRoute | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtDestroyQueueRoute(const acltdtQueueRoute *route); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * | |||||
| * @brief Get parameter for queue route. | |||||
| * | |||||
| * @param route [IN] pointer to the queue route | |||||
| * @param type [IN] parameter type | |||||
| * @param len [IN] parameter length | |||||
| * @param paramRetSize [OUT] pointer to parameter real length | |||||
| * @param param [OUT] pointer to parameter value | |||||
| * | |||||
| * @retval ACL_SUCCESS for success, other for failure | |||||
| * | |||||
| * @see acltdtCreateQueueRoute | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtGetQueueRouteParam(const acltdtQueueRoute *route, acltdtQueueRouteParamType type, | |||||
| size_t len, size_t *paramRetSize, void *param); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create the queue route list | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| * | |||||
| * @see acltdtDestroyQueueRouteList | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY acltdtQueueRouteList *acltdtCreateQueueRouteList(); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy the queue route list | |||||
| * | |||||
| * @param routeList [IN] pointer to the queue route list | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtCreateQueueRouteList | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtDestroyQueueRouteList(const acltdtQueueRouteList *routeList); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief add queue route to the route list | |||||
| * | |||||
| * @param routeList [IN|OUT] pointer to the queue route list | |||||
| * @param route [IN] pointer to the queue route | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtCreateQueueRouteList | acltdtCreateQueueRoute | |||||
| * | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtAddQueueRoute(acltdtQueueRouteList *routeList, const acltdtQueueRoute *route); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get queue route from route list | |||||
| * | |||||
| * @param routeList [IN] pointer to the queue route list | |||||
| * @param index [IN] index of queue route in route list | |||||
| * @param route [IN|OUT] pointer to the queue route | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtCreateQueueRouteList | acltdtCreateQueueRoute | |||||
| * | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtGetQueueRoute(const acltdtQueueRouteList *routeList, size_t index, | |||||
| acltdtQueueRoute *route); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief get queue route num from route list | |||||
| * | |||||
| * @param routeList [IN] pointer to the queue route list | |||||
| * | |||||
| * @retval the number of queue route | |||||
| * | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY size_t acltdtGetQueueRouteNum(const acltdtQueueRouteList *routeList); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create the queue route query info | |||||
| * | |||||
| * @retval null for failed | |||||
| * @retval OtherValues success | |||||
| * | |||||
| * @see acltdtDestroyQueueRouteQueryInfo | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY acltdtQueueRouteQueryInfo *acltdtCreateQueueRouteQueryInfo(); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy the queue route query info | |||||
| * | |||||
| * @param info [IN] pointer to the queue route info | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see acltdtCreateQueueRouteQueryInfo | |||||
| * | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtDestroyQueueRouteQueryInfo(const acltdtQueueRouteQueryInfo *info); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Set parameter for queue route info | |||||
| * | |||||
| * @param attr [IN|OUT] pointer to the queue route info | |||||
| * @param type [IN] parameter type | |||||
| * @param len [IN] parameter length | |||||
| * @param param [IN] pointer to parameter value | |||||
| * | |||||
| * @retval ACL_SUCCESS for success, other for failure | |||||
| * | |||||
| * @see acltdtCreateQueueRouteQueryInfo | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError acltdtSetQueueRouteQueryInfo(acltdtQueueRouteQueryInfo *param, | |||||
| acltdtQueueRouteQueryInfoParamType type, size_t len, | |||||
| const void *value); | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif // INC_EXTERNAL_ACL_ACL_TDT_QUEUE_H_ | |||||
| @@ -0,0 +1,77 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_EXTERNAL_GE_GE_ERROR_CODES_H_ | |||||
| #define INC_EXTERNAL_GE_GE_ERROR_CODES_H_ | |||||
| #if defined(_MSC_VER) | |||||
| #ifdef FUNC_VISIBILITY | |||||
| #define GE_FUNC_VISIBILITY _declspec(dllexport) | |||||
| #else | |||||
| #define GE_FUNC_VISIBILITY | |||||
| #endif | |||||
| #else | |||||
| #ifdef FUNC_VISIBILITY | |||||
| #define GE_FUNC_VISIBILITY __attribute__((visibility("default"))) | |||||
| #else | |||||
| #define GE_FUNC_VISIBILITY | |||||
| #endif | |||||
| #endif | |||||
| #include <stddef.h> | |||||
| #include <stdint.h> | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| static const uint32_t ACL_ERROR_GE_PARAM_INVALID = 145000U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_NOT_INIT = 145001U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_PATH_INVALID = 145002U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_ID_INVALID = 145003U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_DATA_SIZE_INVALID = 145006U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_ADDR_INVALID = 145007U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_QUEUE_ID_INVALID = 145008U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_MODEL_REPEATED = 145009U; | |||||
| static const uint32_t ACL_ERROR_GE_DYNAMIC_INPUT_ADDR_INVALID = 145011U; | |||||
| static const uint32_t ACL_ERROR_GE_DYNAMIC_INPUT_LENGTH_INVALID = 145012U; | |||||
| static const uint32_t ACL_ERROR_GE_DYNAMIC_BATCH_SIZE_INVALID = 145013U; | |||||
| static const uint32_t ACL_ERROR_GE_AIPP_BATCH_EMPTY = 145014U; | |||||
| static const uint32_t ACL_ERROR_GE_AIPP_NOT_EXIST = 145015U; | |||||
| static const uint32_t ACL_ERROR_GE_AIPP_MODE_INVALID = 145016U; | |||||
| static const uint32_t ACL_ERROR_GE_OP_TASK_TYPE_INVALID = 145017U; | |||||
| static const uint32_t ACL_ERROR_GE_OP_KERNEL_TYPE_INVALID = 145018U; | |||||
| static const uint32_t ACL_ERROR_GE_PLGMGR_PATH_INVALID = 145019U; | |||||
| static const uint32_t ACL_ERROR_GE_FORMAT_INVALID = 145020U; | |||||
| static const uint32_t ACL_ERROR_GE_SHAPE_INVALID = 145021U; | |||||
| static const uint32_t ACL_ERROR_GE_DATATYPE_INVALID = 145022U; | |||||
| static const uint32_t ACL_ERROR_GE_MEMORY_ALLOCATION = 245000U; | |||||
| static const uint32_t ACL_ERROR_GE_MEMORY_OPERATE_FAILED = 245001U; | |||||
| static const uint32_t ACL_ERROR_GE_DEVICE_MEMORY_OPERATE_FAILED = 245002U; | |||||
| static const uint32_t ACL_ERROR_GE_INTERNAL_ERROR = 545000U; | |||||
| static const uint32_t ACL_ERROR_GE_LOAD_MODEL = 545001U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_MODEL_PARTITION_FAILED = 545002U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_WEIGHT_PARTITION_FAILED = 545003U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_TASK_PARTITION_FAILED = 545004U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_KERNEL_PARTITION_FAILED = 545005U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_RELEASE_MODEL_DATA = 545006U; | |||||
| static const uint32_t ACL_ERROR_GE_COMMAND_HANDLE = 545007U; | |||||
| static const uint32_t ACL_ERROR_GE_GET_TENSOR_INFO = 545008U; | |||||
| static const uint32_t ACL_ERROR_GE_UNLOAD_MODEL = 545009U; | |||||
| #ifdef __cplusplus | |||||
| } // namespace ge | |||||
| #endif | |||||
| #endif // INC_EXTERNAL_GE_GE_ERROR_CODES_H_ | |||||
| @@ -0,0 +1,123 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef __INC_EXTERNEL_RT_ERROR_CODES_H__ | |||||
| #define __INC_EXTERNEL_RT_ERROR_CODES_H__ | |||||
| #include <stddef.h> | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| static const int32_t ACL_RT_SUCCESS = 0; // success | |||||
| static const int32_t ACL_ERROR_RT_PARAM_INVALID = 107000; // param invalid | |||||
| static const int32_t ACL_ERROR_RT_INVALID_DEVICEID = 107001; // invalid device id | |||||
| static const int32_t ACL_ERROR_RT_CONTEXT_NULL = 107002; // current context null | |||||
| static const int32_t ACL_ERROR_RT_STREAM_CONTEXT = 107003; // stream not in current context | |||||
| static const int32_t ACL_ERROR_RT_MODEL_CONTEXT = 107004; // model not in current context | |||||
| static const int32_t ACL_ERROR_RT_STREAM_MODEL = 107005; // stream not in model | |||||
| static const int32_t ACL_ERROR_RT_EVENT_TIMESTAMP_INVALID = 107006; // event timestamp invalid | |||||
| static const int32_t ACL_ERROR_RT_EVENT_TIMESTAMP_REVERSAL = 107007; // event timestamp reversal | |||||
| static const int32_t ACL_ERROR_RT_ADDR_UNALIGNED = 107008; // memory address unaligned | |||||
| static const int32_t ACL_ERROR_RT_FILE_OPEN = 107009; // open file failed | |||||
| static const int32_t ACL_ERROR_RT_FILE_WRITE = 107010; // write file failed | |||||
| static const int32_t ACL_ERROR_RT_STREAM_SUBSCRIBE = 107011; // error subscribe stream | |||||
| static const int32_t ACL_ERROR_RT_THREAD_SUBSCRIBE = 107012; // error subscribe thread | |||||
| static const int32_t ACL_ERROR_RT_GROUP_NOT_SET = 107013; // group not set | |||||
| static const int32_t ACL_ERROR_RT_GROUP_NOT_CREATE = 107014; // group not create | |||||
| static const int32_t ACL_ERROR_RT_STREAM_NO_CB_REG = 107015; // callback not register to stream | |||||
| static const int32_t ACL_ERROR_RT_INVALID_MEMORY_TYPE = 107016; // invalid memory type | |||||
| static const int32_t ACL_ERROR_RT_INVALID_HANDLE = 107017; // invalid handle | |||||
| static const int32_t ACL_ERROR_RT_INVALID_MALLOC_TYPE = 107018; // invalid malloc type | |||||
| static const int32_t ACL_ERROR_RT_WAIT_TIMEOUT = 107019; // wait timeout | |||||
| static const int32_t ACL_ERROR_RT_TASK_TIMEOUT = 107020; // task timeout | |||||
| static const int32_t ACL_ERROR_RT_FEATURE_NOT_SUPPORT = 207000; // feature not support | |||||
| static const int32_t ACL_ERROR_RT_MEMORY_ALLOCATION = 207001; // memory allocation error | |||||
| static const int32_t ACL_ERROR_RT_MEMORY_FREE = 207002; // memory free error | |||||
| static const int32_t ACL_ERROR_RT_AICORE_OVER_FLOW = 207003; // aicore over flow | |||||
| static const int32_t ACL_ERROR_RT_NO_DEVICE = 207004; // no device | |||||
| static const int32_t ACL_ERROR_RT_RESOURCE_ALLOC_FAIL = 207005; // resource alloc fail | |||||
| static const int32_t ACL_ERROR_RT_NO_PERMISSION = 207006; // no permission | |||||
| static const int32_t ACL_ERROR_RT_NO_EVENT_RESOURCE = 207007; // no event resource | |||||
| static const int32_t ACL_ERROR_RT_NO_STREAM_RESOURCE = 207008; // no stream resource | |||||
| static const int32_t ACL_ERROR_RT_NO_NOTIFY_RESOURCE = 207009; // no notify resource | |||||
| static const int32_t ACL_ERROR_RT_NO_MODEL_RESOURCE = 207010; // no model resource | |||||
| static const int32_t ACL_ERROR_RT_NO_CDQ_RESOURCE = 207011; // no cdq resource | |||||
| static const int32_t ACL_ERROR_RT_OVER_LIMIT = 207012; // over limit | |||||
| static const int32_t ACL_ERROR_RT_QUEUE_EMPTY = 207013; // queue is empty | |||||
| static const int32_t ACL_ERROR_RT_QUEUE_FULL = 207014; // queue is full | |||||
| static const int32_t ACL_ERROR_RT_REPEATED_INIT = 207015; // repeated init | |||||
| static const int32_t ACL_ERROR_RT_AIVEC_OVER_FLOW = 207016; // aivec over flow | |||||
| static const int32_t ACL_ERROR_RT_OVER_FLOW = 207017; // common over flow | |||||
| static const int32_t ACL_ERROR_RT_INTERNAL_ERROR = 507000; // runtime internal error | |||||
| static const int32_t ACL_ERROR_RT_TS_ERROR = 507001; // ts internel error | |||||
| static const int32_t ACL_ERROR_RT_STREAM_TASK_FULL = 507002; // task full in stream | |||||
| static const int32_t ACL_ERROR_RT_STREAM_TASK_EMPTY = 507003; // task empty in stream | |||||
| static const int32_t ACL_ERROR_RT_STREAM_NOT_COMPLETE = 507004; // stream not complete | |||||
| static const int32_t ACL_ERROR_RT_END_OF_SEQUENCE = 507005; // end of sequence | |||||
| static const int32_t ACL_ERROR_RT_EVENT_NOT_COMPLETE = 507006; // event not complete | |||||
| static const int32_t ACL_ERROR_RT_CONTEXT_RELEASE_ERROR = 507007; // context release error | |||||
| static const int32_t ACL_ERROR_RT_SOC_VERSION = 507008; // soc version error | |||||
| static const int32_t ACL_ERROR_RT_TASK_TYPE_NOT_SUPPORT = 507009; // task type not support | |||||
| static const int32_t ACL_ERROR_RT_LOST_HEARTBEAT = 507010; // ts lost heartbeat | |||||
| static const int32_t ACL_ERROR_RT_MODEL_EXECUTE = 507011; // model execute failed | |||||
| static const int32_t ACL_ERROR_RT_REPORT_TIMEOUT = 507012; // report timeout | |||||
| static const int32_t ACL_ERROR_RT_SYS_DMA = 507013; // sys dma error | |||||
| static const int32_t ACL_ERROR_RT_AICORE_TIMEOUT = 507014; // aicore timeout | |||||
| static const int32_t ACL_ERROR_RT_AICORE_EXCEPTION = 507015; // aicore exception | |||||
| static const int32_t ACL_ERROR_RT_AICORE_TRAP_EXCEPTION = 507016; // aicore trap exception | |||||
| static const int32_t ACL_ERROR_RT_AICPU_TIMEOUT = 507017; // aicpu timeout | |||||
| static const int32_t ACL_ERROR_RT_AICPU_EXCEPTION = 507018; // aicpu exception | |||||
| static const int32_t ACL_ERROR_RT_AICPU_DATADUMP_RSP_ERR = 507019; // aicpu datadump response error | |||||
| static const int32_t ACL_ERROR_RT_AICPU_MODEL_RSP_ERR = 507020; // aicpu model operate response error | |||||
| static const int32_t ACL_ERROR_RT_PROFILING_ERROR = 507021; // profiling error | |||||
| static const int32_t ACL_ERROR_RT_IPC_ERROR = 507022; // ipc error | |||||
| static const int32_t ACL_ERROR_RT_MODEL_ABORT_NORMAL = 507023; // model abort normal | |||||
| static const int32_t ACL_ERROR_RT_KERNEL_UNREGISTERING = 507024; // kernel unregistering | |||||
| static const int32_t ACL_ERROR_RT_RINGBUFFER_NOT_INIT = 507025; // ringbuffer not init | |||||
| static const int32_t ACL_ERROR_RT_RINGBUFFER_NO_DATA = 507026; // ringbuffer no data | |||||
| static const int32_t ACL_ERROR_RT_KERNEL_LOOKUP = 507027; // kernel lookup error | |||||
| static const int32_t ACL_ERROR_RT_KERNEL_DUPLICATE = 507028; // kernel register duplicate | |||||
| static const int32_t ACL_ERROR_RT_DEBUG_REGISTER_FAIL = 507029; // debug register failed | |||||
| static const int32_t ACL_ERROR_RT_DEBUG_UNREGISTER_FAIL = 507030; // debug unregister failed | |||||
| static const int32_t ACL_ERROR_RT_LABEL_CONTEXT = 507031; // label not in current context | |||||
| static const int32_t ACL_ERROR_RT_PROGRAM_USE_OUT = 507032; // program register num use out | |||||
| static const int32_t ACL_ERROR_RT_DEV_SETUP_ERROR = 507033; // device setup error | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_TIMEOUT = 507034; // vector core timeout | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_EXCEPTION = 507035; // vector core exception | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_TRAP_EXCEPTION = 507036; // vector core trap exception | |||||
| static const int32_t ACL_ERROR_RT_CDQ_BATCH_ABNORMAL = 507037; // cdq alloc batch abnormal | |||||
| static const int32_t ACL_ERROR_RT_DIE_MODE_CHANGE_ERROR = 507038; // can not change die mode | |||||
| static const int32_t ACL_ERROR_RT_DIE_SET_ERROR = 507039; // single die mode can not set die | |||||
| static const int32_t ACL_ERROR_RT_INVALID_DIEID = 507040; // invalid die id | |||||
| static const int32_t ACL_ERROR_RT_DIE_MODE_NOT_SET = 507041; // die mode not set | |||||
| static const int32_t ACL_ERROR_RT_AICORE_TRAP_READ_OVERFLOW = 507042; // aic trap read overflow | |||||
| static const int32_t ACL_ERROR_RT_AICORE_TRAP_WRITE_OVERFLOW = 507043; // aic trap write overflow | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_TRAP_READ_OVERFLOW = 507044; // aiv trap read overflow | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_TRAP_WRITE_OVERFLOW = 507045; // aiv trap write overflow | |||||
| static const int32_t ACL_ERROR_RT_DRV_INTERNAL_ERROR = 507899; // drv internal error | |||||
| static const int32_t ACL_ERROR_RT_AICPU_INTERNAL_ERROR = 507900; // aicpu internal error | |||||
| static const int32_t ACL_ERROR_RT_SOCKET_CLOSE = 507901; // hdc disconnect | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif // __INC_EXTERNEL_RT_ERROR_CODES_H__ | |||||
| @@ -0,0 +1,334 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_EXTERNAL_ACL_OPS_ACL_CBLAS_H_ | |||||
| #define INC_EXTERNAL_ACL_OPS_ACL_CBLAS_H_ | |||||
| #include "acl/acl.h" | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| typedef enum aclTransType { ACL_TRANS_N, ACL_TRANS_T, ACL_TRANS_NZ, ACL_TRANS_NZ_T } aclTransType; | |||||
| typedef enum aclComputeType { ACL_COMPUTE_HIGH_PRECISION, ACL_COMPUTE_LOW_PRECISION } aclComputeType; | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief perform the matrix-vector multiplication | |||||
| * | |||||
| * @param transA [IN] transpose type of matrix A | |||||
| * @param m [IN] number of rows of matrix A | |||||
| * @param n [IN] number of columns of matrix A | |||||
| * @param alpha [IN] pointer to scalar used for multiplication. | |||||
| * of same type as dataTypeC | |||||
| * @param a [IN] pointer to matrix A | |||||
| * @param lda [IN] leading dimension used to store the matrix A | |||||
| * @param dataTypeA [IN] datatype of matrix A | |||||
| * @param x [IN] pointer to vector x | |||||
| * @param incx [IN] stride between consecutive elements of vector x | |||||
| * @param dataTypeX [IN] datatype of vector x | |||||
| * @param beta [IN] pointer to scalar used for multiplication. | |||||
| * of same type as dataTypeC If beta == 0, | |||||
| * then y does not have to be a valid input | |||||
| * @param y [IN|OUT] pointer to vector y | |||||
| * @param incy [IN] stride between consecutive elements of vector y | |||||
| * @param dataTypeY [IN] datatype of vector y | |||||
| * @param type [IN] computation type | |||||
| * @param stream [IN] stream | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclblasGemvEx(aclTransType transA, int m, int n, const void *alpha, const void *a, int lda, | |||||
| aclDataType dataTypeA, const void *x, int incx, aclDataType dataTypeX, | |||||
| const void *beta, void *y, int incy, aclDataType dataTypeY, | |||||
| aclComputeType type, aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create a handle for performing the matrix-vector multiplication | |||||
| * | |||||
| * @param transA [IN] transpose type of matrix A | |||||
| * @param m [IN] number of rows of matrix A | |||||
| * @param n [IN] number of columns of matrix A | |||||
| * @param dataTypeA [IN] datatype of matrix A | |||||
| * @param dataTypeX [IN] datatype of vector x | |||||
| * @param dataTypeY [IN] datatype of vector y | |||||
| * @param type [IN] computation type | |||||
| * @param handle [OUT] pointer to the pointer to the handle | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclblasCreateHandleForGemvEx(aclTransType transA, int m, int n, aclDataType dataTypeA, | |||||
| aclDataType dataTypeX, aclDataType dataTypeY, | |||||
| aclComputeType type, aclopHandle **handle); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief perform the matrix-vector multiplication | |||||
| * | |||||
| * @param transA [IN] transpose type of matrix A | |||||
| * @param m [IN] number of rows of matrix A | |||||
| * @param n [IN] number of columns of matrix A | |||||
| * @param alpha [IN] pointer to scalar used for multiplication | |||||
| * @param a [IN] pointer to matrix A | |||||
| * @param lda [IN] leading dimension used to store the matrix A | |||||
| * @param x [IN] pointer to vector x | |||||
| * @param incx [IN] stride between consecutive elements of vector x | |||||
| * @param beta [IN] pointer to scalar used for multiplication. | |||||
| * If beta value == 0, | |||||
| * then y does not have to be a valid input | |||||
| * @param y [IN|OUT] pointer to vector y | |||||
| * @param incy [IN] stride between consecutive elements of vector y | |||||
| * @param type [IN] computation type | |||||
| * @param stream [IN] stream | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclblasHgemv(aclTransType transA, int m, int n, const aclFloat16 *alpha, | |||||
| const aclFloat16 *a, int lda, const aclFloat16 *x, int incx, | |||||
| const aclFloat16 *beta, aclFloat16 *y, int incy, aclComputeType type, | |||||
| aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create a handle for performing the matrix-vector multiplication | |||||
| * | |||||
| * @param transA [IN] transpose type of matrix A | |||||
| * @param m [IN] number of rows of matrix A | |||||
| * @param n [IN] number of columns of matrix A | |||||
| * @param type [IN] computation type | |||||
| * @param handle [OUT] pointer to the pointer to the handle | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclblasCreateHandleForHgemv(aclTransType transA, int m, int n, aclComputeType type, | |||||
| aclopHandle **handle); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief perform the matrix-vector multiplication | |||||
| * | |||||
| * @param transA [IN] transpose type of matrix A | |||||
| * @param m [IN] number of rows of matrix A | |||||
| * @param n [IN] number of columns of matrix A | |||||
| * @param alpha [IN] pointer to scalar used for multiplication | |||||
| * @param a [IN] pointer to matrix A | |||||
| * @param lda [IN] leading dimension used to store the matrix A | |||||
| * @param x [IN] pointer to vector x | |||||
| * @param incx [IN] stride between consecutive elements of vector x | |||||
| * @param beta [IN] pointer to scalar used for multiplication. | |||||
| * If beta value == 0, | |||||
| * then y does not have to be a valid input | |||||
| * @param y [IN|OUT] pointer to vector y | |||||
| * @param incy [IN] stride between consecutive elements of vector y | |||||
| * @param type [IN] computation type | |||||
| * @param stream [IN] stream | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclblasS8gemv(aclTransType transA, int m, int n, const int32_t *alpha, const int8_t *a, | |||||
| int lda, const int8_t *x, int incx, const int32_t *beta, int32_t *y, | |||||
| int incy, aclComputeType type, aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create a handle for performing the matrix-vector multiplication | |||||
| * | |||||
| * @param transA [IN] transpose type of matrix A | |||||
| * @param m [IN] number of rows of matrix A | |||||
| * @param n [IN] number of columns of matrix A | |||||
| * @param handle [OUT] pointer to the pointer to the handle | |||||
| * @param type [IN] computation type | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclblasCreateHandleForS8gemv(aclTransType transA, int m, int n, aclComputeType type, | |||||
| aclopHandle **handle); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief perform the matrix-matrix multiplication | |||||
| * | |||||
| * @param transA [IN] transpose type of matrix A | |||||
| * @param transB [IN] transpose type of matrix B | |||||
| * @param transC [IN] transpose type of matrix C | |||||
| * @param m [IN] number of rows of matrix A and matrix C | |||||
| * @param n [IN] number of columns of matrix B and matrix C | |||||
| * @param k [IN] number of columns of matrix A and rows of matrix B | |||||
| * @param alpha [IN] pointer to scalar used for multiplication. of same type as dataTypeC | |||||
| * @param matrixA [IN] pointer to matrix A | |||||
| * @param lda [IN] leading dimension array used to store matrix A | |||||
| * @param dataTypeA [IN] datatype of matrix A | |||||
| * @param matrixB [IN] pointer to matrix B | |||||
| * @param ldb [IN] leading dimension array used to store matrix B | |||||
| * @param dataTypeB [IN] datatype of matrix B | |||||
| * @param beta [IN] pointer to scalar used for multiplication. | |||||
| * of same type as dataTypeC If beta == 0, | |||||
| * then matrixC does not have to be a valid input | |||||
| * @param matrixC [IN|OUT] pointer to matrix C | |||||
| * @param ldc [IN] leading dimension array used to store matrix C | |||||
| * @param dataTypeC [IN] datatype of matrix C | |||||
| * @param type [IN] computation type | |||||
| * @param stream [IN] stream | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclblasGemmEx(aclTransType transA, aclTransType transB, aclTransType transC, int m, int n, | |||||
| int k, const void *alpha, const void *matrixA, int lda, | |||||
| aclDataType dataTypeA, const void *matrixB, int ldb, aclDataType dataTypeB, | |||||
| const void *beta, void *matrixC, int ldc, aclDataType dataTypeC, | |||||
| aclComputeType type, aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create a handle for performing the matrix-matrix multiplication | |||||
| * | |||||
| * @param transA [IN] transpose type of matrix A | |||||
| * @param transB [IN] transpose type of matrix B | |||||
| * @param transC [IN] transpose type of matrix C | |||||
| * @param m [IN] number of rows of matrix A and matrix C | |||||
| * @param n [IN] number of columns of matrix B and matrix C | |||||
| * @param k [IN] number of columns of matrix A and rows of matrix B | |||||
| * @param dataTypeA [IN] datatype of matrix A | |||||
| * @param dataTypeB [IN] datatype of matrix B | |||||
| * @param dataTypeC [IN] datatype of matrix C | |||||
| * @param type [IN] computation type | |||||
| * @param handle [OUT] pointer to the pointer to the handle | |||||
| * @param type [IN] computation type | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclblasCreateHandleForGemmEx(aclTransType transA, aclTransType transB, aclTransType transC, | |||||
| int m, int n, int k, aclDataType dataTypeA, | |||||
| aclDataType dataTypeB, aclDataType dataTypeC, | |||||
| aclComputeType type, aclopHandle **handle); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief perform the matrix-matrix multiplication | |||||
| * | |||||
| * @param transA [IN] transpose type of matrix A | |||||
| * @param transB [IN] transpose type of matrix B | |||||
| * @param transC [IN] transpose type of matrix C | |||||
| * @param m [IN] number of rows of matrix A and matrix C | |||||
| * @param n [IN] number of columns of matrix B and matrix C | |||||
| * @param k [IN] number of columns of matrix A and rows of matrix B | |||||
| * @param alpha [IN] pointer to scalar used for multiplication | |||||
| * @param matrixA [IN] pointer to matrix A | |||||
| * @param lda [IN] leading dimension used to store the matrix A | |||||
| * @param matrixB [IN] pointer to matrix B | |||||
| * @param ldb [IN] leading dimension used to store the matrix B | |||||
| * @param beta [IN] pointer to scalar used for multiplication. | |||||
| * If beta value == 0, | |||||
| * then matrixC does not have to be a valid input | |||||
| * @param matrixC [IN|OUT] pointer to matrix C | |||||
| * @param ldc [IN] leading dimension used to store the matrix C | |||||
| * @param type [IN] computation type | |||||
| * @param stream [IN] stream | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclblasHgemm(aclTransType transA, aclTransType transB, aclTransType transC, int m, int n, | |||||
| int k, const aclFloat16 *alpha, const aclFloat16 *matrixA, int lda, | |||||
| const aclFloat16 *matrixB, int ldb, const aclFloat16 *beta, | |||||
| aclFloat16 *matrixC, int ldc, aclComputeType type, aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create a handle for performing the matrix-matrix multiplication | |||||
| * | |||||
| * @param transA [IN] transpose type of matrix A | |||||
| * @param transB [IN] transpose type of matrix B | |||||
| * @param transC [IN] transpose type of matrix C | |||||
| * @param m [IN] number of rows of matrix A and matrix C | |||||
| * @param n [IN] number of columns of matrix B and matrix C | |||||
| * @param k [IN] number of columns of matrix A and rows of matrix B | |||||
| * @param type [IN] computation type | |||||
| * @param handle [OUT] pointer to the pointer to the handle | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclblasCreateHandleForHgemm(aclTransType transA, aclTransType transB, aclTransType transC, | |||||
| int m, int n, int k, aclComputeType type, | |||||
| aclopHandle **handle); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief perform the matrix-matrix multiplication | |||||
| * | |||||
| * @param transA [IN] transpose type of matrix A | |||||
| * @param transB [IN] transpose type of matrix B | |||||
| * @param transC [IN] transpose type of matrix C | |||||
| * @param m [IN] number of rows of matrix A and matrix C | |||||
| * @param n [IN] number of columns of matrix B and matrix C | |||||
| * @param k [IN] number of columns of matrix A and rows of matrix B | |||||
| * @param alpha [IN] pointer to scalar used for multiplication | |||||
| * @param matrixA [IN] pointer to matrix A | |||||
| * @param lda [IN] leading dimension used to store the matrix A | |||||
| * @param matrixB [IN] pointer to matrix B | |||||
| * @param ldb [IN] leading dimension used to store the matrix B | |||||
| * @param beta [IN] pointer to scalar used for multiplication. | |||||
| * If beta value == 0, | |||||
| * then matrixC does not have to be a valid input | |||||
| * @param matrixC [IN|OUT] pointer to matrix C | |||||
| * @param ldc [IN] leading dimension used to store the matrix C | |||||
| * @param type [IN] computation type | |||||
| * @param stream [IN] stream | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclblasS8gemm(aclTransType transA, aclTransType transB, aclTransType transC, int m, int n, | |||||
| int k, const int32_t *alpha, const int8_t *matrixA, int lda, | |||||
| const int8_t *matrixB, int ldb, const int32_t *beta, int32_t *matrixC, | |||||
| int ldc, aclComputeType type, aclrtStream stream); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief create a handle for performing the matrix-matrix multiplication | |||||
| * | |||||
| * @param transA [IN] transpose type of matrix A | |||||
| * @param transB [IN] transpose type of matrix B | |||||
| * @param transC [IN] transpose type of matrix C | |||||
| * @param m [IN] number of rows of matrix A and matrix C | |||||
| * @param n [IN] number of columns of matrix B and matrix C | |||||
| * @param k [IN] number of columns of matrix A and rows of matrix B | |||||
| * @param type [IN] computation type | |||||
| * @param handle [OUT] pointer to the pointer to the handle | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclblasCreateHandleForS8gemm(aclTransType transA, aclTransType transB, aclTransType transC, | |||||
| int m, int n, int k, aclComputeType type, | |||||
| aclopHandle **handle); | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif // INC_EXTERNAL_ACL_OPS_ACL_CBLAS_H_ | |||||
| @@ -0,0 +1,348 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_EXTERNAL_ACL_OPS_ACL_RETR_H_ | |||||
| #define INC_EXTERNAL_ACL_OPS_ACL_RETR_H_ | |||||
| #include "acl/acl.h" | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| typedef struct aclfvInitPara aclfvInitPara; | |||||
| typedef struct aclfvFeatureInfo aclfvFeatureInfo; | |||||
| typedef struct aclfvRepoRange aclfvRepoRange; | |||||
| typedef struct aclfvQueryTable aclfvQueryTable; | |||||
| typedef struct aclfvSearchInput aclfvSearchInput; | |||||
| typedef struct aclfvSearchResult aclfvSearchResult; | |||||
| // search operation type | |||||
| enum aclfvSearchType { | |||||
| SEARCH_1_N, // 1:N operation type | |||||
| SEARCH_N_M // N:M operation type | |||||
| }; | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create fv init param. | |||||
| * | |||||
| * @param fsNum [IN] The feature num | |||||
| * | |||||
| * @retval null for failed. | |||||
| * @retval OtherValues success. | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclfvInitPara *aclfvCreateInitPara(uint64_t fsNum); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy fv init param. | |||||
| * | |||||
| * @par Function | |||||
| * Can only destroy fv init param information created | |||||
| * through aclfvCreateInitPara interface. | |||||
| * | |||||
| * @param initPara [IN] fv init param. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclfvCreateInitPara | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvDestroyInitPara(aclfvInitPara *initPara); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set value for maxTopNumFor1N which in fv init param. | |||||
| * | |||||
| * @param initPara [IN|OUT] fv init param. | |||||
| * @param maxTopNumFor1N [IN] maxTopNumFor1N value for init param. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvSet1NTopNum(aclfvInitPara *initPara, uint32_t maxTopNumFor1N); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief set value for maxTopNumForNM which in fv init param. | |||||
| * | |||||
| * @param initPara [IN|OUT] fv init param. | |||||
| * @param maxTopNumForNM [IN] maxTopNumForNM value for init param. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvSetNMTopNum(aclfvInitPara *initPara, uint32_t maxTopNumForNM); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create fv feature info. | |||||
| * | |||||
| * @param id0 [IN] The first level library id0 | |||||
| * @param id1 [IN] Secondary library id1 | |||||
| * @param offset [IN] The offset of the first feature in the library | |||||
| * @param featureLen [IN] Single feature length | |||||
| * @param featureCount [IN] Single feature count | |||||
| * @param featureData [IN] Feature value list | |||||
| * @param featureDataLen [IN] Feature value list length | |||||
| * | |||||
| * @retval null for failed. | |||||
| * @retval OtherValues success. | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclfvFeatureInfo *aclfvCreateFeatureInfo(uint32_t id0, uint32_t id1, uint32_t offset, | |||||
| uint32_t featureLen, uint32_t featureCount, | |||||
| uint8_t *featureData, uint32_t featureDataLen); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy fv feature info. | |||||
| * | |||||
| * @par Function | |||||
| * Can only destroy fv feature info information created | |||||
| * through aclfvCreateFeatureInfo interface. | |||||
| * | |||||
| * @param featureInfo [IN] fv feature info. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclfvCreateFeatureInfo | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvDestroyFeatureInfo(aclfvFeatureInfo *featureInfo); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create fv repo range. | |||||
| * | |||||
| * @param id0Min [IN] id0 start value | |||||
| * @param id0Min [IN] id0 max | |||||
| * @param id1Min [IN] id0 start value | |||||
| * @param id1Max [IN] id1 max | |||||
| * | |||||
| * @retval null for failed. OtherValues success | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclfvRepoRange *aclfvCreateRepoRange(uint32_t id0Min, uint32_t id0Max, uint32_t id1Min, | |||||
| uint32_t id1Max); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy fv repo range. | |||||
| * | |||||
| * @par Function | |||||
| * Can only destroy fv repo range information created | |||||
| * through aclfvCreateRepoRange interface. | |||||
| * | |||||
| * @param repoRange [IN] fv repo range. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclfvCreateRepoRange | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvDestroyRepoRange(aclfvRepoRange *repoRange); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create query table. | |||||
| * | |||||
| * @param queryCnt [IN] Number of tables, the maximum number is 6 | |||||
| * @param tableLen [IN] Single table length, table length is 32KB | |||||
| * @param tableData [IN] Feature value list | |||||
| * @param tableDataLen [IN] The length of memory requested by the featureData pointer | |||||
| * | |||||
| * @retval null for failed. OtherValues success | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclfvQueryTable *aclfvCreateQueryTable(uint32_t queryCnt, uint32_t tableLen, uint8_t *tableData, | |||||
| uint32_t tableDataLen); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy query table. | |||||
| * | |||||
| * @par Function | |||||
| * Can only destroy query table information created | |||||
| * through aclfvCreateQueryTable interface. | |||||
| * | |||||
| * @param queryTable [IN] query table. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclfvCreateQueryTable | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvDestroyQueryTable(aclfvQueryTable *queryTable); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create search input. | |||||
| * | |||||
| * @param queryTable [IN] query table | |||||
| * @param repoRange [IN] query repo range | |||||
| * @param topk [IN] query topk | |||||
| * | |||||
| * @retval null for failed. OtherValues success | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclfvSearchInput *aclfvCreateSearchInput(aclfvQueryTable *queryTable, aclfvRepoRange *repoRange, | |||||
| uint32_t topk); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy search input. | |||||
| * | |||||
| * @par Function | |||||
| * Can only destroy search input information created | |||||
| * through aclfvCreateSearchInput interface. | |||||
| * | |||||
| * @param searchInput [IN] search input. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclfvCreateSearchInput | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvDestroySearchInput(aclfvSearchInput *searchInput); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Create search result. | |||||
| * | |||||
| * @param queryCnt [IN] Retrieve the number of features | |||||
| * @param resultNum [IN] The number of search results for each feature, the number is queryCnt | |||||
| * @param resultNumDataLen [IN] resultNum memory length | |||||
| * @param id0 [IN] Level 1 library id0 | |||||
| * @param id1 [IN] Secondary library id1 | |||||
| * @param resultOffset [IN] The offset of the bottom library corresponding | |||||
| * to each feature retrieval result, total length topK * queryCnt | |||||
| * @param resultDistance [IN] Distance, total length topK * queryCnt | |||||
| * @param dataLen [IN] The memory size requested by | |||||
| * id0\id1\reslutOffset\resultDistance | |||||
| * | |||||
| * @retval null for failed. OtherValues success | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclfvSearchResult *aclfvCreateSearchResult(uint32_t queryCnt, uint32_t *resultNum, | |||||
| uint32_t resultNumDataLen, uint32_t *id0, uint32_t *id1, | |||||
| uint32_t *resultOffset, float *resultDistance, | |||||
| uint32_t dataLen); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief Destroy search result. | |||||
| * | |||||
| * @par Function | |||||
| * Can only destroy search result information created | |||||
| * through aclfvCreateSearchResult interface. | |||||
| * | |||||
| * @param searchResult [IN] search result. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure | |||||
| * | |||||
| * @see aclfvCreateSearchResult | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvDestroySearchResult(aclfvSearchResult *searchResult); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief fv IP initialize. | |||||
| * | |||||
| * @param initPara [IN] fv init param. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure. | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvInit(aclfvInitPara *initPara); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief release fv resources. | |||||
| * | |||||
| * @par Function | |||||
| * Can only release fv resources created | |||||
| * through aclfvInit interface. | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure. | |||||
| * | |||||
| * @see aclfvInit | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvRelease(); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief fv repo add. | |||||
| * | |||||
| * @param type [IN] repo add type | |||||
| * @param featureInfo [IN] add feature information | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure. | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvRepoAdd(aclfvSearchType type, aclfvFeatureInfo *featureInfo); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief fv repo del. | |||||
| * | |||||
| * @param type [IN] repo delete type | |||||
| * @param repoRange [IN] repo range information | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure. | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvRepoDel(aclfvSearchType type, aclfvRepoRange *repoRange); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief fv accurate del. | |||||
| * | |||||
| * @param featureInfo [IN] accurate delete feature information | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure. | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvDel(aclfvFeatureInfo *featureInfo); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief fv accurate modify. | |||||
| * | |||||
| * @param featureInfo [IN] accurate modify feature information | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure. | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvModify(aclfvFeatureInfo *featureInfo); | |||||
| /** | |||||
| * @ingroup AscendCL | |||||
| * @brief fv search. | |||||
| * | |||||
| * @param type [IN] search type | |||||
| * @param searchInput [IN] search input | |||||
| * @param searchRst [OUT] search result | |||||
| * | |||||
| * @retval ACL_SUCCESS The function is successfully executed. | |||||
| * @retval OtherValues Failure. | |||||
| */ | |||||
| ACL_FUNC_VISIBILITY aclError aclfvSearch(aclfvSearchType type, aclfvSearchInput *searchInput, | |||||
| aclfvSearchResult *searchRst); | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif // INC_EXTERNAL_ACL_OPS_ACL_RETR_H_ | |||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -57,22 +57,22 @@ class GE_FUNC_VISIBILITY Session { | |||||
| /// | /// | ||||
| /// @ingroup client | /// @ingroup client | ||||
| /// @brief add a graph with a specific graphId | |||||
| /// @param [in] graphId graph id | |||||
| /// @brief add a graph with a specific graph id | |||||
| /// @param [in] graph_id graph id | |||||
| /// @return Status result of function | /// @return Status result of function | ||||
| /// | /// | ||||
| Status AddGraph(uint32_t graphId, const Graph &graph); | |||||
| Status AddGraph(uint32_t graph_id, const Graph &graph); | |||||
| /// | /// | ||||
| /// @ingroup client | /// @ingroup client | ||||
| /// @brief add a graph with a specific graphId and graphOptions | |||||
| /// @brief add a graph with a specific graph id and graphOptions | |||||
| /// @param [in] graphId graph id | /// @param [in] graphId graph id | ||||
| /// @param [in] graph the graph | /// @param [in] graph the graph | ||||
| /// @param [in] options graph options | /// @param [in] options graph options | ||||
| /// @return Status result of function | /// @return Status result of function | ||||
| /// | /// | ||||
| ATTRIBUTED_DEPRECATED(Status AddGraph(uint32_t, const Graph &, const std::map<AscendString, AscendString> &)) | ATTRIBUTED_DEPRECATED(Status AddGraph(uint32_t, const Graph &, const std::map<AscendString, AscendString> &)) | ||||
| Status AddGraph(uint32_t graphId, const Graph &graph, const std::map<std::string, std::string> &options); | |||||
| Status AddGraph(uint32_t graph_id, const Graph &graph, const std::map<std::string, std::string> &options); | |||||
| /// | /// | ||||
| /// @ingroup client | /// @ingroup client | ||||
| @@ -82,7 +82,7 @@ class GE_FUNC_VISIBILITY Session { | |||||
| /// @param [in] options graph options | /// @param [in] options graph options | ||||
| /// @return Status result of function | /// @return Status result of function | ||||
| /// | /// | ||||
| Status AddGraph(uint32_t graphId, const Graph &graph, const std::map<AscendString, AscendString> &options); | |||||
| Status AddGraph(uint32_t graph_id, const Graph &graph, const std::map<AscendString, AscendString> &options); | |||||
| /// | /// | ||||
| /// @ingroup client | /// @ingroup client | ||||
| @@ -106,10 +106,10 @@ class GE_FUNC_VISIBILITY Session { | |||||
| /// | /// | ||||
| /// @ingroup ge_graph | /// @ingroup ge_graph | ||||
| /// @brief remove a graph of the session with specific session id | /// @brief remove a graph of the session with specific session id | ||||
| /// @param [in] graphId graph id | |||||
| /// @param [in] graph_d graph id | |||||
| /// @return Status result of function | /// @return Status result of function | ||||
| /// | /// | ||||
| Status RemoveGraph(uint32_t graphId); | |||||
| Status RemoveGraph(uint32_t graph_id); | |||||
| /// | /// | ||||
| /// @ingroup ge_graph | /// @ingroup ge_graph | ||||
| @@ -119,7 +119,7 @@ class GE_FUNC_VISIBILITY Session { | |||||
| /// @param [out] outputs output data | /// @param [out] outputs output data | ||||
| /// @return Status result of function | /// @return Status result of function | ||||
| /// | /// | ||||
| Status RunGraph(uint32_t graphId, const std::vector<Tensor> &inputs, std::vector<Tensor> &outputs); | |||||
| Status RunGraph(uint32_t graph_id, const std::vector<Tensor> &inputs, std::vector<Tensor> &outputs); | |||||
| /// | /// | ||||
| /// @ingroup ge_graph | /// @ingroup ge_graph | ||||
| @@ -140,9 +140,9 @@ class GE_FUNC_VISIBILITY Session { | |||||
| /// @param [in] inputs: input data | /// @param [in] inputs: input data | ||||
| /// @return Status result of function | /// @return Status result of function | ||||
| /// | /// | ||||
| Status BuildGraph(uint32_t graphId, const std::vector<InputTensorInfo> &inputs); | |||||
| Status BuildGraph(uint32_t graph_id, const std::vector<InputTensorInfo> &inputs); | |||||
| Status BuildGraph(uint32_t graphId, const std::vector<ge::Tensor> &inputs); /*lint !e148*/ | |||||
| Status BuildGraph(uint32_t graph_id, const std::vector<ge::Tensor> &inputs); /*lint !e148*/ | |||||
| /// | /// | ||||
| /// @ingroup ge_graph | /// @ingroup ge_graph | ||||
| @@ -154,7 +154,7 @@ class GE_FUNC_VISIBILITY Session { | |||||
| /// Please ensure that the implementation of the function is trusted. | /// Please ensure that the implementation of the function is trusted. | ||||
| /// @return Status result of function | /// @return Status result of function | ||||
| /// | /// | ||||
| Status RunGraphAsync(uint32_t graphId, const std::vector<ge::Tensor> &inputs, RunAsyncCallback callback); | |||||
| Status RunGraphAsync(uint32_t graph_id, const std::vector<ge::Tensor> &inputs, RunAsyncCallback callback); | |||||
| /// | /// | ||||
| /// @ingroup ge_graph | /// @ingroup ge_graph | ||||
| @@ -189,7 +189,7 @@ class GE_FUNC_VISIBILITY Session { | |||||
| Status RegisterCallBackFunc(const char *key, const session::pCallBackFunc &callback); | Status RegisterCallBackFunc(const char *key, const session::pCallBackFunc &callback); | ||||
| bool IsGraphNeedRebuild(uint32_t graphId); | |||||
| bool IsGraphNeedRebuild(uint32_t graph_id); | |||||
| private: | private: | ||||
| uint64_t sessionId_; | uint64_t sessionId_; | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -20,14 +20,27 @@ | |||||
| #include <map> | #include <map> | ||||
| #include <string> | #include <string> | ||||
| #include "ge_error_codes.h" | #include "ge_error_codes.h" | ||||
| #include "ge_api_types.h" | |||||
| namespace ge { | |||||
| #ifdef __GNUC__ | #ifdef __GNUC__ | ||||
| #define ATTRIBUTED_DEPRECATED(replacement) __attribute__((deprecated("Please use " #replacement " instead."))) | #define ATTRIBUTED_DEPRECATED(replacement) __attribute__((deprecated("Please use " #replacement " instead."))) | ||||
| #else | #else | ||||
| #define ATTRIBUTED_DEPRECATED(replacement) __declspec(deprecated("Please use " #replacement " instead.")) | #define ATTRIBUTED_DEPRECATED(replacement) __declspec(deprecated("Please use " #replacement " instead.")) | ||||
| #endif | #endif | ||||
| // Code compose(4 byte), runtime: 2 bit, type: 2 bit, level: 3 bit, sysid: 8 bit, modid: 5 bit, value: 12 bit | |||||
| #define GE_ERRORNO(runtime, type, level, sysid, modid, name, value, desc) \ | |||||
| constexpr ge::Status name = (static_cast<uint32_t>(0xFFU & (static_cast<uint32_t>(runtime))) << 30U) | \ | |||||
| (static_cast<uint32_t>(0xFFU & (static_cast<uint32_t>(type))) << 28U) | \ | |||||
| (static_cast<uint32_t>(0xFFU & (static_cast<uint32_t>(level))) << 25U) | \ | |||||
| (static_cast<uint32_t>(0xFFU & (static_cast<uint32_t>(sysid))) << 17U) | \ | |||||
| (static_cast<uint32_t>(0xFFU & (static_cast<uint32_t>(modid))) << 12U) | \ | |||||
| (static_cast<uint32_t>(0x0FFFU) & (static_cast<uint32_t>(value))); \ | |||||
| const ErrorNoRegisterar g_errorno_##name((name), (desc)); | |||||
| #define GE_ERRORNO_EXTERNAL(name, desc) const ErrorNoRegisterar g_errorno_##name((name), (desc)); | |||||
| namespace ge { | |||||
| class GE_FUNC_VISIBILITY StatusFactory { | class GE_FUNC_VISIBILITY StatusFactory { | ||||
| public: | public: | ||||
| static StatusFactory *Instance() { | static StatusFactory *Instance() { | ||||
| @@ -35,7 +48,7 @@ class GE_FUNC_VISIBILITY StatusFactory { | |||||
| return &instance; | return &instance; | ||||
| } | } | ||||
| void RegisterErrorNo(uint32_t err, const std::string &desc) { | |||||
| void RegisterErrorNo(const uint32_t err, const std::string &desc) { | |||||
| // Avoid repeated addition | // Avoid repeated addition | ||||
| if (err_desc_.find(err) != err_desc_.end()) { | if (err_desc_.find(err) != err_desc_.end()) { | ||||
| return; | return; | ||||
| @@ -43,19 +56,19 @@ class GE_FUNC_VISIBILITY StatusFactory { | |||||
| err_desc_[err] = desc; | err_desc_[err] = desc; | ||||
| } | } | ||||
| void RegisterErrorNo(uint32_t err, const char *desc) { | |||||
| void RegisterErrorNo(const uint32_t err, const char *const desc) { | |||||
| if (desc == nullptr) { | if (desc == nullptr) { | ||||
| return; | return; | ||||
| } | } | ||||
| std::string error_desc = desc; | |||||
| const std::string error_desc = desc; | |||||
| if (err_desc_.find(err) != err_desc_.end()) { | if (err_desc_.find(err) != err_desc_.end()) { | ||||
| return; | return; | ||||
| } | } | ||||
| err_desc_[err] = error_desc; | err_desc_[err] = error_desc; | ||||
| } | } | ||||
| std::string GetErrDesc(uint32_t err) { | |||||
| auto iter_find = err_desc_.find(err); | |||||
| std::string GetErrDesc(const uint32_t err) { | |||||
| const std::map<uint32_t, std::string>::const_iterator iter_find = err_desc_.find(err); | |||||
| if (iter_find == err_desc_.end()) { | if (iter_find == err_desc_.end()) { | ||||
| return ""; | return ""; | ||||
| } | } | ||||
| @@ -72,61 +85,18 @@ class GE_FUNC_VISIBILITY StatusFactory { | |||||
| class GE_FUNC_VISIBILITY ErrorNoRegisterar { | class GE_FUNC_VISIBILITY ErrorNoRegisterar { | ||||
| public: | public: | ||||
| ErrorNoRegisterar(uint32_t err, const std::string &desc) { StatusFactory::Instance()->RegisterErrorNo(err, desc); } | |||||
| ErrorNoRegisterar(uint32_t err, const char *desc) { StatusFactory::Instance()->RegisterErrorNo(err, desc); } | |||||
| ErrorNoRegisterar(const uint32_t err, const std::string &desc) noexcept { | |||||
| StatusFactory::Instance()->RegisterErrorNo(err, desc); | |||||
| } | |||||
| ErrorNoRegisterar(const uint32_t err, const char *const desc) noexcept { | |||||
| StatusFactory::Instance()->RegisterErrorNo(err, desc); | |||||
| } | |||||
| ~ErrorNoRegisterar() {} | ~ErrorNoRegisterar() {} | ||||
| }; | }; | ||||
| // Code compose(4 byte), runtime: 2 bit, type: 2 bit, level: 3 bit, sysid: 8 bit, modid: 5 bit, value: 12 bit | |||||
| #define GE_ERRORNO(runtime, type, level, sysid, modid, name, value, desc) \ | |||||
| constexpr ge::Status name = \ | |||||
| ((0xFF & (static_cast<uint8_t>(runtime))) << 30) | ((0xFF & (static_cast<uint8_t>(type))) << 28) | \ | |||||
| ((0xFF & (static_cast<uint8_t>(level))) << 25) | ((0xFF & (static_cast<uint8_t>(sysid))) << 17) | \ | |||||
| ((0xFF & (static_cast<uint8_t>(modid))) << 12) | (0x0FFF & (static_cast<uint16_t>(value))); \ | |||||
| const ErrorNoRegisterar g_##name##_errorno(name, desc); | |||||
| #define GE_ERRORNO_EXTERNAL(name, desc) const ErrorNoRegisterar g_##name##_errorno(name, desc); | |||||
| using Status = uint32_t; | |||||
| // General error code | // General error code | ||||
| GE_ERRORNO(0, 0, 0, 0, 0, SUCCESS, 0, "success"); | GE_ERRORNO(0, 0, 0, 0, 0, SUCCESS, 0, "success"); | ||||
| GE_ERRORNO(0b11, 0b11, 0b111, 0xFF, 0b11111, FAILED, 0xFFF, "failed"); /*lint !e401*/ | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_PARAM_INVALID, "Parameter invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_EXEC_NOT_INIT, "GE executor not initialized yet."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_EXEC_MODEL_PATH_INVALID, "Model file path invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_EXEC_MODEL_ID_INVALID, "Model id invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_EXEC_MODEL_DATA_SIZE_INVALID, "Data size of model invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_EXEC_MODEL_ADDR_INVALID, "Model addr invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_EXEC_MODEL_QUEUE_ID_INVALID, "Queue id of model invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_EXEC_LOAD_MODEL_REPEATED, "The model loaded repeatedly."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_DYNAMIC_INPUT_ADDR_INVALID, "Dynamic input addr invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_DYNAMIC_INPUT_LENGTH_INVALID, "Dynamic input size invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_DYNAMIC_BATCH_SIZE_INVALID, "Dynamic batch size invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_AIPP_BATCH_EMPTY, "AIPP batch parameter empty."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_AIPP_NOT_EXIST, "AIPP parameter not exist."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_AIPP_MODE_INVALID, "AIPP mode invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_OP_TASK_TYPE_INVALID, "Task type invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_OP_KERNEL_TYPE_INVALID, "Kernel type invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_PLGMGR_PATH_INVALID, "Plugin path is invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_FORMAT_INVALID, "Format is invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_SHAPE_INVALID, "Shape is invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_DATATYPE_INVALID, "Datatype is invalid."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_MEMORY_ALLOCATION, "Memory allocation error."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate memory."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_INTERNAL_ERROR, "Internal error."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_LOAD_MODEL, "Load model error."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_EXEC_LOAD_MODEL_PARTITION_FAILED, "Failed to load model partition."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_EXEC_LOAD_WEIGHT_PARTITION_FAILED, "Failed to load weight partition."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_EXEC_LOAD_TASK_PARTITION_FAILED, "Failed to load task partition."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_EXEC_LOAD_KERNEL_PARTITION_FAILED, "Failed to load op kernel partition."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_EXEC_RELEASE_MODEL_DATA, "Failed to release the model data."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_COMMAND_HANDLE, "Command handle error."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_GET_TENSOR_INFO, "Get tensor info error."); | |||||
| GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_UNLOAD_MODEL, "Load model error."); | |||||
| GE_ERRORNO(0b11, 0b11, 0b111, 0xFFU, 0b11111, FAILED, 0xFFFU, "failed"); /*lint !e401*/ | |||||
| } // namespace ge | } // namespace ge | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -24,96 +24,111 @@ | |||||
| #include <functional> | #include <functional> | ||||
| #include <memory> | #include <memory> | ||||
| #include "graph/tensor.h" | #include "graph/tensor.h" | ||||
| #include "graph/types.h" | |||||
| namespace ge { | namespace ge { | ||||
| // Option key: graph run mode | // Option key: graph run mode | ||||
| const char *const OPTION_GRAPH_RUN_MODE = "ge.graphRunMode"; | |||||
| const char_t *const OPTION_GRAPH_RUN_MODE = "ge.graphRunMode"; | |||||
| const char_t *const OPTION_DEVICE_TYPE = "ge.deviceType"; | |||||
| // Option key: ome init | // Option key: ome init | ||||
| const char *const OPTION_EXEC_SESSION_ID = "ge.exec.sessionId"; | |||||
| const char *const OPTION_EXEC_DEVICE_ID = "ge.exec.deviceId"; | |||||
| const char *const OPTION_EXEC_JOB_ID = "ge.exec.jobId"; | |||||
| const char *const OPTION_EXEC_IS_USEHCOM = "ge.exec.isUseHcom"; | |||||
| const char *const OPTION_EXEC_IS_USEHVD = "ge.exec.isUseHvd"; | |||||
| const char *const OPTION_EXEC_RANK_ID = "ge.exec.rankId"; | |||||
| const char *const OPTION_EXEC_POD_NAME = "ge.exec.podName"; | |||||
| const char *const OPTION_EXEC_DEPLOY_MODE = "ge.exec.deployMode"; | |||||
| const char *const OPTION_EXEC_RANK_TABLE_FILE = "ge.exec.rankTableFile"; | |||||
| const char *const GE_AICPU_FLAG = "ge.aicpuFlag"; | |||||
| const char *const OPTION_EXEC_EXTERN_PLUGIN_PATH = "ge.soLoadPath"; | |||||
| const char_t *const OPTION_EXEC_SESSION_ID = "ge.exec.sessionId"; | |||||
| const char_t *const OPTION_EXEC_DEVICE_ID = "ge.exec.deviceId"; | |||||
| const char_t *const OPTION_EXEC_JOB_ID = "ge.exec.jobId"; | |||||
| const char_t *const OPTION_EXEC_IS_USEHCOM = "ge.exec.isUseHcom"; | |||||
| const char_t *const OPTION_EXEC_IS_USEHVD = "ge.exec.isUseHvd"; | |||||
| const char_t *const OPTION_EXEC_RANK_ID = "ge.exec.rankId"; | |||||
| const char_t *const OPTION_EXEC_POD_NAME = "ge.exec.podName"; | |||||
| const char_t *const OPTION_EXEC_DEPLOY_MODE = "ge.exec.deployMode"; | |||||
| const char_t *const OPTION_EXEC_RANK_TABLE_FILE = "ge.exec.rankTableFile"; | |||||
| const char_t *const GE_AICPU_FLAG = "ge.aicpuFlag"; | |||||
| const char_t *const OPTION_EXEC_EXTERN_PLUGIN_PATH = "ge.soLoadPath"; | |||||
| // Dump flag and para | // Dump flag and para | ||||
| const char *const OPTION_EXEC_ENABLE_DUMP = "ge.exec.enableDump"; | |||||
| const char *const OPTION_EXEC_DUMP_PATH = "ge.exec.dumpPath"; | |||||
| const char *const OPTION_EXEC_DUMP_STEP = "ge.exec.dumpStep"; | |||||
| const char *const OPTION_EXEC_DUMP_MODE = "ge.exec.dumpMode"; | |||||
| const char *const OPTION_EXEC_ENABLE_DUMP_DEBUG = "ge.exec.enableDumpDebug"; | |||||
| const char *const OPTION_EXEC_DUMP_DEBUG_MODE = "ge.exec.dumpDebugMode"; | |||||
| const char *const OPTION_EXEC_ENABLE_INCRE_BUILD = "ge.exec.enableIncreBuild"; | |||||
| const char *const OPTION_EXEC_INCRE_BUILD_CACHE_PATH = "ge.exec.increBuildCachePath"; | |||||
| const char *const OPTION_EXEC_ENABLE_EXCEPTION_DUMP = "ge.exec.enable_exception_dump"; | |||||
| const char *const OPTION_EXEC_ENABLE_SCOPE_FUSION_PASSES = "ge.exec.enableScopeFusionPasses"; | |||||
| const char *const OPTION_EXEC_PROFILING_FPPONIT_OPTIONS = "ge.exec.profilingFpPointOptions"; | |||||
| const char *const OPTION_EXEC_PROFILING_BPPONIT_OPTIONS = "ge.exec.profilingBpPointOptions"; | |||||
| const char_t *const OPTION_EXEC_ENABLE_DUMP = "ge.exec.enableDump"; | |||||
| const char_t *const OPTION_EXEC_DUMP_PATH = "ge.exec.dumpPath"; | |||||
| const char_t *const OPTION_EXEC_DUMP_STEP = "ge.exec.dumpStep"; | |||||
| const char_t *const OPTION_EXEC_DUMP_MODE = "ge.exec.dumpMode"; | |||||
| const char_t *const OPTION_EXEC_ENABLE_DUMP_DEBUG = "ge.exec.enableDumpDebug"; | |||||
| const char_t *const OPTION_EXEC_DUMP_DEBUG_MODE = "ge.exec.dumpDebugMode"; | |||||
| const char_t *const OPTION_EXEC_ENABLE_INCRE_BUILD = "ge.exec.enableIncreBuild"; | |||||
| const char_t *const OPTION_EXEC_INCRE_BUILD_CACHE_PATH = "ge.exec.increBuildCachePath"; | |||||
| const char_t *const OPTION_EXEC_ENABLE_EXCEPTION_DUMP = "ge.exec.enable_exception_dump"; | |||||
| const char_t *const OPTION_EXEC_ENABLE_SCOPE_FUSION_PASSES = "ge.exec.enableScopeFusionPasses"; | |||||
| const char_t *const OPTION_EXEC_PROFILING_FPPONIT_OPTIONS = "ge.exec.profilingFpPointOptions"; | |||||
| const char_t *const OPTION_EXEC_PROFILING_BPPONIT_OPTIONS = "ge.exec.profilingBpPointOptions"; | |||||
| // profiling flag | // profiling flag | ||||
| const char *const OPTION_EXEC_PROFILING_MODE = "ge.exec.profilingMode"; | |||||
| const char *const OPTION_EXEC_PROFILING_OPTIONS = "ge.exec.profilingOptions"; | |||||
| const char_t *const OPTION_EXEC_PROFILING_MODE = "ge.exec.profilingMode"; | |||||
| const char_t *const OPTION_EXEC_PROFILING_OPTIONS = "ge.exec.profilingOptions"; | |||||
| // Hccl flag, if ge.exec.hcclFlag =1, it means load plugin for opskernel, else:ge.exec.hcclFlag =0 | // Hccl flag, if ge.exec.hcclFlag =1, it means load plugin for opskernel, else:ge.exec.hcclFlag =0 | ||||
| const char *const OPTION_EXEC_HCCL_FLAG = "ge.exec.hcclFlag"; | |||||
| const char *const OPTION_EXEC_ATOMIC_FLAG = "ge.exec.enable_atomic"; | |||||
| const char *const OPTION_EXEC_DISABLE_REUSED_MEMORY = "ge.exec.disableReuseMemory"; | |||||
| const char *const OPTION_EXEC_ENABLE_TAILING_OPTIMIZATION = "ge.exec.isTailingOptimization"; | |||||
| const char_t *const OPTION_EXEC_HCCL_FLAG = "ge.exec.hcclFlag"; | |||||
| const char_t *const OPTION_EXEC_ATOMIC_FLAG = "ge.exec.enable_atomic"; | |||||
| const char_t *const OPTION_EXEC_DISABLE_REUSED_MEMORY = "ge.exec.disableReuseMemory"; | |||||
| const char_t *const OPTION_EXEC_ENABLE_TAILING_OPTIMIZATION = "ge.exec.isTailingOptimization"; | |||||
| // Dynamic input flag. ge.exec.dynamicInput=1, means enable dynaimc input, | // Dynamic input flag. ge.exec.dynamicInput=1, means enable dynaimc input, | ||||
| // ge.exec.dynamicGraphExecuteMode, dynamic_execute[default] | // ge.exec.dynamicGraphExecuteMode, dynamic_execute[default] | ||||
| const char *const OPTION_EXEC_DYNAMIC_INPUT = "ge.exec.dynamicInput"; | |||||
| const char *const OPTION_EXEC_DYNAMIC_EXECUTE_MODE = "ge.exec.dynamicGraphExecuteMode"; | |||||
| const char *const OPTION_EXEC_DATA_INPUTS_SHAPE_RANGE = "ge.exec.dataInputsShapeRange"; | |||||
| const char_t *const OPTION_EXEC_DYNAMIC_INPUT = "ge.exec.dynamicInput"; | |||||
| const char_t *const OPTION_EXEC_DYNAMIC_EXECUTE_MODE = "ge.exec.dynamicGraphExecuteMode"; | |||||
| const char_t *const OPTION_EXEC_DATA_INPUTS_SHAPE_RANGE = "ge.exec.dataInputsShapeRange"; | |||||
| const char_t *const OPTION_EXEC_ENABLE_COPY_OUTPUT_ADDR = "ge.exec.enableCopyOutputAddr"; | |||||
| const char_t *const OPTION_EXEC_GRAPH_EXEC_TIMEOUT = "ge.exec.graphExecTimeout"; | |||||
| // Option key: memory init | // Option key: memory init | ||||
| const char *const GRAPH_MEMORY_MAX_SIZE = "ge.graphMemoryMaxSize"; | |||||
| const char *const VARIABLE_MEMORY_MAX_SIZE = "ge.variableMemoryMaxSize"; | |||||
| const char_t *const GRAPH_MEMORY_MAX_SIZE = "ge.graphMemoryMaxSize"; | |||||
| const char_t *const VARIABLE_MEMORY_MAX_SIZE = "ge.variableMemoryMaxSize"; | |||||
| const char_t *const OPTION_EXEC_REUSE_ZERO_COPY_MEMORY = "ge.exec.reuseZeroCopyMemory"; | |||||
| const std::string ATOMIC_CLEAN_POLICY = "ge.exec.atomicCleanPolicy"; | |||||
| const char_t *const OPTION_EXEC_LOGICAL_DEVICE_CLUSTER_DEPLOY_MODE = "ge.exec.logicalDeviceClusterDeployMode"; | |||||
| const char_t *const OPTION_EXEC_LOGICAL_DEVICE_ID = "ge.exec.logicalDeviceId"; | |||||
| namespace configure_option { | namespace configure_option { | ||||
| const char *const STREAM_NUM = "ge.streamNum"; | |||||
| const char *const HEAD_STREAM = "ge.headStream"; | |||||
| const char *const PERF_LEVEL = "ge.perfLevel"; | |||||
| const char *const ENCRYPT_MODE = "ge.encryptMode"; | |||||
| const char *const EK_FILE = "ge.ekFile"; | |||||
| const char *const CERT_FILE = "ge.certFile"; | |||||
| const char *const HW_KEY_FILE = "ge.hwKeyFile"; | |||||
| const char *const PRIVATE_KEY_FILE = "ge.privateKeyFile"; | |||||
| const char *const FRAMEWORK_TYPE = "ge.frameworkType"; | |||||
| const char *const CALIBRATION_CONF_FILE = "ge.calibrationConfFile"; | |||||
| const char *const INSERT_OP_FILE = "ge.insertOpFile"; | |||||
| const char *const OUTPUT_NODE_NAME = "ge.outputNodeName"; | |||||
| const char *const COMPRESS_FLAG = "ge.compressFlag"; | |||||
| const char *const PRECISION_MODE = "ge.exec.precision_mode"; | |||||
| const char *const SINGLE_OP_FLAG = "ge.exec.single_op"; | |||||
| const char *const TRAIN_FLAG = "ge.trainFlag"; | |||||
| const char *const RUN_FLAG = "ge.runFlag"; | |||||
| const char *const LOCAL_FMKOP_FLAG = "ge.enabledLocalFmkop"; | |||||
| const char *const TBE_PLUGIN_PATH_FLAG = "ge.TBE_plugin_path"; | |||||
| const char *const DDK_VERSION_FLAG = "ge.DDK_version"; | |||||
| const char *const GE_FE_FLAG = "ge.feFlag"; | |||||
| const char *const STREAM_MAX_PARALLEL_NUM = "ge.streamMaxParallelNum"; | |||||
| const char *const OUTPUT_DATATYPE = "ge.outputDatatype"; | |||||
| const char *const OP_SELECT_IMPL_MODE = "ge.opSelectImplmode"; | |||||
| const char *const OPTYPELIST_FOR_IMPLMODE = "ge.optypelistForImplmode"; | |||||
| const char *const HCOM_PARALLEL = "ge.hcomParallel"; | |||||
| const char *const AUTO_TUNE_MODE = "ge.autoTuneMode"; | |||||
| const char *const SOC_VERSION = "ge.socVersion"; | |||||
| const char *const CORE_TYPE = "ge.engineType"; | |||||
| const char *const AICORE_NUM = "ge.aicoreNum"; | |||||
| const char *const L1_FUSION = "ge.l1Fusion"; | |||||
| const char *const BUFFER_OPTIMIZE = "ge.bufferOptimize"; | |||||
| const char *const ENABLE_SMALL_CHANNEL = "ge.enableSmallChannel"; | |||||
| const char *const ENABLE_COMPRESS_WEIGHT = "ge.enableCompressWeight"; | |||||
| const char *const FUSION_SWITCH_FILE = "ge.fusionSwitchFile"; | |||||
| const char *const SAVE_ORIGINAL_MODEL = "ge.saveOriginalModel"; | |||||
| const char *const ORIGINAL_MODEL_FILE = "ge.originalModelFile"; | |||||
| const char *const INPUT_FP16_NODES = "ge.INPUT_NODES_SET_FP16"; | |||||
| const char *const OP_DEBUG_LEVEL = "ge.opDebugLevel"; | |||||
| const char *const PERFORMANCE_MODE = "ge.performance_mode"; | |||||
| const char *const MODIFY_MIXLIST = "ge.exec.modify_mixlist"; | |||||
| const char *const OP_PRECISION_MODE = "ge.exec.op_precision_mode"; | |||||
| const char_t *const STREAM_NUM = "ge.streamNum"; | |||||
| const char_t *const HEAD_STREAM = "ge.headStream"; | |||||
| const char_t *const PERF_LEVEL = "ge.perfLevel"; | |||||
| const char_t *const ENCRYPT_MODE = "ge.encryptMode"; | |||||
| const char_t *const EK_FILE = "ge.ekFile"; | |||||
| const char_t *const CERT_FILE = "ge.certFile"; | |||||
| const char_t *const HW_KEY_FILE = "ge.hwKeyFile"; | |||||
| const char_t *const PRIVATE_KEY_FILE = "ge.privateKeyFile"; | |||||
| const char_t *const FRAMEWORK_TYPE = "ge.frameworkType"; | |||||
| const char_t *const CALIBRATION_CONF_FILE = "ge.calibrationConfFile"; | |||||
| const char_t *const INSERT_OP_FILE = "ge.insertOpFile"; | |||||
| const char_t *const OUTPUT_NODE_NAME = "ge.outputNodeName"; | |||||
| const char_t *const COMPRESS_FLAG = "ge.compressFlag"; | |||||
| const char_t *const PRECISION_MODE = "ge.exec.precision_mode"; | |||||
| const char_t *const SINGLE_OP_FLAG = "ge.exec.single_op"; | |||||
| const char_t *const TRAIN_FLAG = "ge.trainFlag"; | |||||
| const char_t *const RUN_FLAG = "ge.runFlag"; | |||||
| const char_t *const LOCAL_FMKOP_FLAG = "ge.enabledLocalFmkop"; | |||||
| const char_t *const TBE_PLUGIN_PATH_FLAG = "ge.TBE_plugin_path"; | |||||
| const char_t *const DDK_VERSION_FLAG = "ge.DDK_version"; | |||||
| const char_t *const GE_FE_FLAG = "ge.feFlag"; | |||||
| const char_t *const STREAM_MAX_PARALLEL_NUM = "ge.streamMaxParallelNum"; | |||||
| const char_t *const OUTPUT_DATATYPE = "ge.outputDatatype"; | |||||
| const char_t *const OP_SELECT_IMPL_MODE = "ge.opSelectImplmode"; | |||||
| const char_t *const OPTYPELIST_FOR_IMPLMODE = "ge.optypelistForImplmode"; | |||||
| const char_t *const HCOM_PARALLEL = "ge.hcomParallel"; | |||||
| const char_t *const AUTO_TUNE_MODE = "ge.autoTuneMode"; | |||||
| const char_t *const SOC_VERSION = "ge.socVersion"; | |||||
| const char_t *const VIRTUAL_TYPE = "ge.virtual_type"; | |||||
| const char_t *const CORE_TYPE = "ge.engineType"; | |||||
| const char_t *const AICORE_NUM = "ge.aicoreNum"; | |||||
| const char_t *const L1_FUSION = "ge.l1Fusion"; | |||||
| const char_t *const BUFFER_OPTIMIZE = "ge.bufferOptimize"; | |||||
| const char_t *const ENABLE_SMALL_CHANNEL = "ge.enableSmallChannel"; | |||||
| const char_t *const ENABLE_COMPRESS_WEIGHT = "ge.enableCompressWeight"; | |||||
| const char_t *const FUSION_SWITCH_FILE = "ge.fusionSwitchFile"; | |||||
| const char_t *const SAVE_ORIGINAL_MODEL = "ge.saveOriginalModel"; | |||||
| const char_t *const ORIGINAL_MODEL_FILE = "ge.originalModelFile"; | |||||
| const char_t *const INPUT_FP16_NODES = "ge.INPUT_NODES_SET_FP16"; | |||||
| const char_t *const OP_DEBUG_LEVEL = "ge.opDebugLevel"; | |||||
| const char_t *const PERFORMANCE_MODE = "ge.performance_mode"; | |||||
| const char_t *const SHAPE_GENERALIZED_BUILD_MODE = "ge.shape_generalized_build_mode"; | |||||
| const char_t *const MODIFY_MIXLIST = "ge.exec.modify_mixlist"; | |||||
| const char_t *const OP_PRECISION_MODE = "ge.exec.op_precision_mode"; | |||||
| const char_t *const CUSTOMIZE_DTYPES = "ge.customizeDtypes"; | |||||
| const char_t *const COMPRESSION_OPTIMIZE_CONF = "ge.compressionOptimizeConf"; | |||||
| } // namespace configure_option | } // namespace configure_option | ||||
| // Configure stream num by Session constructor options param, | // Configure stream num by Session constructor options param, | ||||
| // its value should be int32_t type, default value is "1" | // its value should be int32_t type, default value is "1" | ||||
| @@ -223,7 +238,7 @@ const std::string OPTYPELIST_FOR_IMPLMODE = "ge.optypelistForImplmode"; | |||||
| const std::string HCOM_PARALLEL = "ge.hcomParallel"; | const std::string HCOM_PARALLEL = "ge.hcomParallel"; | ||||
| // configure whether to use dynamic batch size | // configure whether to use dynamic batch size | ||||
| const char *const kDynamicBatchSize = "ge.dynamicBatchSize"; | |||||
| const char_t *const kDynamicBatchSize = "ge.dynamicBatchSize"; | |||||
| // configure threshold of fusion data size for communication op | // configure threshold of fusion data size for communication op | ||||
| const std::string FUSION_TENSOR_SIZE = "ge.fusionTensorSize"; | const std::string FUSION_TENSOR_SIZE = "ge.fusionTensorSize"; | ||||
| @@ -232,10 +247,10 @@ const std::string INPUT_SHAPE = "ge.inputShape"; | |||||
| const std::string DYNAMIC_NODE_TYPE = "ge.dynamicNodeType"; | const std::string DYNAMIC_NODE_TYPE = "ge.dynamicNodeType"; | ||||
| // configure whether to use dynamic image size | // configure whether to use dynamic image size | ||||
| const char *const kDynamicImageSize = "ge.dynamicImageSize"; | |||||
| const char_t *const kDynamicImageSize = "ge.dynamicImageSize"; | |||||
| // Configure whether to use dynamic dims | // Configure whether to use dynamic dims | ||||
| const char *const kDynamicDims = "ge.dynamicDims"; | |||||
| const char_t *const kDynamicDims = "ge.dynamicDims"; | |||||
| // Configure auto tune mode, this option only take effect while AUTO_TUNE_FLAG is Y, | // Configure auto tune mode, this option only take effect while AUTO_TUNE_FLAG is Y, | ||||
| // example: GA|RL, support configure multiple, split by | | // example: GA|RL, support configure multiple, split by | | ||||
| @@ -244,9 +259,16 @@ const std::string AUTO_TUNE_MODE = "ge.autoTuneMode"; | |||||
| // Configure soc version , example: "Ascend310" | // Configure soc version , example: "Ascend310" | ||||
| const std::string SOC_VERSION = "ge.socVersion"; | const std::string SOC_VERSION = "ge.socVersion"; | ||||
| // configure whether to enable virtualization, | |||||
| // its value should be "0" or "1", default value is "0" | |||||
| const std::string VIRTUAL_TYPE = "ge.virtual_type"; | |||||
| // Configure core type "VectorEngine", default value is "AIcoreEngine" | // Configure core type "VectorEngine", default value is "AIcoreEngine" | ||||
| const std::string CORE_TYPE = "ge.engineType"; | const std::string CORE_TYPE = "ge.engineType"; | ||||
| // Configure graph exclude one or more engines | |||||
| const std::string EXCLUDE_ENGINES = "ge.exec.exclude_engines"; | |||||
| // Configure AICORE NUM | // Configure AICORE NUM | ||||
| const std::string AICORE_NUM = "ge.aicoreNum"; | const std::string AICORE_NUM = "ge.aicoreNum"; | ||||
| @@ -262,38 +284,51 @@ const std::string ENABLE_SMALL_CHANNEL = "ge.enableSmallChannel"; | |||||
| // Configure Compress Weight flag | // Configure Compress Weight flag | ||||
| const std::string ENABLE_COMPRESS_WEIGHT = "ge.enableCompressWeight"; | const std::string ENABLE_COMPRESS_WEIGHT = "ge.enableCompressWeight"; | ||||
| // Configure Sparse Matrix Weight flag | |||||
| const std::string ENABLE_SPARSE_MATRIX_WEIGHT = "ge.enableSparseMatrixWeight"; | |||||
| // Configure fusion switch file path | // Configure fusion switch file path | ||||
| const std::string FUSION_SWITCH_FILE = "ge.fusionSwitchFile"; | const std::string FUSION_SWITCH_FILE = "ge.fusionSwitchFile"; | ||||
| // Configure compression optimize file path | |||||
| const std::string COMPRESSION_OPTIMIZE_CONF = "ge.compressionOptimizeConf"; | |||||
| // Configure customize dtypes path | |||||
| const std::string CUSTOMIZE_DTYPES = "ge.customizeDtypes"; | |||||
| // Save original model | // Save original model | ||||
| const std::string SAVE_ORIGINAL_MODEL = "ge.saveOriginalModel"; | const std::string SAVE_ORIGINAL_MODEL = "ge.saveOriginalModel"; | ||||
| // Save original model file name | // Save original model file name | ||||
| const std::string ORIGINAL_MODEL_FILE = "ge.originalModelFile"; | const std::string ORIGINAL_MODEL_FILE = "ge.originalModelFile"; | ||||
| const char *const OPTION_GE_MAX_DUMP_FILE_NUM = "ge.maxDumpFileNum"; | |||||
| const char *const OPTION_GE_MAX_DUMP_FILE_SIZE = "ge.maxDumpFileSize"; | |||||
| const char *const OPTION_GE_MAX_DUMP_OP_NUM = "ge.maxDumpOpNum"; | |||||
| const char_t *const OPTION_GE_MAX_DUMP_FILE_NUM = "ge.maxDumpFileNum"; | |||||
| const char_t *const OPTION_GE_MAX_DUMP_FILE_SIZE = "ge.maxDumpFileSize"; | |||||
| const char_t *const OPTION_GE_MAX_DUMP_OP_NUM = "ge.maxDumpOpNum"; | |||||
| // Configure for print op pass | // Configure for print op pass | ||||
| // Its value should be "0" or "1", default value is "1" | // Its value should be "0" or "1", default value is "1" | ||||
| const char *const ENABLE_PRINT_OP_PASS = "ge.enablePrintOpPass"; | |||||
| const char_t *const ENABLE_PRINT_OP_PASS = "ge.enablePrintOpPass"; | |||||
| // Configure operator compilation path | // Configure operator compilation path | ||||
| // Its value should be file path, default value is "./" | // Its value should be file path, default value is "./" | ||||
| const char *const DEBUG_DIR = "ge.debugDir"; | |||||
| const char_t *const DEBUG_DIR = "ge.debugDir"; | |||||
| // Configure switch for op status check such as overflow | |||||
| // Its value should be true of flase | |||||
| const char_t *const STATUS_CHECK = "ge.status_check"; | |||||
| // Configure operator compiler cache path | // Configure operator compiler cache path | ||||
| // Its value should be file path, default value is "./" | // Its value should be file path, default value is "./" | ||||
| const char *const OP_COMPILER_CACHE_DIR = "ge.op_compiler_cache_dir"; | |||||
| const char_t *const OP_COMPILER_CACHE_DIR = "ge.op_compiler_cache_dir"; | |||||
| // Configure operator compiler cache mode | // Configure operator compiler cache mode | ||||
| // Its value should be "disable", "enable" or "force", default value is "disable" | // Its value should be "disable", "enable" or "force", default value is "disable" | ||||
| const char *const OP_COMPILER_CACHE_MODE = "ge.op_compiler_cache_mode"; | |||||
| const char_t *const OP_COMPILER_CACHE_MODE = "ge.op_compiler_cache_mode"; | |||||
| // Configure whether to use single stream. | // Configure whether to use single stream. | ||||
| // Its value should be "true" or "false", default value is "false" | // Its value should be "true" or "false", default value is "false" | ||||
| const char *const ENABLE_SINGLE_STREAM = "ge.enableSingleStream"; | |||||
| const char_t *const ENABLE_SINGLE_STREAM = "ge.enableSingleStream"; | |||||
| // Configure input fp16 nodes | // Configure input fp16 nodes | ||||
| const std::string INPUT_FP16_NODES = "ge.INPUT_NODES_SET_FP16"; | const std::string INPUT_FP16_NODES = "ge.INPUT_NODES_SET_FP16"; | ||||
| @@ -318,17 +353,28 @@ const std::string OP_BANK_UPDATE_FLAG = "ge.op_bank_update"; | |||||
| const std::string HCOM_MULTI_MODE = "ge.hcomMultiMode"; | const std::string HCOM_MULTI_MODE = "ge.hcomMultiMode"; | ||||
| // atc and ir option | // atc and ir option | ||||
| const char *const INPUT_SHAPE_RANGE = "input_shape_range"; | |||||
| const char_t *const INPUT_SHAPE_RANGE = "input_shape_range"; | |||||
| // Configure express high compile performance or high execute performance | // Configure express high compile performance or high execute performance | ||||
| // normal: no need to compile, used saved .o files directly | // normal: no need to compile, used saved .o files directly | ||||
| // high: need to recompile, high execute performance mode | // high: need to recompile, high execute performance mode | ||||
| const std::string PERFORMANCE_MODE = "ge.performance_mode"; | const std::string PERFORMANCE_MODE = "ge.performance_mode"; | ||||
| // For selecting the mode of shape generalization when build graph. | |||||
| // shape_generalized: Shape will be generalized during graph build. | |||||
| // shape_precise: Shape will not be generalized, use precise shape. | |||||
| const std::string SHAPE_GENERALIZED_BUILD_MODE = "ge.shape_generalized_build_mode"; | |||||
| const std::string MODIFY_MIXLIST = "ge.exec.modify_mixlist"; | const std::string MODIFY_MIXLIST = "ge.exec.modify_mixlist"; | ||||
| const std::string OP_PRECISION_MODE = "ge.exec.op_precision_mode"; | const std::string OP_PRECISION_MODE = "ge.exec.op_precision_mode"; | ||||
| const std::string OP_WAIT_TIMEOUT = "ge.exec.opWaitTimeout"; | |||||
| const std::string OP_EXECUTE_TIMEOUT = "ge.exec.opExecuteTimeout"; | |||||
| const char_t *const FILE_CONSTANT_PATH = "ge.exec.value_bins"; | |||||
| // Graph run mode | // Graph run mode | ||||
| enum GraphRunMode { PREDICTION = 0, TRAIN }; | enum GraphRunMode { PREDICTION = 0, TRAIN }; | ||||
| @@ -345,7 +391,7 @@ struct OutputTensorInfo { | |||||
| std::vector<int64_t> dims; // shape description | std::vector<int64_t> dims; // shape description | ||||
| std::unique_ptr<uint8_t[]> data; // tensor data | std::unique_ptr<uint8_t[]> data; // tensor data | ||||
| int64_t length; // tensor length | int64_t length; // tensor length | ||||
| OutputTensorInfo() : data_type(0), dims({}), data(nullptr), length(0) {} | |||||
| OutputTensorInfo() : data_type(0U), dims({}), data(nullptr), length(0) {} | |||||
| OutputTensorInfo(OutputTensorInfo &&out) | OutputTensorInfo(OutputTensorInfo &&out) | ||||
| : data_type(out.data_type), dims(out.dims), data(std::move(out.data)), length(out.length) {} | : data_type(out.data_type), dims(out.dims), data(std::move(out.data)), length(out.length) {} | ||||
| @@ -367,48 +413,53 @@ using RunAsyncCallback = std::function<void(Status, std::vector<ge::Tensor> &)>; | |||||
| // for ir build | // for ir build | ||||
| namespace ir_option { | namespace ir_option { | ||||
| static const char *const INPUT_FORMAT = "input_format"; | |||||
| static const char *const INPUT_SHAPE = "input_shape"; | |||||
| static const char *const INPUT_SHAPE_RANGE = ge::INPUT_SHAPE_RANGE; | |||||
| static const char *const OP_NAME_MAP = "op_name_map"; | |||||
| static const char *const IS_DYNAMIC_INPUT = "is_dynamic_input"; | |||||
| static const char *const IS_INPUT_ADJUST_HW_LAYOUT = "is_input_adjust_hw_layout"; | |||||
| static const char *const IS_OUTPUT_ADJUST_HW_LAYOUT = "is_output_adjust_hw_layout"; | |||||
| static const char *const ENABLE_SCOPE_FUSION_PASSES = "enable_scope_fusion_passes"; | |||||
| static const char *const OUTPUT = "output"; | |||||
| static const char *const DYNAMIC_BATCH_SIZE = kDynamicBatchSize; | |||||
| static const char *const DYNAMIC_IMAGE_SIZE = kDynamicImageSize; | |||||
| static const char *const DYNAMIC_DIMS = kDynamicDims; | |||||
| static const char *const INSERT_OP_FILE = ge::INSERT_OP_FILE.c_str(); | |||||
| static const char *const PRECISION_MODE = ge::PRECISION_MODE.c_str(); | |||||
| static const char *const TUNE_DEVICE_IDS = ge::TUNE_DEVICE_IDS.c_str(); | |||||
| static const char *const EXEC_DISABLE_REUSED_MEMORY = ge::OPTION_EXEC_DISABLE_REUSED_MEMORY; | |||||
| static const char *const AUTO_TUNE_MODE = ge::AUTO_TUNE_MODE.c_str(); | |||||
| static const char *const CORE_TYPE = ge::CORE_TYPE.c_str(); | |||||
| static const char *const SOC_VERSION = ge::SOC_VERSION.c_str(); | |||||
| static const char *const ENABLE_SINGLE_STREAM = ge::ENABLE_SINGLE_STREAM; | |||||
| static const char *const AICORE_NUM = ge::AICORE_NUM.c_str(); | |||||
| static const char *const FUSION_SWITCH_FILE = ge::FUSION_SWITCH_FILE.c_str(); | |||||
| static const char *const ENABLE_SMALL_CHANNEL = ge::ENABLE_SMALL_CHANNEL.c_str(); | |||||
| static const char *const OP_SELECT_IMPL_MODE = ge::OP_SELECT_IMPL_MODE.c_str(); | |||||
| static const char *const OUTPUT_TYPE = ge::OUTPUT_DATATYPE.c_str(); | |||||
| static const char *const BUFFER_OPTIMIZE = ge::BUFFER_OPTIMIZE.c_str(); | |||||
| static const char *const ENABLE_COMPRESS_WEIGHT = ge::ENABLE_COMPRESS_WEIGHT.c_str(); | |||||
| static const char *const COMPRESS_WEIGHT_CONF = "compress_weight_conf"; | |||||
| static const char *const OUT_NODES = ge::OUTPUT_NODE_NAME.c_str(); | |||||
| static const char *const INPUT_FP16_NODES = ge::INPUT_FP16_NODES.c_str(); | |||||
| static const char *const LOG_LEVEL = "log"; | |||||
| static const char *const OPTYPELIST_FOR_IMPLMODE = ge::OPTYPELIST_FOR_IMPLMODE.c_str(); | |||||
| static const char *const DEBUG_DIR = ge::DEBUG_DIR; | |||||
| static const char *const OP_COMPILER_CACHE_DIR = ge::OP_COMPILER_CACHE_DIR; | |||||
| static const char *const OP_COMPILER_CACHE_MODE = ge::OP_COMPILER_CACHE_MODE; | |||||
| static const char *const MDL_BANK_PATH = ge::MDL_BANK_PATH_FLAG.c_str(); | |||||
| static const char *const OP_BANK_PATH = ge::OP_BANK_PATH_FLAG.c_str(); | |||||
| static const char *const OP_BANK_UPDATE = ge::OP_BANK_UPDATE_FLAG.c_str(); | |||||
| static const char *const OP_DEBUG_LEVEL = ge::OP_DEBUG_LEVEL.c_str(); | |||||
| static const char *const PERFORMANCE_MODE = ge::PERFORMANCE_MODE.c_str(); | |||||
| static const char *const MODIFY_MIXLIST = ge::MODIFY_MIXLIST.c_str(); | |||||
| static const char *const OP_PRECISION_MODE = ge::OP_PRECISION_MODE.c_str(); | |||||
| static const char_t *const INPUT_FORMAT = "input_format"; | |||||
| static const char_t *const INPUT_SHAPE = "input_shape"; | |||||
| static const char_t *const INPUT_SHAPE_RANGE = ge::INPUT_SHAPE_RANGE; | |||||
| static const char_t *const OP_NAME_MAP = "op_name_map"; | |||||
| static const char_t *const IS_DYNAMIC_INPUT = "is_dynamic_input"; | |||||
| static const char_t *const IS_INPUT_ADJUST_HW_LAYOUT = "is_input_adjust_hw_layout"; | |||||
| static const char_t *const IS_OUTPUT_ADJUST_HW_LAYOUT = "is_output_adjust_hw_layout"; | |||||
| static const char_t *const ENABLE_SCOPE_FUSION_PASSES = "enable_scope_fusion_passes"; | |||||
| static const char_t *const OUTPUT = "output"; | |||||
| static const char_t *const DYNAMIC_BATCH_SIZE = kDynamicBatchSize; | |||||
| static const char_t *const DYNAMIC_IMAGE_SIZE = kDynamicImageSize; | |||||
| static const char_t *const DYNAMIC_DIMS = kDynamicDims; | |||||
| static const char_t *const INSERT_OP_FILE = ge::INSERT_OP_FILE.c_str(); | |||||
| static const char_t *const PRECISION_MODE = ge::PRECISION_MODE.c_str(); | |||||
| static const char_t *const TUNE_DEVICE_IDS = ge::TUNE_DEVICE_IDS.c_str(); | |||||
| static const char_t *const EXEC_DISABLE_REUSED_MEMORY = ge::OPTION_EXEC_DISABLE_REUSED_MEMORY; | |||||
| static const char_t *const AUTO_TUNE_MODE = ge::AUTO_TUNE_MODE.c_str(); | |||||
| static const char_t *const CORE_TYPE = ge::CORE_TYPE.c_str(); | |||||
| static const char_t *const SOC_VERSION = ge::SOC_VERSION.c_str(); | |||||
| static const char_t *const VIRTUAL_TYPE = ge::VIRTUAL_TYPE.c_str(); | |||||
| static const char_t *const ENABLE_SINGLE_STREAM = ge::ENABLE_SINGLE_STREAM; | |||||
| static const char_t *const AICORE_NUM = ge::AICORE_NUM.c_str(); | |||||
| static const char_t *const FUSION_SWITCH_FILE = ge::FUSION_SWITCH_FILE.c_str(); | |||||
| static const char_t *const ENABLE_SMALL_CHANNEL = ge::ENABLE_SMALL_CHANNEL.c_str(); | |||||
| static const char_t *const OP_SELECT_IMPL_MODE = ge::OP_SELECT_IMPL_MODE.c_str(); | |||||
| static const char_t *const OUTPUT_TYPE = ge::OUTPUT_DATATYPE.c_str(); | |||||
| static const char_t *const BUFFER_OPTIMIZE = ge::BUFFER_OPTIMIZE.c_str(); | |||||
| static const char_t *const ENABLE_COMPRESS_WEIGHT = ge::ENABLE_COMPRESS_WEIGHT.c_str(); | |||||
| static const char_t *const SPARSITY = ge::ENABLE_SPARSE_MATRIX_WEIGHT.c_str(); | |||||
| static const char_t *const COMPRESS_WEIGHT_CONF = "compress_weight_conf"; | |||||
| static const char_t *const OUT_NODES = ge::OUTPUT_NODE_NAME.c_str(); | |||||
| static const char_t *const INPUT_FP16_NODES = ge::INPUT_FP16_NODES.c_str(); | |||||
| static const char_t *const LOG_LEVEL = "log"; | |||||
| static const char_t *const OPTYPELIST_FOR_IMPLMODE = ge::OPTYPELIST_FOR_IMPLMODE.c_str(); | |||||
| static const char_t *const DEBUG_DIR = ge::DEBUG_DIR; | |||||
| static const char_t *const OP_COMPILER_CACHE_DIR = ge::OP_COMPILER_CACHE_DIR; | |||||
| static const char_t *const OP_COMPILER_CACHE_MODE = ge::OP_COMPILER_CACHE_MODE; | |||||
| static const char_t *const MDL_BANK_PATH = ge::MDL_BANK_PATH_FLAG.c_str(); | |||||
| static const char_t *const OP_BANK_PATH = ge::OP_BANK_PATH_FLAG.c_str(); | |||||
| static const char_t *const OP_BANK_UPDATE = ge::OP_BANK_UPDATE_FLAG.c_str(); | |||||
| static const char_t *const OP_DEBUG_LEVEL = ge::OP_DEBUG_LEVEL.c_str(); | |||||
| static const char_t *const PERFORMANCE_MODE = ge::PERFORMANCE_MODE.c_str(); | |||||
| static const char_t *const SHAPE_GENERALIZED_BUILD_MODE = ge::SHAPE_GENERALIZED_BUILD_MODE.c_str(); | |||||
| static const char_t *const MODIFY_MIXLIST = ge::MODIFY_MIXLIST.c_str(); | |||||
| static const char_t *const OP_PRECISION_MODE = ge::OP_PRECISION_MODE.c_str(); | |||||
| static const char_t *const CUSTOMIZE_DTYPES = "ge.customizeDtypes"; | |||||
| static const char_t *const COMPRESSION_OPTIMIZE_CONF = "ge.compressionOptimizeConf"; | |||||
| // for interface: aclgrphBuildModel | // for interface: aclgrphBuildModel | ||||
| #ifdef __GNUC__ | #ifdef __GNUC__ | ||||
| @@ -437,19 +488,23 @@ const std::set<std::string> ir_builder_suppported_options = {INPUT_FORMAT, | |||||
| OP_BANK_PATH, | OP_BANK_PATH, | ||||
| OP_BANK_UPDATE, | OP_BANK_UPDATE, | ||||
| PERFORMANCE_MODE, | PERFORMANCE_MODE, | ||||
| MODIFY_MIXLIST}; | |||||
| SHAPE_GENERALIZED_BUILD_MODE, | |||||
| MODIFY_MIXLIST, | |||||
| CUSTOMIZE_DTYPES}; | |||||
| // for interface: aclgrphParse | // for interface: aclgrphParse | ||||
| const std::set<std::string> ir_parser_suppported_options = { | const std::set<std::string> ir_parser_suppported_options = { | ||||
| INPUT_FP16_NODES, IS_INPUT_ADJUST_HW_LAYOUT, IS_OUTPUT_ADJUST_HW_LAYOUT, OUTPUT, | |||||
| OUT_NODES, ENABLE_SCOPE_FUSION_PASSES}; | |||||
| INPUT_FP16_NODES, IS_INPUT_ADJUST_HW_LAYOUT, IS_OUTPUT_ADJUST_HW_LAYOUT, OUTPUT, | |||||
| OUT_NODES, ENABLE_SCOPE_FUSION_PASSES}; | |||||
| // for interface: aclgrphBuildInitialize | // for interface: aclgrphBuildInitialize | ||||
| const std::set<std::string> global_options = {CORE_TYPE, | const std::set<std::string> global_options = {CORE_TYPE, | ||||
| SOC_VERSION, | SOC_VERSION, | ||||
| VIRTUAL_TYPE, | |||||
| BUFFER_OPTIMIZE, | BUFFER_OPTIMIZE, | ||||
| ENABLE_COMPRESS_WEIGHT, | ENABLE_COMPRESS_WEIGHT, | ||||
| COMPRESS_WEIGHT_CONF, | COMPRESS_WEIGHT_CONF, | ||||
| SPARSITY, | |||||
| PRECISION_MODE, | PRECISION_MODE, | ||||
| TUNE_DEVICE_IDS, | TUNE_DEVICE_IDS, | ||||
| EXEC_DISABLE_REUSED_MEMORY, | EXEC_DISABLE_REUSED_MEMORY, | ||||
| @@ -464,7 +519,8 @@ const std::set<std::string> global_options = {CORE_TYPE, | |||||
| DEBUG_DIR, | DEBUG_DIR, | ||||
| OP_COMPILER_CACHE_DIR, | OP_COMPILER_CACHE_DIR, | ||||
| OP_COMPILER_CACHE_MODE, | OP_COMPILER_CACHE_MODE, | ||||
| MODIFY_MIXLIST}; | |||||
| MODIFY_MIXLIST, | |||||
| COMPRESSION_OPTIMIZE_CONF}; | |||||
| #endif | #endif | ||||
| } // namespace ir_option | } // namespace ir_option | ||||
| } // namespace ge | } // namespace ge | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -32,42 +32,44 @@ | |||||
| #endif | #endif | ||||
| #include <stddef.h> | #include <stddef.h> | ||||
| #include <stdint.h> | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| extern "C" { | extern "C" { | ||||
| #endif | #endif | ||||
| static const uint32_t ACL_ERROR_GE_PARAM_INVALID = 145000; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_NOT_INIT = 145001; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_PATH_INVALID = 145002; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_ID_INVALID = 145003; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_DATA_SIZE_INVALID = 145006; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_ADDR_INVALID = 145007; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_QUEUE_ID_INVALID = 145008; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_MODEL_REPEATED = 145009; | |||||
| static const uint32_t ACL_ERROR_GE_DYNAMIC_INPUT_ADDR_INVALID = 145011; | |||||
| static const uint32_t ACL_ERROR_GE_DYNAMIC_INPUT_LENGTH_INVALID = 145012; | |||||
| static const uint32_t ACL_ERROR_GE_DYNAMIC_BATCH_SIZE_INVALID = 145013; | |||||
| static const uint32_t ACL_ERROR_GE_AIPP_BATCH_EMPTY = 145014; | |||||
| static const uint32_t ACL_ERROR_GE_AIPP_NOT_EXIST = 145015; | |||||
| static const uint32_t ACL_ERROR_GE_AIPP_MODE_INVALID = 145016; | |||||
| static const uint32_t ACL_ERROR_GE_OP_TASK_TYPE_INVALID = 145017; | |||||
| static const uint32_t ACL_ERROR_GE_OP_KERNEL_TYPE_INVALID = 145018; | |||||
| static const uint32_t ACL_ERROR_GE_PLGMGR_PATH_INVALID = 145019; | |||||
| static const uint32_t ACL_ERROR_GE_FORMAT_INVALID = 145020; | |||||
| static const uint32_t ACL_ERROR_GE_SHAPE_INVALID = 145021; | |||||
| static const uint32_t ACL_ERROR_GE_DATATYPE_INVALID = 145022; | |||||
| static const uint32_t ACL_ERROR_GE_MEMORY_ALLOCATION = 245000; | |||||
| static const uint32_t ACL_ERROR_GE_MEMORY_OPERATE_FAILED = 245001; | |||||
| static const uint32_t ACL_ERROR_GE_INTERNAL_ERROR = 545000; | |||||
| static const uint32_t ACL_ERROR_GE_LOAD_MODEL = 545001; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_MODEL_PARTITION_FAILED = 545002; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_WEIGHT_PARTITION_FAILED = 545003; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_TASK_PARTITION_FAILED = 545004; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_KERNEL_PARTITION_FAILED = 545005; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_RELEASE_MODEL_DATA = 545006; | |||||
| static const uint32_t ACL_ERROR_GE_COMMAND_HANDLE = 545007; | |||||
| static const uint32_t ACL_ERROR_GE_GET_TENSOR_INFO = 545008; | |||||
| static const uint32_t ACL_ERROR_GE_UNLOAD_MODEL = 545009; | |||||
| static const uint32_t ACL_ERROR_GE_PARAM_INVALID = 145000U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_NOT_INIT = 145001U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_PATH_INVALID = 145002U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_ID_INVALID = 145003U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_DATA_SIZE_INVALID = 145006U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_ADDR_INVALID = 145007U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_MODEL_QUEUE_ID_INVALID = 145008U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_MODEL_REPEATED = 145009U; | |||||
| static const uint32_t ACL_ERROR_GE_DYNAMIC_INPUT_ADDR_INVALID = 145011U; | |||||
| static const uint32_t ACL_ERROR_GE_DYNAMIC_INPUT_LENGTH_INVALID = 145012U; | |||||
| static const uint32_t ACL_ERROR_GE_DYNAMIC_BATCH_SIZE_INVALID = 145013U; | |||||
| static const uint32_t ACL_ERROR_GE_AIPP_BATCH_EMPTY = 145014U; | |||||
| static const uint32_t ACL_ERROR_GE_AIPP_NOT_EXIST = 145015U; | |||||
| static const uint32_t ACL_ERROR_GE_AIPP_MODE_INVALID = 145016U; | |||||
| static const uint32_t ACL_ERROR_GE_OP_TASK_TYPE_INVALID = 145017U; | |||||
| static const uint32_t ACL_ERROR_GE_OP_KERNEL_TYPE_INVALID = 145018U; | |||||
| static const uint32_t ACL_ERROR_GE_PLGMGR_PATH_INVALID = 145019U; | |||||
| static const uint32_t ACL_ERROR_GE_FORMAT_INVALID = 145020U; | |||||
| static const uint32_t ACL_ERROR_GE_SHAPE_INVALID = 145021U; | |||||
| static const uint32_t ACL_ERROR_GE_DATATYPE_INVALID = 145022U; | |||||
| static const uint32_t ACL_ERROR_GE_MEMORY_ALLOCATION = 245000U; | |||||
| static const uint32_t ACL_ERROR_GE_MEMORY_OPERATE_FAILED = 245001U; | |||||
| static const uint32_t ACL_ERROR_GE_DEVICE_MEMORY_OPERATE_FAILED = 245002U; | |||||
| static const uint32_t ACL_ERROR_GE_INTERNAL_ERROR = 545000U; | |||||
| static const uint32_t ACL_ERROR_GE_LOAD_MODEL = 545001U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_MODEL_PARTITION_FAILED = 545002U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_WEIGHT_PARTITION_FAILED = 545003U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_TASK_PARTITION_FAILED = 545004U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_LOAD_KERNEL_PARTITION_FAILED = 545005U; | |||||
| static const uint32_t ACL_ERROR_GE_EXEC_RELEASE_MODEL_DATA = 545006U; | |||||
| static const uint32_t ACL_ERROR_GE_COMMAND_HANDLE = 545007U; | |||||
| static const uint32_t ACL_ERROR_GE_GET_TENSOR_INFO = 545008U; | |||||
| static const uint32_t ACL_ERROR_GE_UNLOAD_MODEL = 545009U; | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| } // namespace ge | } // namespace ge | ||||
| @@ -1,18 +1,18 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Licensed 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. | |||||
| */ | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_EXTERNAL_GE_IR_BUILD_H_ | #ifndef INC_EXTERNAL_GE_IR_BUILD_H_ | ||||
| #define INC_EXTERNAL_GE_IR_BUILD_H_ | #define INC_EXTERNAL_GE_IR_BUILD_H_ | ||||
| @@ -36,14 +36,10 @@ | |||||
| #include <memory> | #include <memory> | ||||
| #include "graph/graph.h" | #include "graph/graph.h" | ||||
| #include "graph/ge_error_codes.h" | #include "graph/ge_error_codes.h" | ||||
| namespace { | |||||
| const int IR_MAJOR_VERSION = 1; | |||||
| const int IR_MINOR_VERSION = 0; | |||||
| const int IR_PATCH_VERSION = 0; | |||||
| } // namespace | |||||
| namespace ge { | namespace ge { | ||||
| const int32_t IR_MAJOR_VERSION = 1; | |||||
| const int32_t IR_MINOR_VERSION = 0; | |||||
| const int32_t IR_PATCH_VERSION = 0; | |||||
| struct ModelBufferData { | struct ModelBufferData { | ||||
| std::shared_ptr<uint8_t> data = nullptr; | std::shared_ptr<uint8_t> data = nullptr; | ||||
| @@ -102,10 +98,10 @@ GE_FUNC_VISIBILITY graphStatus aclgrphBuildModel(const ge::Graph &graph, | |||||
| * @retval GRAPH_SUCCESS The function is successfully executed. | * @retval GRAPH_SUCCESS The function is successfully executed. | ||||
| * @retval OtherValues Failure | * @retval OtherValues Failure | ||||
| */ | */ | ||||
| ATTRIBUTED_DEPRECATED(GE_FUNC_VISIBILITY graphStatus aclgrphSaveModel(const char *, const ModelBufferData &)) | |||||
| GE_FUNC_VISIBILITY graphStatus aclgrphSaveModel(const string &output_file, const ModelBufferData &model); | |||||
| ATTRIBUTED_DEPRECATED(GE_FUNC_VISIBILITY graphStatus aclgrphSaveModel(const char_t *, const ModelBufferData &)) | |||||
| GE_FUNC_VISIBILITY graphStatus aclgrphSaveModel(const std::string &output_file, const ModelBufferData &model); | |||||
| GE_FUNC_VISIBILITY graphStatus aclgrphSaveModel(const char *output_file, const ModelBufferData &model); | |||||
| GE_FUNC_VISIBILITY graphStatus aclgrphSaveModel(const char_t *output_file, const ModelBufferData &model); | |||||
| /** | /** | ||||
| * @ingroup AscendCL | * @ingroup AscendCL | ||||
| @@ -117,7 +113,8 @@ GE_FUNC_VISIBILITY graphStatus aclgrphSaveModel(const char *output_file, const M | |||||
| * @retval GRAPH_SUCCESS The function is successfully executed. | * @retval GRAPH_SUCCESS The function is successfully executed. | ||||
| * @retval OtherValues Failure | * @retval OtherValues Failure | ||||
| */ | */ | ||||
| GE_FUNC_VISIBILITY graphStatus aclgrphGetIRVersion(int *major_version, int *minor_version, int *patch_version); | |||||
| GE_FUNC_VISIBILITY graphStatus aclgrphGetIRVersion(int32_t *major_version, int32_t *minor_version, | |||||
| int32_t *patch_version); | |||||
| /** | /** | ||||
| * @ingroup AscendCL | * @ingroup AscendCL | ||||
| @@ -129,7 +126,7 @@ GE_FUNC_VISIBILITY graphStatus aclgrphGetIRVersion(int *major_version, int *mino | |||||
| * @retval GRAPH_SUCCESS The function is successfully executed. | * @retval GRAPH_SUCCESS The function is successfully executed. | ||||
| * @retval OtherValues Failure | * @retval OtherValues Failure | ||||
| */ | */ | ||||
| GE_FUNC_VISIBILITY graphStatus aclgrphDumpGraph(const ge::Graph &graph, const char *file, const size_t len); | |||||
| GE_FUNC_VISIBILITY graphStatus aclgrphDumpGraph(const ge::Graph &graph, const char_t *file, const size_t len); | |||||
| /** | /** | ||||
| * @ingroup AscendCL | * @ingroup AscendCL | ||||
| @@ -153,7 +150,7 @@ GE_FUNC_VISIBILITY graphStatus aclgrphGenerateForOp(const AscendString &op_type, | |||||
| * @param cfg_path [IN] the config file path | * @param cfg_path [IN] the config file path | ||||
| * @return graphStatus | * @return graphStatus | ||||
| */ | */ | ||||
| GE_FUNC_VISIBILITY graphStatus aclgrphSetOpAttr(Graph &graph, aclgrphAttrType attr_type, const char *cfg_path); | |||||
| GE_FUNC_VISIBILITY graphStatus aclgrphSetOpAttr(Graph &graph, aclgrphAttrType attr_type, const char_t *cfg_path); | |||||
| }; // namespace ge | }; // namespace ge | ||||
| #endif // INC_EXTERNAL_GE_IR_BUILD_H_ | #endif // INC_EXTERNAL_GE_IR_BUILD_H_ | ||||
| @@ -0,0 +1,210 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| /** | |||||
| * @file hccl.h | |||||
| * @brief HCCL API | |||||
| */ | |||||
| #ifndef HCCL_H_ | |||||
| #define HCCL_H_ | |||||
| #include <hccl/hccl_types.h> | |||||
| #include <acl/acl.h> | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif // __cplusplus | |||||
| /** | |||||
| * @brief Initialize HCCL. | |||||
| * | |||||
| * @param clusterInfo A string identifying the cluster info file path, include file name. | |||||
| * @param rank A integer identifying the identify for the rank. | |||||
| * @param comm A pointer identifying the initialized communication resource. | |||||
| * @return HcclResult | |||||
| * @see HcclCommDestroy() | |||||
| */ | |||||
| extern HcclResult HcclCommInitClusterInfo(const char *clusterInfo, uint32_t rank, HcclComm *comm); | |||||
| /** | |||||
| * @brief Get hccl root info. | |||||
| * | |||||
| * @param rootInfo A pointer identifying the hccl root info. | |||||
| * @return HcclResult | |||||
| */ | |||||
| extern HcclResult HcclGetRootInfo(HcclRootInfo *rootInfo); | |||||
| /** | |||||
| * @brief Initialize HCCL with root info. | |||||
| * | |||||
| * @param nRanks A integer identifying the rank size of the cluster. | |||||
| * @param rootInfo A struct identifying the hccl root info. | |||||
| * @param rank A integer identifying the identify for the rank. | |||||
| * @param comm A pointer identifying the initialized communication resource. | |||||
| * @return HcclResult | |||||
| * @see HcclCommDestroy() | |||||
| */ | |||||
| extern HcclResult HcclCommInitRootInfo(uint32_t nRanks, const HcclRootInfo *rootInfo, uint32_t rank, HcclComm *comm); | |||||
| /** | |||||
| * @brief AllReduce operator. | |||||
| * | |||||
| * @param sendBuf A pointer identifying the input data address of the operator. | |||||
| * @param recvBuf A pointer identifying the output data address of the operator. | |||||
| * @param count An integer(u64) identifying the number of the output data. | |||||
| * @param dataType The data type of the operator, must be one of the following types: int8, int16, int32, float16, | |||||
| * float32. | |||||
| * @param op The reduction type of the operator, must be one of the following types: sum, min, max, prod. | |||||
| * @param comm A pointer identifying the communication resource based on. | |||||
| * @param stream A pointer identifying the stream information. | |||||
| * @return HcclResult | |||||
| */ | |||||
| extern HcclResult HcclAllReduce(void *sendBuf, void *recvBuf, uint64_t count, HcclDataType dataType, HcclReduceOp op, | |||||
| HcclComm comm, aclrtStream stream); | |||||
| /** | |||||
| * @brief Broadcast operator. | |||||
| * | |||||
| * @param buf A pointer identifying the data address of the operator. | |||||
| * @param count An integer(u64) identifying the number of the data. | |||||
| * @param dataType The data type of the operator, must be one of the following types: int8, int32, float16, float32. | |||||
| * @param root An integer(u32) identifying the the root rank in the operator. | |||||
| * @param comm A pointer identifying the communication resource based on | |||||
| * @param stream A pointer identifying the stream information. | |||||
| * @return HcclResult | |||||
| */ | |||||
| extern HcclResult HcclBroadcast(void *buf, uint64_t count, HcclDataType dataType, uint32_t root, HcclComm comm, | |||||
| aclrtStream stream); | |||||
| /** | |||||
| * @brief ReduceScatter operator. | |||||
| * | |||||
| * @param sendBuf A pointer identifying the input data address of the operator. | |||||
| * @param recvBuf A pointer identifying the output data address of the operator. | |||||
| * @param recvCount An integer(u64) identifying the number of the output data. | |||||
| * @param dataType The data type of the operator, must be one of the following types: int8, int32, float16, float32. | |||||
| * @param op The reduction type of the operator, must be one of the following types: sum, min, max, prod. | |||||
| * @param comm A pointer identifying the communication resource based on. | |||||
| * @param stream A pointer identifying the stream information. | |||||
| * @return HcclResult | |||||
| */ | |||||
| extern HcclResult HcclReduceScatter(void *sendBuf, void *recvBuf, uint64_t recvCount, HcclDataType dataType, | |||||
| HcclReduceOp op, HcclComm comm, aclrtStream stream); | |||||
| /** | |||||
| * @brief AllGather operator. | |||||
| * | |||||
| * @param sendBuf A pointer identifying the input data address of the operator. | |||||
| * @param recvBuf A pointer identifying the output data address of the operator. | |||||
| * @param sendCount An integer(u64) identifying the number of the input data. | |||||
| * @param dataType The data type of the operator, must be one of the following types: int8, int32, float16, float32. | |||||
| * @param comm A pointer identifying the communication resource based on. | |||||
| * @param stream A pointer identifying the stream information. | |||||
| * @return HcclResult | |||||
| */ | |||||
| extern HcclResult HcclAllGather(void *sendBuf, void *recvBuf, uint64_t sendCount, HcclDataType dataType, HcclComm comm, | |||||
| aclrtStream stream); | |||||
| /** | |||||
| * @brief Get the rank size of this comm. | |||||
| * | |||||
| * @param comm A pointer identifying the communication resource based on. | |||||
| * @param rankSize A pointer identifying the rank size. | |||||
| * @return HcclResult | |||||
| */ | |||||
| extern HcclResult HcclGetRankSize(HcclComm comm, uint32_t *rankSize); | |||||
| /** | |||||
| * @brief Get the rank id of this comm. | |||||
| * | |||||
| * @param comm A pointer identifying the communication resource based on. | |||||
| * @param rankSize A pointer identifying the rank id. | |||||
| * @return HcclResult | |||||
| */ | |||||
| extern HcclResult HcclGetRankId(HcclComm comm, uint32_t *rank); | |||||
| /** | |||||
| * @brief Barrier operator. | |||||
| * | |||||
| * @param comm A pointer identifying the communication resource based on. | |||||
| * @param stream A pointer identifying the stream information. | |||||
| * @return HcclResult | |||||
| */ | |||||
| extern HcclResult HcclBarrier(HcclComm comm, aclrtStream stream); | |||||
| /** | |||||
| * @brief Send operator. | |||||
| * | |||||
| * @param sendBuff A pointer identifying the input data address of the operator. | |||||
| * @param count An integer(u64) identifying the number of the send data. | |||||
| * @param dataType The data type of the operator, must be one of the following types: int8, int32, float16, float32. | |||||
| * @param destRank An integer identifying the destination rank. | |||||
| * @param comm A pointer identifying the communication resource based on. | |||||
| * @param stream A pointer identifying the stream information. | |||||
| * @return HcclResult | |||||
| */ | |||||
| extern HcclResult HcclSend(void *sendBuf, uint64_t count, HcclDataType dataType, uint32_t destRank, HcclComm comm, | |||||
| aclrtStream stream); | |||||
| /** | |||||
| * @brief Recv operator. | |||||
| * | |||||
| * @param recvBuff A pointer identifying the output data address of the operator. | |||||
| * @param count An integer(u64) identifying the number of the receive data. | |||||
| * @param dataType The data type of the operator, must be one of the following types: int8, int32, float16, float32. | |||||
| * @param srcRank An integer identifying the source rank. | |||||
| * @param comm A pointer identifying the communication resource based on. | |||||
| * @param stream A pointer identifying the stream information. | |||||
| * @return HcclResult | |||||
| */ | |||||
| extern HcclResult HcclRecv(void *recvBuf, uint64_t count, HcclDataType dataType, uint32_t srcRank, HcclComm comm, | |||||
| aclrtStream stream); | |||||
| /** | |||||
| * @brief AlltoAllV operator. | |||||
| * | |||||
| * @param sendBuff A pointer identifying the input data address of the operator. | |||||
| * @param sendCounts Integer array, where entry i specifies the number of elements to send to rank i. | |||||
| * @param sdispls Integer array, where entry i specifies the displacement (offset from sendbuf, in units of sendtype) | |||||
| * from which to send data to rank i. | |||||
| * @param sendType Datatype of send buffer elements, must be one of the following types: int8, int32, int64, uint64, | |||||
| * float16, float32. | |||||
| * @param recvBuf A pointer identifying the output data address of the operator. | |||||
| * @param recvCounts Integer array, where entry j specifies the number of elements to receive from rank j. | |||||
| * @param rdispls Integer array, where entry j specifies the displacement (offset from recvbuf, in units of recvtype) to | |||||
| * which data from rank j should be written. | |||||
| * @param recvType Datatype of receive buffer elements, must be one of the following types: int8, int32, int64, uint64, | |||||
| * float16, float32. | |||||
| * @param comm A pointer identifying the communication resource based on. | |||||
| * @param stream A pointer identifying the stream information. | |||||
| * @return HcclResult | |||||
| */ | |||||
| extern HcclResult HcclAlltoAllV(const void *sendBuf, const void *sendCounts, const void *sdispls, HcclDataType sendType, | |||||
| const void *recvBuf, const void *recvCounts, const void *rdispls, HcclDataType recvType, | |||||
| HcclComm comm, aclrtStream stream); | |||||
| /** | |||||
| * @brief Destroy HCCL comm | |||||
| * | |||||
| * @param comm A pointer identifying the communication resource targetting | |||||
| * @return HcclResult | |||||
| * @see HcclCommInitClusterInfo() | |||||
| */ | |||||
| extern HcclResult HcclCommDestroy(HcclComm comm); | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif // __cplusplus | |||||
| #endif // HCCL_H_ | |||||
| @@ -0,0 +1,101 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| /** | |||||
| * @file hccl_types.h | |||||
| * @brief HCCL data type definition | |||||
| * | |||||
| */ | |||||
| #ifndef HCCL_TYPES_H_ | |||||
| #define HCCL_TYPES_H_ | |||||
| #include <stdint.h> | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif // __cplusplus | |||||
| /** | |||||
| * @brief HCCL functions return value definition | |||||
| */ | |||||
| typedef enum { | |||||
| HCCL_SUCCESS = 0, /**< success */ | |||||
| HCCL_E_PARA = 1, /**< parameter error */ | |||||
| HCCL_E_PTR = 2, /**< empty pointer */ | |||||
| HCCL_E_MEMORY = 3, /**< memory error */ | |||||
| HCCL_E_INTERNAL = 4, /**< internal error */ | |||||
| HCCL_E_NOT_SUPPORT = 5, /**< not support feature */ | |||||
| HCCL_E_NOT_FOUND = 6, /**< not found specific resource */ | |||||
| HCCL_E_UNAVAIL = 7, /**< resource unavailable */ | |||||
| HCCL_E_SYSCALL = 8, /**< call system interface error */ | |||||
| HCCL_E_TIMEOUT = 9, /**< timeout */ | |||||
| HCCL_E_OPEN_FILE_FAILURE = 10, /**< open file fail */ | |||||
| HCCL_E_TCP_CONNECT = 11, /**< tcp connect fail */ | |||||
| HCCL_E_ROCE_CONNECT = 12, /**< roce connect fail */ | |||||
| HCCL_E_TCP_TRANSFER = 13, /**< tcp transfer fail */ | |||||
| HCCL_E_ROCE_TRANSFER = 14, /**< roce transfer fail */ | |||||
| HCCL_E_RUNTIME = 15, /**< call runtime api fail */ | |||||
| HCCL_E_DRV = 16, /**< call driver api fail */ | |||||
| HCCL_E_PROFILING = 17, /**< call profiling api fail */ | |||||
| HCCL_E_CCE = 18, /**< call cce api fail */ | |||||
| HCCL_E_NETWORK = 19, /**< call network api fail */ | |||||
| HCCL_E_AGAIN = 20, /**< try again */ | |||||
| HCCL_E_RESERVED /**< reserved */ | |||||
| } HcclResult; | |||||
| /** | |||||
| * @brief handle to HCCL communicator | |||||
| */ | |||||
| typedef void *HcclComm; | |||||
| /** | |||||
| * @brief HCCL Reduction opperation | |||||
| */ | |||||
| typedef enum { | |||||
| HCCL_REDUCE_SUM = 0, /**< sum */ | |||||
| HCCL_REDUCE_PROD = 1, /**< prod */ | |||||
| HCCL_REDUCE_MAX = 2, /**< max */ | |||||
| HCCL_REDUCE_MIN = 3, /**< min */ | |||||
| HCCL_REDUCE_RESERVED /**< reserved */ | |||||
| } HcclReduceOp; | |||||
| /** | |||||
| * @brief HCCL data type | |||||
| */ | |||||
| typedef enum { | |||||
| HCCL_DATA_TYPE_INT8 = 0, /**< int8 */ | |||||
| HCCL_DATA_TYPE_INT16 = 1, /**< int16 */ | |||||
| HCCL_DATA_TYPE_INT32 = 2, /**< int32 */ | |||||
| HCCL_DATA_TYPE_FP16 = 3, /**< fp16 */ | |||||
| HCCL_DATA_TYPE_FP32 = 4, /**< fp32 */ | |||||
| HCCL_DATA_TYPE_INT64 = 5, /**< int64 */ | |||||
| HCCL_DATA_TYPE_UINT64 = 6, /**< uint64 */ | |||||
| HCCL_DATA_TYPE_RESERVED /**< reserved */ | |||||
| } HcclDataType; | |||||
| const uint32_t HCCL_ROOT_INFO_BYTES = 4108; // 4108: root info length | |||||
| /** | |||||
| * @brief HCCL root info | |||||
| */ | |||||
| typedef struct HcclRootInfoDef { | |||||
| char internal[HCCL_ROOT_INFO_BYTES]; | |||||
| } HcclRootInfo; | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif // __cplusplus | |||||
| #endif // HCCL_TYPES_H_ | |||||
| @@ -0,0 +1,123 @@ | |||||
| /** | |||||
| * Copyright 2019-2022 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef __INC_EXTERNEL_RT_ERROR_CODES_H__ | |||||
| #define __INC_EXTERNEL_RT_ERROR_CODES_H__ | |||||
| #include <stddef.h> | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| static const int32_t ACL_RT_SUCCESS = 0; // success | |||||
| static const int32_t ACL_ERROR_RT_PARAM_INVALID = 107000; // param invalid | |||||
| static const int32_t ACL_ERROR_RT_INVALID_DEVICEID = 107001; // invalid device id | |||||
| static const int32_t ACL_ERROR_RT_CONTEXT_NULL = 107002; // current context null | |||||
| static const int32_t ACL_ERROR_RT_STREAM_CONTEXT = 107003; // stream not in current context | |||||
| static const int32_t ACL_ERROR_RT_MODEL_CONTEXT = 107004; // model not in current context | |||||
| static const int32_t ACL_ERROR_RT_STREAM_MODEL = 107005; // stream not in model | |||||
| static const int32_t ACL_ERROR_RT_EVENT_TIMESTAMP_INVALID = 107006; // event timestamp invalid | |||||
| static const int32_t ACL_ERROR_RT_EVENT_TIMESTAMP_REVERSAL = 107007; // event timestamp reversal | |||||
| static const int32_t ACL_ERROR_RT_ADDR_UNALIGNED = 107008; // memory address unaligned | |||||
| static const int32_t ACL_ERROR_RT_FILE_OPEN = 107009; // open file failed | |||||
| static const int32_t ACL_ERROR_RT_FILE_WRITE = 107010; // write file failed | |||||
| static const int32_t ACL_ERROR_RT_STREAM_SUBSCRIBE = 107011; // error subscribe stream | |||||
| static const int32_t ACL_ERROR_RT_THREAD_SUBSCRIBE = 107012; // error subscribe thread | |||||
| static const int32_t ACL_ERROR_RT_GROUP_NOT_SET = 107013; // group not set | |||||
| static const int32_t ACL_ERROR_RT_GROUP_NOT_CREATE = 107014; // group not create | |||||
| static const int32_t ACL_ERROR_RT_STREAM_NO_CB_REG = 107015; // callback not register to stream | |||||
| static const int32_t ACL_ERROR_RT_INVALID_MEMORY_TYPE = 107016; // invalid memory type | |||||
| static const int32_t ACL_ERROR_RT_INVALID_HANDLE = 107017; // invalid handle | |||||
| static const int32_t ACL_ERROR_RT_INVALID_MALLOC_TYPE = 107018; // invalid malloc type | |||||
| static const int32_t ACL_ERROR_RT_WAIT_TIMEOUT = 107019; // wait timeout | |||||
| static const int32_t ACL_ERROR_RT_TASK_TIMEOUT = 107020; // task timeout | |||||
| static const int32_t ACL_ERROR_RT_FEATURE_NOT_SUPPORT = 207000; // feature not support | |||||
| static const int32_t ACL_ERROR_RT_MEMORY_ALLOCATION = 207001; // memory allocation error | |||||
| static const int32_t ACL_ERROR_RT_MEMORY_FREE = 207002; // memory free error | |||||
| static const int32_t ACL_ERROR_RT_AICORE_OVER_FLOW = 207003; // aicore over flow | |||||
| static const int32_t ACL_ERROR_RT_NO_DEVICE = 207004; // no device | |||||
| static const int32_t ACL_ERROR_RT_RESOURCE_ALLOC_FAIL = 207005; // resource alloc fail | |||||
| static const int32_t ACL_ERROR_RT_NO_PERMISSION = 207006; // no permission | |||||
| static const int32_t ACL_ERROR_RT_NO_EVENT_RESOURCE = 207007; // no event resource | |||||
| static const int32_t ACL_ERROR_RT_NO_STREAM_RESOURCE = 207008; // no stream resource | |||||
| static const int32_t ACL_ERROR_RT_NO_NOTIFY_RESOURCE = 207009; // no notify resource | |||||
| static const int32_t ACL_ERROR_RT_NO_MODEL_RESOURCE = 207010; // no model resource | |||||
| static const int32_t ACL_ERROR_RT_NO_CDQ_RESOURCE = 207011; // no cdq resource | |||||
| static const int32_t ACL_ERROR_RT_OVER_LIMIT = 207012; // over limit | |||||
| static const int32_t ACL_ERROR_RT_QUEUE_EMPTY = 207013; // queue is empty | |||||
| static const int32_t ACL_ERROR_RT_QUEUE_FULL = 207014; // queue is full | |||||
| static const int32_t ACL_ERROR_RT_REPEATED_INIT = 207015; // repeated init | |||||
| static const int32_t ACL_ERROR_RT_AIVEC_OVER_FLOW = 207016; // aivec over flow | |||||
| static const int32_t ACL_ERROR_RT_OVER_FLOW = 207017; // common over flow | |||||
| static const int32_t ACL_ERROR_RT_INTERNAL_ERROR = 507000; // runtime internal error | |||||
| static const int32_t ACL_ERROR_RT_TS_ERROR = 507001; // ts internel error | |||||
| static const int32_t ACL_ERROR_RT_STREAM_TASK_FULL = 507002; // task full in stream | |||||
| static const int32_t ACL_ERROR_RT_STREAM_TASK_EMPTY = 507003; // task empty in stream | |||||
| static const int32_t ACL_ERROR_RT_STREAM_NOT_COMPLETE = 507004; // stream not complete | |||||
| static const int32_t ACL_ERROR_RT_END_OF_SEQUENCE = 507005; // end of sequence | |||||
| static const int32_t ACL_ERROR_RT_EVENT_NOT_COMPLETE = 507006; // event not complete | |||||
| static const int32_t ACL_ERROR_RT_CONTEXT_RELEASE_ERROR = 507007; // context release error | |||||
| static const int32_t ACL_ERROR_RT_SOC_VERSION = 507008; // soc version error | |||||
| static const int32_t ACL_ERROR_RT_TASK_TYPE_NOT_SUPPORT = 507009; // task type not support | |||||
| static const int32_t ACL_ERROR_RT_LOST_HEARTBEAT = 507010; // ts lost heartbeat | |||||
| static const int32_t ACL_ERROR_RT_MODEL_EXECUTE = 507011; // model execute failed | |||||
| static const int32_t ACL_ERROR_RT_REPORT_TIMEOUT = 507012; // report timeout | |||||
| static const int32_t ACL_ERROR_RT_SYS_DMA = 507013; // sys dma error | |||||
| static const int32_t ACL_ERROR_RT_AICORE_TIMEOUT = 507014; // aicore timeout | |||||
| static const int32_t ACL_ERROR_RT_AICORE_EXCEPTION = 507015; // aicore exception | |||||
| static const int32_t ACL_ERROR_RT_AICORE_TRAP_EXCEPTION = 507016; // aicore trap exception | |||||
| static const int32_t ACL_ERROR_RT_AICPU_TIMEOUT = 507017; // aicpu timeout | |||||
| static const int32_t ACL_ERROR_RT_AICPU_EXCEPTION = 507018; // aicpu exception | |||||
| static const int32_t ACL_ERROR_RT_AICPU_DATADUMP_RSP_ERR = 507019; // aicpu datadump response error | |||||
| static const int32_t ACL_ERROR_RT_AICPU_MODEL_RSP_ERR = 507020; // aicpu model operate response error | |||||
| static const int32_t ACL_ERROR_RT_PROFILING_ERROR = 507021; // profiling error | |||||
| static const int32_t ACL_ERROR_RT_IPC_ERROR = 507022; // ipc error | |||||
| static const int32_t ACL_ERROR_RT_MODEL_ABORT_NORMAL = 507023; // model abort normal | |||||
| static const int32_t ACL_ERROR_RT_KERNEL_UNREGISTERING = 507024; // kernel unregistering | |||||
| static const int32_t ACL_ERROR_RT_RINGBUFFER_NOT_INIT = 507025; // ringbuffer not init | |||||
| static const int32_t ACL_ERROR_RT_RINGBUFFER_NO_DATA = 507026; // ringbuffer no data | |||||
| static const int32_t ACL_ERROR_RT_KERNEL_LOOKUP = 507027; // kernel lookup error | |||||
| static const int32_t ACL_ERROR_RT_KERNEL_DUPLICATE = 507028; // kernel register duplicate | |||||
| static const int32_t ACL_ERROR_RT_DEBUG_REGISTER_FAIL = 507029; // debug register failed | |||||
| static const int32_t ACL_ERROR_RT_DEBUG_UNREGISTER_FAIL = 507030; // debug unregister failed | |||||
| static const int32_t ACL_ERROR_RT_LABEL_CONTEXT = 507031; // label not in current context | |||||
| static const int32_t ACL_ERROR_RT_PROGRAM_USE_OUT = 507032; // program register num use out | |||||
| static const int32_t ACL_ERROR_RT_DEV_SETUP_ERROR = 507033; // device setup error | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_TIMEOUT = 507034; // vector core timeout | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_EXCEPTION = 507035; // vector core exception | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_TRAP_EXCEPTION = 507036; // vector core trap exception | |||||
| static const int32_t ACL_ERROR_RT_CDQ_BATCH_ABNORMAL = 507037; // cdq alloc batch abnormal | |||||
| static const int32_t ACL_ERROR_RT_DIE_MODE_CHANGE_ERROR = 507038; // can not change die mode | |||||
| static const int32_t ACL_ERROR_RT_DIE_SET_ERROR = 507039; // single die mode can not set die | |||||
| static const int32_t ACL_ERROR_RT_INVALID_DIEID = 507040; // invalid die id | |||||
| static const int32_t ACL_ERROR_RT_DIE_MODE_NOT_SET = 507041; // die mode not set | |||||
| static const int32_t ACL_ERROR_RT_AICORE_TRAP_READ_OVERFLOW = 507042; // aic trap read overflow | |||||
| static const int32_t ACL_ERROR_RT_AICORE_TRAP_WRITE_OVERFLOW = 507043; // aic trap write overflow | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_TRAP_READ_OVERFLOW = 507044; // aiv trap read overflow | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_TRAP_WRITE_OVERFLOW = 507045; // aiv trap write overflow | |||||
| static const int32_t ACL_ERROR_RT_DRV_INTERNAL_ERROR = 507899; // drv internal error | |||||
| static const int32_t ACL_ERROR_RT_AICPU_INTERNAL_ERROR = 507900; // aicpu internal error | |||||
| static const int32_t ACL_ERROR_RT_SOCKET_CLOSE = 507901; // hdc disconnect | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif // __INC_EXTERNEL_RT_ERROR_CODES_H__ | |||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -17,6 +17,7 @@ | |||||
| #ifndef INC_FRAMEWORK_COMMON_DEBUG_GE_LOG_H_ | #ifndef INC_FRAMEWORK_COMMON_DEBUG_GE_LOG_H_ | ||||
| #define INC_FRAMEWORK_COMMON_DEBUG_GE_LOG_H_ | #define INC_FRAMEWORK_COMMON_DEBUG_GE_LOG_H_ | ||||
| #include <cinttypes> | |||||
| #include <cstdint> | #include <cstdint> | ||||
| #include "framework/common/ge_inner_error_codes.h" | #include "framework/common/ge_inner_error_codes.h" | ||||
| @@ -33,7 +34,7 @@ | |||||
| extern "C" { | extern "C" { | ||||
| #endif | #endif | ||||
| #define GE_MODULE_NAME static_cast<int>(GE) | |||||
| #define GE_MODULE_NAME static_cast<int32_t>(GE) | |||||
| // trace status of log | // trace status of log | ||||
| enum TraceStatus { TRACE_INIT = 0, TRACE_RUNNING, TRACE_WAITING, TRACE_STOP }; | enum TraceStatus { TRACE_INIT = 0, TRACE_RUNNING, TRACE_WAITING, TRACE_STOP }; | ||||
| @@ -42,60 +43,79 @@ class GE_FUNC_VISIBILITY GeLog { | |||||
| public: | public: | ||||
| static uint64_t GetTid() { | static uint64_t GetTid() { | ||||
| #ifdef __GNUC__ | #ifdef __GNUC__ | ||||
| uint64_t tid = static_cast<uint64_t>(syscall(__NR_gettid)); | |||||
| const uint64_t tid = static_cast<uint64_t>(syscall(__NR_gettid)); | |||||
| #else | #else | ||||
| uint64_t tid = static_cast<uint64_t>(GetCurrentThreadId()); | |||||
| const uint64_t tid = static_cast<uint64_t>(GetCurrentThreadId()); | |||||
| #endif | #endif | ||||
| return tid; | return tid; | ||||
| } | } | ||||
| }; | }; | ||||
| inline bool IsLogEnable(int module_name, int log_level) { | |||||
| int32_t enable = CheckLogLevel(module_name, log_level); | |||||
| inline bool IsLogEnable(const int32_t module_name, const int32_t log_level) { | |||||
| const int32_t enable = CheckLogLevel(module_name, log_level); | |||||
| // 1:enable, 0:disable | // 1:enable, 0:disable | ||||
| return (enable == 1); | return (enable == 1); | ||||
| } | } | ||||
| #define GELOGE(ERROR_CODE, fmt, ...) \ | |||||
| dlog_error(GE_MODULE_NAME, "%lu %s: ErrorNo: %d(%s) %s" fmt, GeLog::GetTid(), __FUNCTION__, ERROR_CODE, \ | |||||
| ((GE_GET_ERRORNO_STR(ERROR_CODE)).c_str()), ErrorManager::GetInstance().GetLogHeader().c_str(), \ | |||||
| ##__VA_ARGS__) | |||||
| #define GELOGW(fmt, ...) \ | |||||
| if (IsLogEnable(GE_MODULE_NAME, DLOG_WARN)) \ | |||||
| dlog_warn(GE_MODULE_NAME, "%lu %s:" fmt, GeLog::GetTid(), __FUNCTION__, ##__VA_ARGS__) | |||||
| #define GELOGI(fmt, ...) \ | |||||
| if (IsLogEnable(GE_MODULE_NAME, DLOG_INFO)) \ | |||||
| dlog_info(GE_MODULE_NAME, "%lu %s:" fmt, GeLog::GetTid(), __FUNCTION__, ##__VA_ARGS__) | |||||
| #define GELOGD(fmt, ...) \ | |||||
| if (IsLogEnable(GE_MODULE_NAME, DLOG_DEBUG)) \ | |||||
| dlog_debug(GE_MODULE_NAME, "%lu %s:" fmt, GeLog::GetTid(), __FUNCTION__, ##__VA_ARGS__) | |||||
| #define GEEVENT(fmt, ...) dlog_event(GE_MODULE_NAME, "%lu %s:" fmt, GeLog::GetTid(), __FUNCTION__, ##__VA_ARGS__) | |||||
| #define GELOGT(VALUE, fmt, ...) \ | |||||
| do { \ | |||||
| TraceStatus stat = VALUE; \ | |||||
| const char *const TraceStatStr[] = {"INIT", "RUNNING", "WAITING", "STOP"}; \ | |||||
| int idx = static_cast<int>(stat); \ | |||||
| char *k = const_cast<char *>("status"); \ | |||||
| char *v = const_cast<char *>(TraceStatStr[idx]); \ | |||||
| KeyValue kv = {k, v}; \ | |||||
| DlogWithKV(static_cast<int>(GE_MODULE_NAME), DLOG_TRACE, &kv, 1, "%lu %s:" fmt, GeLog::GetTid(), __FUNCTION__, \ | |||||
| ##__VA_ARGS__); \ | |||||
| } while (0) | |||||
| #define GE_LOG_ERROR(MOD_NAME, ERROR_CODE, fmt, ...) \ | |||||
| dlog_error(MOD_NAME, "%lu %s: ErrorNo: %d(%s) %s" fmt, GeLog::GetTid(), __FUNCTION__, ERROR_CODE, \ | |||||
| ((GE_GET_ERRORNO_STR(ERROR_CODE)).c_str()), ErrorManager::GetInstance().GetLogHeader().c_str(), \ | |||||
| ##__VA_ARGS__) | |||||
| #define GELOGE(ERROR_CODE, fmt, ...) \ | |||||
| do { \ | |||||
| dlog_error(GE_MODULE_NAME, "%" PRIu64 " %s: ErrorNo: %" PRIuLEAST8 "(%s) %s" fmt, GeLog::GetTid(), \ | |||||
| &__FUNCTION__[0], (ERROR_CODE), ((GE_GET_ERRORNO_STR(ERROR_CODE)).c_str()), \ | |||||
| ErrorManager::GetInstance().GetLogHeader().c_str(), ##__VA_ARGS__); \ | |||||
| } while (false) | |||||
| #define GELOGW(fmt, ...) \ | |||||
| do { \ | |||||
| if (IsLogEnable(GE_MODULE_NAME, DLOG_WARN)) { \ | |||||
| dlog_warn(GE_MODULE_NAME, "%" PRIu64 " %s:" fmt, GeLog::GetTid(), &__FUNCTION__[0], ##__VA_ARGS__); \ | |||||
| } \ | |||||
| } while (false) | |||||
| #define GELOGI(fmt, ...) \ | |||||
| do { \ | |||||
| if (IsLogEnable(GE_MODULE_NAME, DLOG_INFO)) { \ | |||||
| dlog_info(GE_MODULE_NAME, "%" PRIu64 " %s:" fmt, GeLog::GetTid(), &__FUNCTION__[0], ##__VA_ARGS__); \ | |||||
| } \ | |||||
| } while (false) | |||||
| #define GELOGD(fmt, ...) \ | |||||
| do { \ | |||||
| if (IsLogEnable(GE_MODULE_NAME, DLOG_DEBUG)) { \ | |||||
| dlog_debug(GE_MODULE_NAME, "%" PRIu64 " %s:" fmt, GeLog::GetTid(), &__FUNCTION__[0], ##__VA_ARGS__); \ | |||||
| } \ | |||||
| } while (false) | |||||
| #define GEEVENT(fmt, ...) \ | |||||
| do { \ | |||||
| dlog_event(GE_MODULE_NAME, "%" PRIu64 " %s:" fmt, GeLog::GetTid(), &__FUNCTION__[0], ##__VA_ARGS__); \ | |||||
| } while (false) | |||||
| #define GELOGT(VALUE, fmt, ...) \ | |||||
| do { \ | |||||
| TraceStatus stat = (VALUE); \ | |||||
| const char_t *const TraceStatStr[] = {"INIT", "RUNNING", "WAITING", "STOP"}; \ | |||||
| const int32_t idx = static_cast<int32_t>(stat); \ | |||||
| char_t *k = const_cast<char_t *>("status"); \ | |||||
| char_t *v = const_cast<char_t *>(TraceStatStr[idx]); \ | |||||
| KeyValue kv = {k, v}; \ | |||||
| DlogWithKV(GE_MODULE_NAME, DLOG_TRACE, &kv, 1, "%" PRIu64 " %s:" fmt, GeLog::GetTid(), &__FUNCTION__[0], \ | |||||
| ##__VA_ARGS__); \ | |||||
| } while (false) | |||||
| #define GE_LOG_ERROR(MOD_NAME, ERROR_CODE, fmt, ...) \ | |||||
| do { \ | |||||
| dlog_error((MOD_NAME), "%" PRIu64 " %s: ErrorNo: %" PRIuLEAST8 "(%s) %s" fmt, GeLog::GetTid(), &__FUNCTION__[0], \ | |||||
| (ERROR_CODE), ((GE_GET_ERRORNO_STR(ERROR_CODE)).c_str()), \ | |||||
| ErrorManager::GetInstance().GetLogHeader().c_str(), ##__VA_ARGS__); \ | |||||
| } while (false) | |||||
| // print memory when it is greater than 1KB. | // print memory when it is greater than 1KB. | ||||
| #define GE_PRINT_DYNAMIC_MEMORY(FUNC, PURPOSE, SIZE) \ | |||||
| do { \ | |||||
| if ((SIZE) > 1024) { \ | |||||
| GELOGI("MallocMemory, func=%s, size=%zu, purpose=%s", (#FUNC), static_cast<size_t>(SIZE), (PURPOSE)); \ | |||||
| } \ | |||||
| } while (0); | |||||
| #define GE_PRINT_DYNAMIC_MEMORY(FUNC, PURPOSE, SIZE) \ | |||||
| do { \ | |||||
| if (static_cast<size_t>(SIZE) > 1024UL) { \ | |||||
| GELOGI("MallocMemory, func=%s, size=%" PRIu64 ", purpose=%s", (#FUNC), static_cast<size_t>(SIZE), (PURPOSE)); \ | |||||
| } \ | |||||
| } while (false) | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -19,17 +19,14 @@ | |||||
| #include <string> | #include <string> | ||||
| #include <sstream> | #include <sstream> | ||||
| #include <securec.h> | |||||
| #include "runtime/rt.h" | |||||
| #include "common/string_util.h" | |||||
| #include "common/util.h" | |||||
| #include "common/util/error_manager/error_manager.h" | |||||
| #include "framework/common/string_util.h" | |||||
| #include "framework/common/util.h" | |||||
| #include "framework/common/debug/ge_log.h" | #include "framework/common/debug/ge_log.h" | ||||
| #include "ge/ge_api_error_codes.h" | |||||
| #include "external/ge/ge_api_error_codes.h" | |||||
| #if !defined(__ANDROID__) && !defined(ANDROID) | #if !defined(__ANDROID__) && !defined(ANDROID) | ||||
| #define DOMI_LOGE(fmt, ...) GE_LOG_ERROR(GE_MODULE_NAME, ge::FAILED, fmt, ##__VA_ARGS__) | |||||
| #define DOMI_LOGE(fmt, ...) GE_LOG_ERROR(GE_MODULE_NAME, (ge::FAILED), fmt, ##__VA_ARGS__) | |||||
| #else | #else | ||||
| #include <android/log.h> | #include <android/log.h> | ||||
| #if defined(BUILD_VERSION_PERF) | #if defined(BUILD_VERSION_PERF) | ||||
| @@ -52,196 +49,116 @@ | |||||
| GELOGW(__VA_ARGS__); \ | GELOGW(__VA_ARGS__); \ | ||||
| } | } | ||||
| #define GE_LOGE_IF(condition, ...) \ | |||||
| if ((condition)) { \ | |||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| #define GE_LOGE_IF(condition, ...) \ | |||||
| if ((condition)) { \ | |||||
| GELOGE((ge::FAILED), __VA_ARGS__); \ | |||||
| } | } | ||||
| // If expr is not SUCCESS, print the log and return the same value | // If expr is not SUCCESS, print the log and return the same value | ||||
| #define GE_CHK_STATUS_RET(expr, ...) \ | |||||
| do { \ | |||||
| const ge::Status _status = (expr); \ | |||||
| if (_status != ge::SUCCESS) { \ | |||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| return _status; \ | |||||
| } \ | |||||
| } while (0); | |||||
| #define GE_CHK_STATUS_RET(expr, ...) \ | |||||
| do { \ | |||||
| const ge::Status _chk_status = (expr); \ | |||||
| if (_chk_status != ge::SUCCESS) { \ | |||||
| GELOGE((ge::FAILED), __VA_ARGS__); \ | |||||
| return _chk_status; \ | |||||
| } \ | |||||
| } while (false) | |||||
| // If expr is not SUCCESS, print the log and do not execute return | // If expr is not SUCCESS, print the log and do not execute return | ||||
| #define GE_CHK_STATUS(expr, ...) \ | |||||
| do { \ | |||||
| const ge::Status _status = (expr); \ | |||||
| if (_status != ge::SUCCESS) { \ | |||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| } \ | |||||
| } while (0); | |||||
| #define GE_CHK_STATUS(expr, ...) \ | |||||
| do { \ | |||||
| const ge::Status _chk_status = (expr); \ | |||||
| if (_chk_status != ge::SUCCESS) { \ | |||||
| GELOGE(_chk_status, __VA_ARGS__); \ | |||||
| } \ | |||||
| } while (false) | |||||
| // If expr is not SUCCESS, return the same value | // If expr is not SUCCESS, return the same value | ||||
| #define GE_CHK_STATUS_RET_NOLOG(expr) \ | |||||
| do { \ | |||||
| const ge::Status _status = (expr); \ | |||||
| if (_status != ge::SUCCESS) { \ | |||||
| return _status; \ | |||||
| } \ | |||||
| } while (0); | |||||
| #define GE_CHK_STATUS_RET_NOLOG(expr) \ | |||||
| do { \ | |||||
| const ge::Status _chk_status = (expr); \ | |||||
| if (_chk_status != ge::SUCCESS) { \ | |||||
| return _chk_status; \ | |||||
| } \ | |||||
| } while (false) | |||||
| // If expr is not GRAPH_SUCCESS, print the log and return FAILED | // If expr is not GRAPH_SUCCESS, print the log and return FAILED | ||||
| #define GE_CHK_GRAPH_STATUS_RET(expr, ...) \ | #define GE_CHK_GRAPH_STATUS_RET(expr, ...) \ | ||||
| do { \ | do { \ | ||||
| if ((expr) != ge::GRAPH_SUCCESS) { \ | if ((expr) != ge::GRAPH_SUCCESS) { \ | ||||
| REPORT_CALL_ERROR("E19999", "Operator graph failed"); \ | REPORT_CALL_ERROR("E19999", "Operator graph failed"); \ | ||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| return FAILED; \ | |||||
| GELOGE(ge::FAILED, __VA_ARGS__); \ | |||||
| return (ge::FAILED); \ | |||||
| } \ | } \ | ||||
| } while (0); | |||||
| } while (false) | |||||
| // If expr is not SUCCESS, print the log and execute a custom statement | // If expr is not SUCCESS, print the log and execute a custom statement | ||||
| #define GE_CHK_STATUS_EXEC(expr, exec_expr, ...) \ | |||||
| do { \ | |||||
| const ge::Status _status = (expr); \ | |||||
| GE_CHK_BOOL_EXEC(_status == SUCCESS, exec_expr, __VA_ARGS__); \ | |||||
| } while (0); | |||||
| #define GE_CHK_STATUS_EXEC(expr, exec_expr, ...) \ | |||||
| do { \ | |||||
| const ge::Status _chk_status = (expr); \ | |||||
| GE_CHK_BOOL_EXEC(_chk_status == SUCCESS, exec_expr, __VA_ARGS__); \ | |||||
| } while (false) | |||||
| // If expr is not true, print the log and return the specified status | // If expr is not true, print the log and return the specified status | ||||
| #define GE_CHK_BOOL_RET_STATUS(expr, _status, ...) \ | #define GE_CHK_BOOL_RET_STATUS(expr, _status, ...) \ | ||||
| do { \ | do { \ | ||||
| bool b = (expr); \ | |||||
| const bool b = (expr); \ | |||||
| if (!b) { \ | if (!b) { \ | ||||
| REPORT_INNER_ERROR("E19999", __VA_ARGS__); \ | REPORT_INNER_ERROR("E19999", __VA_ARGS__); \ | ||||
| GELOGE(_status, __VA_ARGS__); \ | |||||
| return _status; \ | |||||
| GELOGE((_status), __VA_ARGS__); \ | |||||
| return (_status); \ | |||||
| } \ | } \ | ||||
| } while (0); | |||||
| } while (false) | |||||
| // If expr is not true, print the log and return the specified status | // If expr is not true, print the log and return the specified status | ||||
| #define GE_CHK_BOOL_RET_STATUS_NOLOG(expr, _status, ...) \ | #define GE_CHK_BOOL_RET_STATUS_NOLOG(expr, _status, ...) \ | ||||
| do { \ | do { \ | ||||
| bool b = (expr); \ | |||||
| const bool b = (expr); \ | |||||
| if (!b) { \ | if (!b) { \ | ||||
| return _status; \ | |||||
| return (_status); \ | |||||
| } \ | } \ | ||||
| } while (0); | |||||
| } while (false) | |||||
| // If expr is not true, print the log and execute a custom statement | // If expr is not true, print the log and execute a custom statement | ||||
| #define GE_CHK_BOOL_EXEC(expr, exec_expr, ...) \ | #define GE_CHK_BOOL_EXEC(expr, exec_expr, ...) \ | ||||
| { \ | { \ | ||||
| bool b = (expr); \ | |||||
| const bool b = (expr); \ | |||||
| if (!b) { \ | if (!b) { \ | ||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| GELOGE(ge::FAILED, __VA_ARGS__); \ | |||||
| exec_expr; \ | exec_expr; \ | ||||
| } \ | } \ | ||||
| } | } | ||||
| // If expr is not true, print the log and execute a custom statement | |||||
| #define GE_CHK_BOOL_EXEC_WARN(expr, exec_expr, ...) \ | |||||
| { \ | |||||
| bool b = (expr); \ | |||||
| if (!b) { \ | |||||
| GELOGW(__VA_ARGS__); \ | |||||
| exec_expr; \ | |||||
| } \ | |||||
| } | |||||
| // If expr is not true, print the log and execute a custom statement | |||||
| #define GE_CHK_BOOL_EXEC_INFO(expr, exec_expr, ...) \ | |||||
| { \ | |||||
| bool b = (expr); \ | |||||
| if (!b) { \ | |||||
| GELOGI(__VA_ARGS__); \ | |||||
| exec_expr; \ | |||||
| } \ | |||||
| } | |||||
| // If expr is not true, print the log and execute a custom statement | |||||
| #define GE_CHK_BOOL_TRUE_EXEC_INFO(expr, exec_expr, ...) \ | |||||
| { \ | |||||
| bool b = (expr); \ | |||||
| if (b) { \ | |||||
| GELOGI(__VA_ARGS__); \ | |||||
| exec_expr; \ | |||||
| } \ | |||||
| } | |||||
| // If expr is true, print logs and execute custom statements | |||||
| #define GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(expr, exec_expr, ...) \ | |||||
| { \ | |||||
| bool b = (expr); \ | |||||
| if (b) { \ | |||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| exec_expr; \ | |||||
| } \ | |||||
| } | |||||
| // If expr is true, print the Information log and execute a custom statement | |||||
| #define GE_CHK_TRUE_EXEC_INFO(expr, exec_expr, ...) \ | |||||
| { \ | |||||
| bool b = (expr); \ | |||||
| if (b) { \ | |||||
| GELOGI(__VA_ARGS__); \ | |||||
| exec_expr; \ | |||||
| } \ | |||||
| } | |||||
| // If expr is not SUCCESS, print the log and execute the expression + return | |||||
| #define GE_CHK_BOOL_TRUE_RET_VOID(expr, exec_expr, ...) \ | |||||
| { \ | |||||
| bool b = (expr); \ | |||||
| if (b) { \ | |||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| exec_expr; \ | |||||
| return; \ | |||||
| } \ | |||||
| } | |||||
| // If expr is not SUCCESS, print the log and execute the expression + return _status | |||||
| #define GE_CHK_BOOL_TRUE_EXEC_RET_STATUS(expr, _status, exec_expr, ...) \ | |||||
| { \ | |||||
| bool b = (expr); \ | |||||
| if (b) { \ | |||||
| REPORT_INNER_ERROR("E19999", __VA_ARGS__); \ | |||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| exec_expr; \ | |||||
| return _status; \ | |||||
| } \ | |||||
| } | |||||
| // If expr is not true, execute a custom statement | |||||
| #define GE_CHK_BOOL_EXEC_NOLOG(expr, exec_expr) \ | |||||
| { \ | |||||
| bool b = (expr); \ | |||||
| if (!b) { \ | |||||
| exec_expr; \ | |||||
| } \ | |||||
| } | |||||
| // -----------------runtime related macro definitions------------------------------- | // -----------------runtime related macro definitions------------------------------- | ||||
| // If expr is not RT_ERROR_NONE, print the log | // If expr is not RT_ERROR_NONE, print the log | ||||
| #define GE_CHK_RT(expr) \ | |||||
| do { \ | |||||
| rtError_t _rt_ret = (expr); \ | |||||
| if (_rt_ret != RT_ERROR_NONE) { \ | |||||
| DOMI_LOGE("Call rt api failed, ret: 0x%X", _rt_ret); \ | |||||
| } \ | |||||
| } while (0); | |||||
| #define GE_CHK_RT(expr) \ | |||||
| do { \ | |||||
| const rtError_t _rt_err = (expr); \ | |||||
| if (_rt_err != RT_ERROR_NONE) { \ | |||||
| GELOGE(ge::RT_FAILED, "Call rt api failed, ret: 0x%X", _rt_err); \ | |||||
| } \ | |||||
| } while (false) | |||||
| // If expr is not RT_ERROR_NONE, print the log and execute the exec_expr expression | // If expr is not RT_ERROR_NONE, print the log and execute the exec_expr expression | ||||
| #define GE_CHK_RT_EXEC(expr, exec_expr) \ | |||||
| { \ | |||||
| rtError_t _rt_ret = (expr); \ | |||||
| if (_rt_ret != RT_ERROR_NONE) { \ | |||||
| DOMI_LOGE("Call rt api failed, ret: 0x%X", _rt_ret); \ | |||||
| exec_expr; \ | |||||
| } \ | |||||
| } | |||||
| #define GE_CHK_RT_EXEC(expr, exec_expr) \ | |||||
| do { \ | |||||
| const rtError_t _rt_ret = (expr); \ | |||||
| if (_rt_ret != RT_ERROR_NONE) { \ | |||||
| GELOGE(ge::RT_FAILED, "Call rt api failed, ret: 0x%X", _rt_ret); \ | |||||
| exec_expr; \ | |||||
| } \ | |||||
| } while (false) | |||||
| // If expr is not RT_ERROR_NONE, print the log and return | // If expr is not RT_ERROR_NONE, print the log and return | ||||
| #define GE_CHK_RT_RET(expr) \ | #define GE_CHK_RT_RET(expr) \ | ||||
| do { \ | do { \ | ||||
| rtError_t _rt_ret = (expr); \ | |||||
| const rtError_t _rt_ret = (expr); \ | |||||
| if (_rt_ret != RT_ERROR_NONE) { \ | if (_rt_ret != RT_ERROR_NONE) { \ | ||||
| REPORT_CALL_ERROR("E19999", "Call %s fail, ret: 0x%X", #expr, _rt_ret); \ | REPORT_CALL_ERROR("E19999", "Call %s fail, ret: 0x%X", #expr, _rt_ret); \ | ||||
| DOMI_LOGE("Call rt api failed, ret: 0x%X", _rt_ret); \ | |||||
| GELOGE(ge::RT_FAILED, "Call rt api failed, ret: 0x%X", _rt_ret); \ | |||||
| return RT_ERROR_TO_GE_STATUS(_rt_ret); \ | return RT_ERROR_TO_GE_STATUS(_rt_ret); \ | ||||
| } \ | } \ | ||||
| } while (0); | |||||
| } while (false) | |||||
| // If expr is true, execute exec_expr without printing logs | // If expr is true, execute exec_expr without printing logs | ||||
| #define GE_IF_BOOL_EXEC(expr, exec_expr) \ | #define GE_IF_BOOL_EXEC(expr, exec_expr) \ | ||||
| @@ -256,32 +173,32 @@ | |||||
| try { \ | try { \ | ||||
| exec_expr0; \ | exec_expr0; \ | ||||
| } catch (const std::bad_alloc &) { \ | } catch (const std::bad_alloc &) { \ | ||||
| DOMI_LOGE("Make shared failed"); \ | |||||
| GELOGE(ge::FAILED, "Make shared failed"); \ | |||||
| exec_expr1; \ | exec_expr1; \ | ||||
| } | } | ||||
| #define GE_ERRORLOG_AND_ERRORMSG(_status, errormsg) \ | |||||
| { \ | |||||
| GELOGE(_status, "[Check][InnerData]%s", errormsg); \ | |||||
| REPORT_INNER_ERROR("E19999", "%s", errormsg); \ | |||||
| } | |||||
| #define GE_WARNINGLOG_AND_ERRORMSG(errormsg) \ | |||||
| { \ | |||||
| GELOGW("%s", errormsg); \ | |||||
| ErrorManager::GetInstance().ATCReportErrMessage("E19021", {"reason"}, {errormsg}); \ | |||||
| } | |||||
| #define GE_CHK_LOG_AND_ERRORMSG(expr, _status, errormsg) \ | |||||
| do { \ | |||||
| bool b = (expr); \ | |||||
| if (!b) { \ | |||||
| GELOGE(_status, "%s", errormsg); \ | |||||
| ErrorManager::GetInstance().ATCReportErrMessage("E19021", {"reason"}, {errormsg}); \ | |||||
| return _status; \ | |||||
| } \ | |||||
| } while (0) | |||||
| #define GE_ERRORLOG_AND_ERRORMSG(_status, errormsg) \ | |||||
| { \ | |||||
| GELOGE((_status), "[Check][InnerData]%s", (errormsg)); \ | |||||
| REPORT_INNER_ERROR("E19999", "%s", (errormsg)); \ | |||||
| } | |||||
| #define GE_WARNINGLOG_AND_ERRORMSG(errormsg) \ | |||||
| { \ | |||||
| GELOGW("%s", (errormsg)); \ | |||||
| ErrorManager::GetInstance().ATCReportErrMessage("E10052", {"reason"}, {(errormsg)}); \ | |||||
| } | |||||
| #define GE_CHK_LOG_AND_ERRORMSG(expr, _status, errormsg) \ | |||||
| do { \ | |||||
| const bool b = (expr); \ | |||||
| if (!b) { \ | |||||
| GELOGE((_status), "%s", (errormsg)); \ | |||||
| ErrorManager::GetInstance().ATCReportErrMessage("E10052", {"reason"}, {(errormsg)}); \ | |||||
| return (_status); \ | |||||
| } \ | |||||
| } while (false) | |||||
| namespace ge { | |||||
| template <typename T> | template <typename T> | ||||
| GE_FUNC_VISIBILITY std::string FmtToStr(const T &t) { | GE_FUNC_VISIBILITY std::string FmtToStr(const T &t) { | ||||
| std::string fmt; | std::string fmt; | ||||
| @@ -290,5 +207,5 @@ GE_FUNC_VISIBILITY std::string FmtToStr(const T &t) { | |||||
| fmt = st.str(); | fmt = st.str(); | ||||
| return fmt; | return fmt; | ||||
| } | } | ||||
| } // namespace ge | |||||
| #endif // INC_FRAMEWORK_COMMON_DEBUG_LOG_H_ | #endif // INC_FRAMEWORK_COMMON_DEBUG_LOG_H_ | ||||
| @@ -0,0 +1,51 @@ | |||||
| /** | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_FRAMEWORK_COMMON_FILE_CONSTANT_UTIL_H | |||||
| #define INC_FRAMEWORK_COMMON_FILE_CONSTANT_UTIL_H | |||||
| #include <map> | |||||
| #include <string> | |||||
| #include <vector> | |||||
| #include "ge/ge_api_error_codes.h" | |||||
| #include "nlohmann/json.hpp" | |||||
| #include "graph/op_desc.h" | |||||
| #include "graph/ge_tensor.h" | |||||
| namespace ge { | |||||
| struct FileConstantInfo { | |||||
| std::string value_bin_file_id; | |||||
| std::string value_bin_file_path; | |||||
| }; | |||||
| struct OptionInfo { | |||||
| std::vector<FileConstantInfo> info; | |||||
| }; | |||||
| void from_json(const nlohmann::json &j, FileConstantInfo &info); | |||||
| void from_json(const nlohmann::json &j, OptionInfo &option_info); | |||||
| Status GetFilePathFromOption(std::map<std::string, std::string> &file_id_and_path_map); | |||||
| Status CopyOneWeightFromFile(const void *const curr_dev_ptr, const std::string &value, const size_t file_constant_size, | |||||
| size_t &left_size); | |||||
| Status GetFilePath(const OpDescPtr &op_desc, const std::map<std::string, std::string> &file_id_and_path_map, | |||||
| std::string &file_path); | |||||
| } // namespace ge | |||||
| #endif // INC_FRAMEWORK_COMMON_FILE_CONSTANT_UTIL_H | |||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -20,14 +20,18 @@ | |||||
| #if defined(_MSC_VER) | #if defined(_MSC_VER) | ||||
| #ifdef FUNC_VISIBILITY | #ifdef FUNC_VISIBILITY | ||||
| #define GE_FUNC_VISIBILITY _declspec(dllexport) | #define GE_FUNC_VISIBILITY _declspec(dllexport) | ||||
| #define GE_OBJECT_VISIBILITY | |||||
| #else | #else | ||||
| #define GE_FUNC_VISIBILITY | #define GE_FUNC_VISIBILITY | ||||
| #define GE_OBJECT_VISIBILITY | |||||
| #endif | #endif | ||||
| #else | #else | ||||
| #ifdef FUNC_VISIBILITY | #ifdef FUNC_VISIBILITY | ||||
| #define GE_FUNC_VISIBILITY __attribute__((visibility("default"))) | #define GE_FUNC_VISIBILITY __attribute__((visibility("default"))) | ||||
| #define GE_OBJECT_VISIBILITY | |||||
| #else | #else | ||||
| #define GE_FUNC_VISIBILITY | #define GE_FUNC_VISIBILITY | ||||
| #define GE_OBJECT_VISIBILITY __attribute__((visibility("hidden"))) | |||||
| #endif | #endif | ||||
| #endif | #endif | ||||
| @@ -42,23 +46,23 @@ | |||||
| #define DECLARE_ERRORNO_OME(name, value) DECLARE_ERRORNO(SYSID_FWK, MODID_OME, name, value) | #define DECLARE_ERRORNO_OME(name, value) DECLARE_ERRORNO(SYSID_FWK, MODID_OME, name, value) | ||||
| #define DECLARE_ERRORNO_CALIBRATION(name, value) DECLARE_ERRORNO(SYSID_FWK, MODID_CALIBRATION, name, value) | #define DECLARE_ERRORNO_CALIBRATION(name, value) DECLARE_ERRORNO(SYSID_FWK, MODID_CALIBRATION, name, value) | ||||
| #define DEF_ERRORNO(name, desc) const ErrorNoRegisterar g_##name##_errorno(name, desc); | |||||
| #define DEF_ERRORNO(name, desc) const ErrorNoRegisterar g_##name##_errorno((name), (desc)); | |||||
| // Interface for Obtaining Error Code Description | // Interface for Obtaining Error Code Description | ||||
| #define GET_ERRORNO_STR(value) domi::StatusFactory::Instance()->GetErrDesc(value) | #define GET_ERRORNO_STR(value) domi::StatusFactory::Instance()->GetErrDesc(value) | ||||
| const int MODID_OMG = 1; // OMG module ID | |||||
| const int MODID_OME = 2; // OME module ID | |||||
| const int MODID_CALIBRATION = 3; // Calibration module ID | |||||
| namespace domi { | namespace domi { | ||||
| constexpr int32_t MODID_OMG = 1; // OMG module ID | |||||
| constexpr int32_t MODID_OME = 2; // OME module ID | |||||
| constexpr int32_t MODID_CALIBRATION = 3; // Calibration module ID | |||||
| class GE_FUNC_VISIBILITY StatusFactory { | class GE_FUNC_VISIBILITY StatusFactory { | ||||
| public: | public: | ||||
| static StatusFactory *Instance(); | static StatusFactory *Instance(); | ||||
| void RegisterErrorNo(uint32_t err, const std::string &desc); | |||||
| void RegisterErrorNo(const uint32_t err, const std::string &desc); | |||||
| std::string GetErrDesc(uint32_t err); | |||||
| std::string GetErrDesc(const uint32_t err); | |||||
| protected: | protected: | ||||
| StatusFactory() {} | StatusFactory() {} | ||||
| @@ -70,7 +74,9 @@ class GE_FUNC_VISIBILITY StatusFactory { | |||||
| class GE_FUNC_VISIBILITY ErrorNoRegisterar { | class GE_FUNC_VISIBILITY ErrorNoRegisterar { | ||||
| public: | public: | ||||
| ErrorNoRegisterar(uint32_t err, const std::string &desc) { StatusFactory::Instance()->RegisterErrorNo(err, desc); } | |||||
| ErrorNoRegisterar(const uint32_t err, const std::string &desc) { | |||||
| StatusFactory::Instance()->RegisterErrorNo(err, desc); | |||||
| } | |||||
| ~ErrorNoRegisterar() {} | ~ErrorNoRegisterar() {} | ||||
| }; | }; | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -19,7 +19,7 @@ | |||||
| #include <vector> | #include <vector> | ||||
| #include "common/ge_inner_error_codes.h" | |||||
| #include "framework/common/ge_inner_error_codes.h" | |||||
| #include "graph/tensor.h" | #include "graph/tensor.h" | ||||
| namespace ge { | namespace ge { | ||||
| @@ -33,7 +33,7 @@ class GE_FUNC_VISIBILITY GeFormatUtil { | |||||
| /// @param [out] dst_shape destination shape | /// @param [out] dst_shape destination shape | ||||
| /// @return Status | /// @return Status | ||||
| /// | /// | ||||
| static Status TransShape(const TensorDesc &src_desc, Format dst_format, std::vector<int64_t> &dst_shape); | |||||
| static Status TransShape(const TensorDesc &src_desc, const Format dst_format, std::vector<int64_t> &dst_shape); | |||||
| }; | }; | ||||
| } // namespace ge | } // namespace ge | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -22,17 +22,57 @@ | |||||
| #include <string> | #include <string> | ||||
| #include "ge/ge_api_error_codes.h" | #include "ge/ge_api_error_codes.h" | ||||
| // Each module defines error codes using the following macros, name can not be modified to (name) | |||||
| #define GE_ERRORNO_COMMON(name, value, desc) \ | |||||
| GE_ERRORNO(ge::InnLogRuntime::RT_HOST, ge::InnErrorCodeType::ERROR_CODE, ge::InnErrorLevel::COMMON_LEVEL, \ | |||||
| ge::InnSystemIdType::SYSID_GE, ge::InnSubModuleId::COMMON_MODULE, name, (value), (desc)) | |||||
| #define GE_ERRORNO_CLIENT(name, value, desc) \ | |||||
| GE_ERRORNO(ge::InnLogRuntime::RT_HOST, ge::InnErrorCodeType::ERROR_CODE, ge::InnErrorLevel::COMMON_LEVEL, \ | |||||
| ge::InnSystemIdType::SYSID_GE, ge::InnSubModuleId::CLIENT_MODULE, name, (value), (desc)) | |||||
| #define GE_ERRORNO_INIT(name, value, desc) \ | |||||
| GE_ERRORNO(ge::InnLogRuntime::RT_HOST, ge::InnErrorCodeType::ERROR_CODE, ge::InnErrorLevel::COMMON_LEVEL, \ | |||||
| ge::InnSystemIdType::SYSID_GE, ge::InnSubModuleId::INIT_MODULE, name, (value), (desc)) | |||||
| #define GE_ERRORNO_SESSION(name, value, desc) \ | |||||
| GE_ERRORNO(ge::InnLogRuntime::RT_HOST, ge::InnErrorCodeType::ERROR_CODE, ge::InnErrorLevel::COMMON_LEVEL, \ | |||||
| ge::InnSystemIdType::SYSID_GE, ge::InnSubModuleId::SESSION_MODULE, name, (value), (desc)) | |||||
| #define GE_ERRORNO_GRAPH(name, value, desc) \ | |||||
| GE_ERRORNO(ge::InnLogRuntime::RT_HOST, ge::InnErrorCodeType::ERROR_CODE, ge::InnErrorLevel::COMMON_LEVEL, \ | |||||
| ge::InnSystemIdType::SYSID_GE, ge::InnSubModuleId::GRAPH_MODULE, name, (value), (desc)) | |||||
| #define GE_ERRORNO_ENGINE(name, value, desc) \ | |||||
| GE_ERRORNO(ge::InnLogRuntime::RT_HOST, ge::InnErrorCodeType::ERROR_CODE, ge::InnErrorLevel::COMMON_LEVEL, \ | |||||
| ge::InnSystemIdType::SYSID_GE, ge::InnSubModuleId::ENGINE_MODULE, name, (value), (desc)) | |||||
| #define GE_ERRORNO_OPS(name, value, desc) \ | |||||
| GE_ERRORNO(ge::InnLogRuntime::RT_HOST, ge::InnErrorCodeType::ERROR_CODE, ge::InnErrorLevel::COMMON_LEVEL, \ | |||||
| ge::InnSystemIdType::SYSID_GE, ge::InnSubModuleId::OPS_MODULE, name, (value), (desc)) | |||||
| #define GE_ERRORNO_PLUGIN(name, value, desc) \ | |||||
| GE_ERRORNO(ge::InnLogRuntime::RT_HOST, ge::InnErrorCodeType::ERROR_CODE, ge::InnErrorLevel::COMMON_LEVEL, \ | |||||
| ge::InnSystemIdType::SYSID_GE, ge::InnSubModuleId::PLUGIN_MODULE, name, (value), (desc)) | |||||
| #define GE_ERRORNO_RUNTIME(name, value, desc) \ | |||||
| GE_ERRORNO(ge::InnLogRuntime::RT_HOST, ge::InnErrorCodeType::ERROR_CODE, ge::InnErrorLevel::COMMON_LEVEL, \ | |||||
| ge::InnSystemIdType::SYSID_GE, ge::InnSubModuleId::RUNTIME_MODULE, name, (value), (desc)) | |||||
| #define GE_ERRORNO_EXECUTOR(name, value, desc) \ | |||||
| GE_ERRORNO(ge::InnLogRuntime::RT_DEVICE, ge::InnErrorCodeType::ERROR_CODE, ge::InnErrorLevel::COMMON_LEVEL, \ | |||||
| ge::InnSystemIdType::SYSID_GE, ge::InnSubModuleId::EXECUTOR_MODULE, name, (value), (desc)) | |||||
| #define GE_ERRORNO_GENERATOR(name, value, desc) \ | |||||
| GE_ERRORNO(ge::InnLogRuntime::RT_HOST, ge::InnErrorCodeType::ERROR_CODE, ge::InnErrorLevel::COMMON_LEVEL, \ | |||||
| ge::InnSystemIdType::SYSID_GE, ge::InnSubModuleId::GENERATOR_MODULE, name, (value), (desc)) | |||||
| // Get error code description | |||||
| #define GE_GET_ERRORNO_STR(value) ge::StatusFactory::Instance()->GetErrDesc(value) | |||||
| #define RT_ERROR_TO_GE_STATUS(RT_ERROR) static_cast<Status>(RT_ERROR) | |||||
| namespace ge { | namespace ge { | ||||
| // System ID | // System ID | ||||
| enum SystemIdType { SYSID_GE = 8 }; | |||||
| enum class InnSystemIdType { SYSID_GE = 8 }; | |||||
| // Runtime location | // Runtime location | ||||
| enum LogRuntime { | |||||
| enum class InnLogRuntime { | |||||
| RT_HOST = 0b01, | RT_HOST = 0b01, | ||||
| RT_DEVICE = 0b10, | RT_DEVICE = 0b10, | ||||
| }; | }; | ||||
| // Sub model | // Sub model | ||||
| enum SubModuleId { | |||||
| enum class InnSubModuleId { | |||||
| COMMON_MODULE = 0, | COMMON_MODULE = 0, | ||||
| CLIENT_MODULE = 1, | CLIENT_MODULE = 1, | ||||
| INIT_MODULE = 2, | INIT_MODULE = 2, | ||||
| @@ -47,13 +87,13 @@ enum SubModuleId { | |||||
| }; | }; | ||||
| // Error code type | // Error code type | ||||
| enum ErrorCodeType { | |||||
| enum class InnErrorCodeType { | |||||
| ERROR_CODE = 0b01, | ERROR_CODE = 0b01, | ||||
| EXCEPTION_CODE = 0b10, | EXCEPTION_CODE = 0b10, | ||||
| }; | }; | ||||
| // Error level | // Error level | ||||
| enum ErrorLevel { | |||||
| enum class InnErrorLevel { | |||||
| COMMON_LEVEL = 0b000, | COMMON_LEVEL = 0b000, | ||||
| SUGGESTION_LEVEL = 0b001, | SUGGESTION_LEVEL = 0b001, | ||||
| MINOR_LEVEL = 0b010, | MINOR_LEVEL = 0b010, | ||||
| @@ -61,33 +101,6 @@ enum ErrorLevel { | |||||
| CRITICAL_LEVEL = 0b100, | CRITICAL_LEVEL = 0b100, | ||||
| }; | }; | ||||
| // Each module defines error codes using the following macros | |||||
| #define GE_ERRORNO_COMMON(name, value, desc) \ | |||||
| GE_ERRORNO(RT_HOST, ERROR_CODE, COMMON_LEVEL, SYSID_GE, COMMON_MODULE, name, value, desc) | |||||
| #define GE_ERRORNO_CLIENT(name, value, desc) \ | |||||
| GE_ERRORNO(RT_HOST, ERROR_CODE, COMMON_LEVEL, SYSID_GE, CLIENT_MODULE, name, value, desc) | |||||
| #define GE_ERRORNO_INIT(name, value, desc) \ | |||||
| GE_ERRORNO(RT_HOST, ERROR_CODE, COMMON_LEVEL, SYSID_GE, INIT_MODULE, name, value, desc) | |||||
| #define GE_ERRORNO_SESSION(name, value, desc) \ | |||||
| GE_ERRORNO(RT_HOST, ERROR_CODE, COMMON_LEVEL, SYSID_GE, SESSION_MODULE, name, value, desc) | |||||
| #define GE_ERRORNO_GRAPH(name, value, desc) \ | |||||
| GE_ERRORNO(RT_HOST, ERROR_CODE, COMMON_LEVEL, SYSID_GE, GRAPH_MODULE, name, value, desc) | |||||
| #define GE_ERRORNO_ENGINE(name, value, desc) \ | |||||
| GE_ERRORNO(RT_HOST, ERROR_CODE, COMMON_LEVEL, SYSID_GE, ENGINE_MODULE, name, value, desc) | |||||
| #define GE_ERRORNO_OPS(name, value, desc) \ | |||||
| GE_ERRORNO(RT_HOST, ERROR_CODE, COMMON_LEVEL, SYSID_GE, OPS_MODULE, name, value, desc) | |||||
| #define GE_ERRORNO_PLUGIN(name, value, desc) \ | |||||
| GE_ERRORNO(RT_HOST, ERROR_CODE, COMMON_LEVEL, SYSID_GE, PLUGIN_MODULE, name, value, desc) | |||||
| #define GE_ERRORNO_RUNTIME(name, value, desc) \ | |||||
| GE_ERRORNO(RT_HOST, ERROR_CODE, COMMON_LEVEL, SYSID_GE, RUNTIME_MODULE, name, value, desc) | |||||
| #define GE_ERRORNO_EXECUTOR(name, value, desc) \ | |||||
| GE_ERRORNO(RT_DEVICE, ERROR_CODE, COMMON_LEVEL, SYSID_GE, EXECUTOR_MODULE, name, value, desc) | |||||
| #define GE_ERRORNO_GENERATOR(name, value, desc) \ | |||||
| GE_ERRORNO(RT_HOST, ERROR_CODE, COMMON_LEVEL, SYSID_GE, GENERATOR_MODULE, name, value, desc) | |||||
| // Get error code description | |||||
| #define GE_GET_ERRORNO_STR(value) ge::StatusFactory::Instance()->GetErrDesc(value) | |||||
| // Common module error code definition | // Common module error code definition | ||||
| GE_ERRORNO_COMMON(MEMALLOC_FAILED, 0, "Failed to allocate memory!"); // 1343225856 | GE_ERRORNO_COMMON(MEMALLOC_FAILED, 0, "Failed to allocate memory!"); // 1343225856 | ||||
| GE_ERRORNO_COMMON(PARAM_INVALID, 1, "Parameter's invalid!"); // 1343225857 | GE_ERRORNO_COMMON(PARAM_INVALID, 1, "Parameter's invalid!"); // 1343225857 | ||||
| @@ -125,13 +138,13 @@ GE_ERRORNO_CLIENT(GE_CLI_GE_ALREADY_INITIALIZED, 10, "GE is already initialized. | |||||
| GE_ERRORNO_CLIENT(GE_CLI_GE_NOT_INITIALIZED, 11, "GE is not yet initialized or is finalized."); // 1343229963 | GE_ERRORNO_CLIENT(GE_CLI_GE_NOT_INITIALIZED, 11, "GE is not yet initialized or is finalized."); // 1343229963 | ||||
| // Init module error code definition | // Init module error code definition | ||||
| GE_ERRORNO_INIT(GE_MULTI_INIT, 0, "Multiple initializations are not supported."); // 1343234048 | |||||
| GE_ERRORNO_INIT(GE_FINALIZE_NOT_INIT, 1, "Finalize is not allowed before initialization."); // 1343234049 | |||||
| GE_ERRORNO_INIT(GE_MULTI_FINALIZE, 2, "Multiple finalizations are not supported."); // 1343234050 | |||||
| GE_ERRORNO_INIT(GE_PROF_MULTI_INIT, 3, "Multiple profiling initializations are not supported."); // 1343234051 | |||||
| GE_ERRORNO_INIT(GE_PROF_NOT_INIT, 4, "Profing initializations have not been done."); // 1343234052 | |||||
| GE_ERRORNO_INIT(GE_MULTI_INIT, 0, "Multiple initializations are not supported."); // 1343234048 | |||||
| GE_ERRORNO_INIT(GE_FINALIZE_NOT_INIT, 1, "Finalize is not allowed before initialization."); // 1343234049 | |||||
| GE_ERRORNO_INIT(GE_MULTI_FINALIZE, 2, "Multiple finalizations are not supported."); // 1343234050 | |||||
| GE_ERRORNO_INIT(GE_PROF_MULTI_INIT, 3, "Multiple profiling initializations are not supported."); // 1343234051 | |||||
| GE_ERRORNO_INIT(GE_PROF_NOT_INIT, 4, "Profing initializations have not been done."); // 1343234052 | |||||
| GE_ERRORNO_INIT(GE_PROF_MODE_CONFLICT, 5, | GE_ERRORNO_INIT(GE_PROF_MODE_CONFLICT, 5, | ||||
| "Profiling command mode which is preferred is running, the api mode will not work."); // 1343234053 | |||||
| "Profiling command mode which is preferred is running, the api mode will not work."); // 1343234053 | |||||
| // Session module error code definition | // Session module error code definition | ||||
| GE_ERRORNO_SESSION(GE_SESS_INIT_FAILED, 0, "Failed to initialize session."); // 1343238144 | GE_ERRORNO_SESSION(GE_SESS_INIT_FAILED, 0, "Failed to initialize session."); // 1343238144 | ||||
| @@ -216,8 +229,8 @@ GE_ERRORNO_ENGINE(GE_ENG_FINALIZE_FAILED, 1, "Engine finalize failed."); | |||||
| GE_ERRORNO_ENGINE(GE_ENG_MEMTYPE_ERROR, 2, "Memory type HBM is necessary when engine is in device"); // 1343246338 | GE_ERRORNO_ENGINE(GE_ENG_MEMTYPE_ERROR, 2, "Memory type HBM is necessary when engine is in device"); // 1343246338 | ||||
| // Optimize errocode | // Optimize errocode | ||||
| GE_ERRORNO_GRAPH(TO_BE_DELETED, 63, "The node of the graph to be deleted."); // 1343242303 | |||||
| GE_ERRORNO_GRAPH(NOT_CHANGED, 64, "The node of the graph no changed."); // 1343242304 | |||||
| GE_ERRORNO_GRAPH(TO_BE_DELETED, 63, "The node of the graph to be deleted."); // 1343242303 | |||||
| GE_ERRORNO_GRAPH(NOT_CHANGED, 64, "The node of the graph no changed."); // 1343242304 | |||||
| // Ops module error code definition | // Ops module error code definition | ||||
| GE_ERRORNO_OPS(GE_OPS_KERNEL_STORE_INIT_FAILED, 0, "Failed to initialize OpsKernelInfoStore."); // 1343250432 | GE_ERRORNO_OPS(GE_OPS_KERNEL_STORE_INIT_FAILED, 0, "Failed to initialize OpsKernelInfoStore."); // 1343250432 | ||||
| @@ -313,7 +326,6 @@ GE_ERRORNO_GENERATOR(GE_GENERATOR_GRAPH_MANAGER_BUILD_GRAPH_FAILED, 3, "Graph ma | |||||
| GE_ERRORNO_GENERATOR(GE_GENERATOR_GRAPH_MANAGER_FINALIZE_FAILED, 4, "Graph manager finalize failed."); | GE_ERRORNO_GENERATOR(GE_GENERATOR_GRAPH_MANAGER_FINALIZE_FAILED, 4, "Graph manager finalize failed."); | ||||
| GE_ERRORNO_GENERATOR(GE_GENERATOR_GRAPH_MANAGER_SAVE_MODEL_FAILED, 5, "Graph manager save model failed."); | GE_ERRORNO_GENERATOR(GE_GENERATOR_GRAPH_MANAGER_SAVE_MODEL_FAILED, 5, "Graph manager save model failed."); | ||||
| #define RT_ERROR_TO_GE_STATUS(RT_ERROR) static_cast<Status>(RT_ERROR) | |||||
| } // namespace ge | } // namespace ge | ||||
| #endif // INC_FRAMEWORK_COMMON_GE_INNER_ERROR_CODES_H_ | #endif // INC_FRAMEWORK_COMMON_GE_INNER_ERROR_CODES_H_ | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -17,31 +17,39 @@ | |||||
| #ifndef INC_FRAMEWORK_COMMON_GE_TYPES_H_ | #ifndef INC_FRAMEWORK_COMMON_GE_TYPES_H_ | ||||
| #define INC_FRAMEWORK_COMMON_GE_TYPES_H_ | #define INC_FRAMEWORK_COMMON_GE_TYPES_H_ | ||||
| #include <stdint.h> | |||||
| #include <cstdint> | |||||
| #include <string> | #include <string> | ||||
| #include <vector> | #include <vector> | ||||
| #include "framework/common/fmk_error_codes.h" | #include "framework/common/fmk_error_codes.h" | ||||
| #include "ge/ge_api_error_codes.h" | |||||
| #include "external/ge/ge_api_error_codes.h" | |||||
| #include "external/graph/types.h" | #include "external/graph/types.h" | ||||
| #include "external/ge/ge_api_types.h" | #include "external/ge/ge_api_types.h" | ||||
| namespace ge { | namespace ge { | ||||
| enum RuntimeType { HOST = 0, DEVICE = 1 }; | enum RuntimeType { HOST = 0, DEVICE = 1 }; | ||||
| enum PerfLevel { GEN_TASK_WITH_FUSION = -1, GEN_TASK_WITHOUT_L2FUSION = 3, GEN_TASK_WITHOUT_FUSION = 4 }; | |||||
| enum class PerfLevel : int32_t { | |||||
| GEN_TASK_WITH_FUSION = -1, | |||||
| GEN_TASK_WITHOUT_L2FUSION = 3, | |||||
| GEN_TASK_WITHOUT_FUSION = 4 | |||||
| }; | |||||
| enum FrameworkType { | enum FrameworkType { | ||||
| CAFFE = 0, | CAFFE = 0, | ||||
| MINDSPORE = 1, | MINDSPORE = 1, | ||||
| TENSORFLOW = 3, | TENSORFLOW = 3, | ||||
| ANDROID_NN, | |||||
| ONNX, | |||||
| ANDROID_NN = 4, | |||||
| ONNX = 5, | |||||
| }; | }; | ||||
| enum class GraphStage : int64_t { GRAPH_STAGE_FUZZ = 0, GRAPH_STAGE_RESERVED }; | |||||
| const char_t *const kGraphDumpStage = "DumpStage"; | |||||
| const std::map<std::string, std::string> kFwkTypeToStr = { | const std::map<std::string, std::string> kFwkTypeToStr = { | ||||
| {"0", "Caffe"}, {"1", "MindSpore"}, {"3", "TensorFlow"}, {"4", "Android_NN"}, {"5", "Onnx"}}; | |||||
| {"0", "Caffe"}, {"1", "MindSpore"}, {"3", "TensorFlow"}, {"4", "Android_NN"}, {"5", "Onnx"}}; | |||||
| enum OpEngineType { | enum OpEngineType { | ||||
| ENGINE_SYS = 0, // default engine | ENGINE_SYS = 0, // default engine | ||||
| @@ -53,28 +61,52 @@ enum OpEngineType { | |||||
| enum InputAippType { DATA_WITHOUT_AIPP = 0, DATA_WITH_STATIC_AIPP, DATA_WITH_DYNAMIC_AIPP, DYNAMIC_AIPP_NODE }; | enum InputAippType { DATA_WITHOUT_AIPP = 0, DATA_WITH_STATIC_AIPP, DATA_WITH_DYNAMIC_AIPP, DYNAMIC_AIPP_NODE }; | ||||
| const char *const GE_ENGINE_ATTR_MEM_TYPE_HBM = "HBM"; | |||||
| const char *const GE_OPTION_EXEC_PLACEMENT = "ge.exec.placement"; | |||||
| const char_t *const GE_ENGINE_ATTR_MEM_TYPE_HBM = "HBM"; | |||||
| const char_t *const GE_OPTION_EXEC_PLACEMENT = "ge.exec.placement"; | |||||
| // profiling data | // profiling data | ||||
| const std::string kTaskTypeAicore = "AI_CORE"; | const std::string kTaskTypeAicore = "AI_CORE"; | ||||
| const std::string kTaskTypeAicpu = "AI_CPU"; | const std::string kTaskTypeAicpu = "AI_CPU"; | ||||
| const std::string kTaskTypeInvalid = "TASK_TYPE_INVALID"; | const std::string kTaskTypeInvalid = "TASK_TYPE_INVALID"; | ||||
| const std::string kTaskTypeFftsPlus = "FFTS_PLUS"; | |||||
| const std::string kEngineNameVectorCore = "VectorEngine"; | |||||
| const std::string kEngineNameHccl = "ops_kernel_info_hccl"; | |||||
| const std::string kEngineNameRts = "DNN_VM_RTS_OP_STORE"; | |||||
| const std::string kEngineNameHostCpu = "DNN_VM_HOST_CPU_OP_STORE"; | |||||
| const std::string kEngineNameGeLocal = "DNN_VM_GE_LOCAL_OP_STORE"; | |||||
| const std::string kEngineNameAiCpu = "aicpu_ascend_kernel"; | |||||
| const std::string kEngineNameAiCpuTf = "aicpu_tf_kernel"; | |||||
| const std::string kEngineNameAiCore = "AIcoreEngine"; | |||||
| const std::string kAtomicOpType = "DynamicAtomicAddrClean"; | |||||
| const std::string kShapeTypeStatic = "static"; | |||||
| const std::string kShapeTypeDynamic = "dynamic"; | |||||
| constexpr uint64_t kInferSessionId = 0U; | |||||
| constexpr uint64_t kReleaseFlag = 1U; | |||||
| constexpr uint32_t kInvalidModelId = 0xFFFFFFFFU; | |||||
| constexpr size_t kNumTaskWithAtomicAddrCleanTask = 2U; | |||||
| constexpr uint32_t INVALID_MODEL_ID = 0xFFFFFFFFUL; | |||||
| // dynamic execute mode | // dynamic execute mode | ||||
| const char *const kLazyRecompile = "lazy_recompile"; | |||||
| const char_t *const kLazyRecompile = "lazy_recompile"; | |||||
| constexpr size_t kMaxHostMemInputLen = 128U; // 64 aligned | |||||
| // Data cache, including data address and length | // Data cache, including data address and length | ||||
| struct DataBuffer { | struct DataBuffer { | ||||
| public: | |||||
| void *data; // Data address | void *data; // Data address | ||||
| uint64_t length; // Data length | uint64_t length; // Data length | ||||
| bool isDataSupportMemShare = false; | bool isDataSupportMemShare = false; | ||||
| uint32_t placement = 0; | |||||
| DataBuffer(void *dataIn, uint64_t len, bool isSupportMemShare, uint32_t placement = 0) | |||||
| : data(dataIn), length(len), isDataSupportMemShare(isSupportMemShare), placement(placement) {} | |||||
| uint32_t placement = 0U; | |||||
| DataBuffer() : data(nullptr), length(0), isDataSupportMemShare(false) {} | |||||
| DataBuffer(void *const data_in, const uint64_t data_len, const bool is_support_mem_share = false, | |||||
| const uint32_t data_placement = 0U) | |||||
| : data(data_in), length(data_len), isDataSupportMemShare(is_support_mem_share), placement(data_placement) {} | |||||
| DataBuffer() : data(nullptr), length(0UL), isDataSupportMemShare(false), placement(0U) {} | |||||
| }; | }; | ||||
| /// | /// | ||||
| @@ -86,7 +118,7 @@ struct InputData { | |||||
| uint32_t timestamp; // Data creation time | uint32_t timestamp; // Data creation time | ||||
| uint32_t timeout; // Processing timeout | uint32_t timeout; // Processing timeout | ||||
| uint32_t model_id; // Model ID required for data processing | uint32_t model_id; // Model ID required for data processing | ||||
| uint64_t request_id = 0; // Request ID | |||||
| uint64_t request_id = 0UL; // Request ID | |||||
| std::vector<DataBuffer> blobs; // Actual input data, currently only supports one input | std::vector<DataBuffer> blobs; // Actual input data, currently only supports one input | ||||
| bool is_dynamic_batch = false; // Whether is dynamic batch size scene, default:false | bool is_dynamic_batch = false; // Whether is dynamic batch size scene, default:false | ||||
| std::string batch_label; // Gear used for current inference in dynamic batch scene | std::string batch_label; // Gear used for current inference in dynamic batch scene | ||||
| @@ -113,10 +145,10 @@ struct Command { | |||||
| // The definition of I/O shape description | // The definition of I/O shape description | ||||
| struct ShapeDescription { | struct ShapeDescription { | ||||
| int64_t num = 0; | |||||
| int64_t channel = 0; | |||||
| int64_t height = 0; | |||||
| int64_t width = 0; | |||||
| int64_t num = 0L; | |||||
| int64_t channel = 0L; | |||||
| int64_t height = 0L; | |||||
| int64_t width = 0L; | |||||
| std::vector<int64_t> dims; | std::vector<int64_t> dims; | ||||
| std::vector<std::pair<int64_t, int64_t>> shape_ranges; | std::vector<std::pair<int64_t, int64_t>> shape_ranges; | ||||
| }; | }; | ||||
| @@ -186,14 +218,14 @@ struct AippConfigInfo { | |||||
| int32_t mean_chn_1; | int32_t mean_chn_1; | ||||
| int32_t mean_chn_2; | int32_t mean_chn_2; | ||||
| int32_t mean_chn_3; | int32_t mean_chn_3; | ||||
| float min_chn_0; | |||||
| float min_chn_1; | |||||
| float min_chn_2; | |||||
| float min_chn_3; | |||||
| float var_reci_chn_0; | |||||
| float var_reci_chn_1; | |||||
| float var_reci_chn_2; | |||||
| float var_reci_chn_3; | |||||
| float32_t min_chn_0; | |||||
| float32_t min_chn_1; | |||||
| float32_t min_chn_2; | |||||
| float32_t min_chn_3; | |||||
| float32_t var_reci_chn_0; | |||||
| float32_t var_reci_chn_1; | |||||
| float32_t var_reci_chn_2; | |||||
| float32_t var_reci_chn_3; | |||||
| int8_t support_rotation; | int8_t support_rotation; | ||||
| uint32_t related_input_rank; | uint32_t related_input_rank; | ||||
| uint32_t max_src_image_size; | uint32_t max_src_image_size; | ||||
| @@ -202,26 +234,42 @@ struct AippConfigInfo { | |||||
| // The structure of offline Modeldata | // The structure of offline Modeldata | ||||
| struct ModelData { | struct ModelData { | ||||
| void *model_data = nullptr; // Model binary data start addr | void *model_data = nullptr; // Model binary data start addr | ||||
| uint32_t model_len = 0; // Model binary data length | |||||
| uint32_t model_len = 0U; // Model binary data length | |||||
| int32_t priority = 0; // Model priority | int32_t priority = 0; // Model priority | ||||
| std::string key; // Key path for encrypt model, Empty for unencrypt | std::string key; // Key path for encrypt model, Empty for unencrypt | ||||
| std::string om_name; // om file name, used for data dump | std::string om_name; // om file name, used for data dump | ||||
| }; | }; | ||||
| struct ModelParam { | |||||
| ModelParam() : priority(0), mem_base(0U), mem_size(0U), weight_base(0U), weight_size(0U) {} | |||||
| ModelParam(const int32_t pri, const uintptr_t m_base, const size_t m_len, const uintptr_t w_base, const size_t w_len) | |||||
| : priority(pri), mem_base(m_base), mem_size(m_len), weight_base(w_base), weight_size(w_len) {} | |||||
| ~ModelParam() = default; | |||||
| int32_t priority; | |||||
| uintptr_t mem_base; | |||||
| size_t mem_size; | |||||
| uintptr_t weight_base; | |||||
| size_t weight_size; | |||||
| }; | |||||
| // The definition of Model information | // The definition of Model information | ||||
| struct ModelInfo { | struct ModelInfo { | ||||
| uint32_t version = 0; | |||||
| uint32_t version = 0U; | |||||
| std::string name; | std::string name; | ||||
| bool is_encrypt = 0; // 0:unencrypt, 1:encrypt | |||||
| bool is_encrypt = false; // 0:unencrypt, 1:encrypt | |||||
| std::vector<ShapeDescription> input_desc; | std::vector<ShapeDescription> input_desc; | ||||
| std::vector<ShapeDescription> output_desc; | std::vector<ShapeDescription> output_desc; | ||||
| uint8_t reserved[3] = {0}; // 3-byte reserved field | |||||
| uint8_t reserved[3] = {0U}; // 3-byte reserved field | |||||
| }; | }; | ||||
| // Asynchronous callback interface, implemented by the caller | // Asynchronous callback interface, implemented by the caller | ||||
| class GE_FUNC_VISIBILITY ModelListener { | class GE_FUNC_VISIBILITY ModelListener { | ||||
| public: | public: | ||||
| virtual ~ModelListener() {} | virtual ~ModelListener() {} | ||||
| ModelListener() = default; | |||||
| ModelListener(const ModelListener &) = delete; | |||||
| ModelListener &operator=(const ModelListener &) = delete; | |||||
| /// | /// | ||||
| /// @brief Asynchronous callback interface | /// @brief Asynchronous callback interface | ||||
| /// @param [in] model_id Model ID of the callback | /// @param [in] model_id Model ID of the callback | ||||
| @@ -230,6 +278,18 @@ class GE_FUNC_VISIBILITY ModelListener { | |||||
| /// | /// | ||||
| virtual Status OnComputeDone(uint32_t model_id, uint32_t data_index, uint32_t result_code, | virtual Status OnComputeDone(uint32_t model_id, uint32_t data_index, uint32_t result_code, | ||||
| std::vector<ge::Tensor> &outputs) = 0; | std::vector<ge::Tensor> &outputs) = 0; | ||||
| virtual void SetCallback(const RunAsyncCallback &callback) { | |||||
| (void)callback; | |||||
| } | |||||
| virtual uint32_t GetResultCode() { | |||||
| return 0U; | |||||
| }; | |||||
| virtual Status ResetResult() { | |||||
| return SUCCESS; | |||||
| }; | |||||
| }; | }; | ||||
| // OMM configuration item | // OMM configuration item | ||||
| @@ -249,6 +309,7 @@ struct Options { | |||||
| int32_t physical_device_id; | int32_t physical_device_id; | ||||
| std::string profiling_mode; | std::string profiling_mode; | ||||
| std::string profiling_options; | std::string profiling_options; | ||||
| int32_t graphExecTimeout; | |||||
| }; | }; | ||||
| // Profiling info of task | // Profiling info of task | ||||
| @@ -268,13 +329,24 @@ struct TaskDescInfo { | |||||
| std::vector<Format> output_format; | std::vector<Format> output_format; | ||||
| std::vector<std::vector<int64_t>> output_shape; | std::vector<std::vector<int64_t>> output_shape; | ||||
| std::vector<DataType> output_data_type; | std::vector<DataType> output_data_type; | ||||
| uint32_t context_id = 0xFFFFFFFFUL; | |||||
| }; | }; | ||||
| struct OpDescInfo { | struct OpDescInfo { | ||||
| std::string op_name; | std::string op_name; | ||||
| std::string op_type; | std::string op_type; | ||||
| uint32_t task_id; | |||||
| uint32_t stream_id; | |||||
| uint32_t task_id = 0U; | |||||
| uint32_t stream_id = 0U; | |||||
| uint32_t imply_type = 0U; | |||||
| uint32_t block_dim = 0U; | |||||
| std::string op_file_path; | |||||
| std::string dev_func; | |||||
| std::string tvm_magic; | |||||
| uint32_t tiling_key = 0U; | |||||
| uintptr_t args = 0U; | |||||
| std::string tiling_data; | |||||
| std::string node_info; | |||||
| std::vector<int64_t> workspace_bytes; | |||||
| std::vector<Format> input_format; | std::vector<Format> input_format; | ||||
| std::vector<std::vector<int64_t>> input_shape; | std::vector<std::vector<int64_t>> input_shape; | ||||
| std::vector<DataType> input_data_type; | std::vector<DataType> input_data_type; | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -20,11 +20,10 @@ | |||||
| #include <memory> | #include <memory> | ||||
| #include <string> | #include <string> | ||||
| #include "common/fmk_types.h" | |||||
| #include "common/helper/om_file_helper.h" | |||||
| #include "framework/common/helper/om_file_helper.h" | |||||
| #include "common/model/ge_model.h" | #include "common/model/ge_model.h" | ||||
| #include "common/model/ge_root_model.h" | #include "common/model/ge_root_model.h" | ||||
| #include "common/types.h" | |||||
| #include "framework/common/types.h" | |||||
| #include "graph/model.h" | #include "graph/model.h" | ||||
| namespace ge { | namespace ge { | ||||
| @@ -34,77 +33,71 @@ class GE_FUNC_VISIBILITY ModelHelper { | |||||
| ~ModelHelper(); | ~ModelHelper(); | ||||
| Status SaveToOmModel(const GeModelPtr &ge_model, const SaveParam &save_param, const std::string &output_file, | Status SaveToOmModel(const GeModelPtr &ge_model, const SaveParam &save_param, const std::string &output_file, | ||||
| ge::ModelBufferData &model); | |||||
| Status SaveToOmRootModel(const GeRootModelPtr &ge_root_model, const SaveParam &save_param, const string &output_file, | |||||
| ModelBufferData &model, bool is_unknown_shape); | |||||
| Status SaveOriginalGraphToOmModel(const ge::Graph &graph, const std::string &output_file); | |||||
| ge::ModelBufferData &model) const; | |||||
| Status SaveToOmRootModel(const GeRootModelPtr &ge_root_model, const SaveParam &save_param, | |||||
| const std::string &output_file, ModelBufferData &model, const bool is_unknown_shape) const; | |||||
| Status SaveOriginalGraphToOmModel(const ge::Graph &graph, const std::string &output_file) const; | |||||
| Status LoadModel(const ge::ModelData &model_data); | Status LoadModel(const ge::ModelData &model_data); | ||||
| Status LoadRootModel(const ge::ModelData &model_data); | Status LoadRootModel(const ge::ModelData &model_data); | ||||
| Status GetModelBufferData(ge::ModelBufferData &model); | |||||
| const ModelFileHeader *GetFileHeader() const { | |||||
| return file_header_; | |||||
| } | |||||
| static void SetModelToGeModel(const GeModelPtr &ge_model, Model &model); | |||||
| GeModelPtr GetGeModel(); | GeModelPtr GetGeModel(); | ||||
| GeRootModelPtr GetGeRootModel(); | GeRootModelPtr GetGeRootModel(); | ||||
| void SetSaveMode(bool val) { | |||||
| void SetSaveMode(const bool val) { | |||||
| is_offline_ = val; | is_offline_ = val; | ||||
| } | } | ||||
| bool GetSaveMode(void) const { | |||||
| return is_offline_; | |||||
| } | |||||
| bool GetModelType() const { | bool GetModelType() const { | ||||
| return is_unknown_shape_model_; | return is_unknown_shape_model_; | ||||
| }; | |||||
| } | |||||
| Status GetBaseNameFromFileName(const std::string &file_name, std::string &base_name); | |||||
| Status GetModelNameFromMergedGraphName(const std::string &graph_name, std::string &model_name); | |||||
| Status GetBaseNameFromFileName(const std::string &file_name, std::string &base_name) const; | |||||
| Status GetModelNameFromMergedGraphName(const ComputeGraphPtr &compute_graph, std::string &model_name) const; | |||||
| private: | private: | ||||
| bool is_assign_model_ = false; | bool is_assign_model_ = false; | ||||
| bool is_offline_ = true; | bool is_offline_ = true; | ||||
| bool is_unknown_shape_model_ = false; | bool is_unknown_shape_model_ = false; | ||||
| ModelFileHeader *file_header_ = nullptr; | ModelFileHeader *file_header_ = nullptr; | ||||
| // Encrypted model need delete temp model and unencrypted model need not delete model | |||||
| uint8_t *model_addr_tmp_ = nullptr; | |||||
| uint32_t model_len_tmp_ = 0; | |||||
| GeModelPtr model_; | GeModelPtr model_; | ||||
| GeRootModelPtr root_model_; | GeRootModelPtr root_model_; | ||||
| ModelHelper(const ModelHelper &); | |||||
| ModelHelper &operator=(const ModelHelper &); | |||||
| Status GenerateGeModel(OmFileLoadHelper &om_load_helper); | |||||
| Status GenerateGeRootModel(OmFileLoadHelper &om_load_helper); | |||||
| Status LoadModelData(OmFileLoadHelper &om_load_helper); | |||||
| void SetModelToGeModel(GeModelPtr &ge_model, Model &model); | |||||
| Status LoadModelData(OmFileLoadHelper &om_load_helper, GeModelPtr &cur_model, size_t mode_index); | |||||
| Status LoadWeights(OmFileLoadHelper &om_load_helper); | |||||
| Status LoadWeights(OmFileLoadHelper &om_load_helper, GeModelPtr &cur_model, size_t mode_index); | |||||
| Status LoadTask(OmFileLoadHelper &om_load_helper); | |||||
| Status LoadTask(OmFileLoadHelper &om_load_helper, GeModelPtr &cur_model, size_t mode_index); | |||||
| Status LoadTBEKernelStore(OmFileLoadHelper &om_load_helper); | |||||
| Status LoadTBEKernelStore(OmFileLoadHelper &om_load_helper, GeModelPtr &cur_model, size_t mode_index); | |||||
| Status LoadCustAICPUKernelStore(OmFileLoadHelper &om_load_helper); | |||||
| Status LoadCustAICPUKernelStore(OmFileLoadHelper &om_load_helper, GeModelPtr &cur_model, size_t mode_index); | |||||
| Status ReleaseLocalModelData() noexcept; | |||||
| Status SaveModelPartition(std::shared_ptr<OmFileSaveHelper> &om_file_save_helper, ModelPartitionType type, | |||||
| const uint8_t *data, size_t size, size_t model_index); | |||||
| ModelHelper(const ModelHelper &) = default; | |||||
| ModelHelper &operator=(const ModelHelper &) = default; | |||||
| bool IsPartitionedGraph(const GeModelPtr &cur_model) const; | |||||
| Status GenerateGeModel(const OmFileLoadHelper &om_load_helper, GeModelPtr &cur_model, const size_t mode_index, | |||||
| const bool is_dyn_root); | |||||
| Status GenerateGeRootModel(const OmFileLoadHelper &om_load_helper); | |||||
| Status LoadModelData(const OmFileLoadHelper &om_load_helper, const GeModelPtr &cur_model, | |||||
| const size_t mode_index) const; | |||||
| Status LoadWeights(const OmFileLoadHelper &om_load_helper, const GeModelPtr &cur_model, | |||||
| const size_t mode_index) const; | |||||
| Status LoadTask(const OmFileLoadHelper &om_load_helper, const GeModelPtr &cur_model, const size_t mode_index) const; | |||||
| Status LoadTBEKernelStore(const OmFileLoadHelper &om_load_helper, const GeModelPtr &cur_model, | |||||
| const size_t mode_index) const; | |||||
| Status LoadCustAICPUKernelStore(const OmFileLoadHelper &om_load_helper, const GeModelPtr &cur_model, | |||||
| const size_t mode_index) const; | |||||
| Status SaveModelPartition(std::shared_ptr<OmFileSaveHelper> &om_file_save_helper, const ModelPartitionType type, | |||||
| const uint8_t *const data, const size_t size, const size_t model_index) const; | |||||
| Status SaveModelDef(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | Status SaveModelDef(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | ||||
| Buffer &model_buffer, size_t model_index = 0); | |||||
| Status SaveSizeToModelDef(const GeModelPtr &ge_model); | |||||
| Buffer &model_buffer, const size_t model_index = 0U) const; | |||||
| Status SaveSizeToModelDef(const GeModelPtr &ge_model) const; | |||||
| Status SaveModelWeights(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | Status SaveModelWeights(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | ||||
| size_t model_index = 0); | |||||
| const size_t model_index = 0U) const; | |||||
| Status SaveModelTbeKernel(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | Status SaveModelTbeKernel(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | ||||
| size_t model_index = 0); | |||||
| const size_t model_index = 0U) const; | |||||
| Status SaveModelCustAICPU(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | Status SaveModelCustAICPU(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | ||||
| size_t model_index = 0); | |||||
| const size_t model_index = 0U) const; | |||||
| Status SaveModelTaskDef(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | Status SaveModelTaskDef(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | ||||
| Buffer &task_buffer, size_t model_index = 0); | |||||
| Buffer &task_buffer, const size_t model_index = 0U) const; | |||||
| Status SaveModelHeader(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | Status SaveModelHeader(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | ||||
| size_t model_num = 1); | |||||
| const size_t model_num = 1U) const; | |||||
| Status SaveAllModelPartiton(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | Status SaveAllModelPartiton(shared_ptr<OmFileSaveHelper> &om_file_save_helper, const GeModelPtr &ge_model, | ||||
| Buffer &model_buffer, Buffer &task_buffer, size_t model_index = 0); | |||||
| Buffer &model_buffer, Buffer &task_buffer, const size_t model_index = 0U) const; | |||||
| }; | }; | ||||
| } // namespace ge | } // namespace ge | ||||
| #endif // INC_FRAMEWORK_COMMON_HELPER_MODEL_HELPER_H_ | #endif // INC_FRAMEWORK_COMMON_HELPER_MODEL_HELPER_H_ | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -21,25 +21,20 @@ | |||||
| #include <vector> | #include <vector> | ||||
| #include "external/ge/ge_ir_build.h" | #include "external/ge/ge_ir_build.h" | ||||
| #include "framework/common/fmk_types.h" | |||||
| #include "framework/common/types.h" | #include "framework/common/types.h" | ||||
| #include "framework/common/ge_types.h" | #include "framework/common/ge_types.h" | ||||
| using ProcParam = struct PROC_PARAM; | |||||
| using std::string; | |||||
| using std::vector; | |||||
| namespace ge { | namespace ge { | ||||
| struct ModelPartition { | struct ModelPartition { | ||||
| ModelPartitionType type; | ModelPartitionType type; | ||||
| uint8_t *data = 0; | |||||
| uint32_t size = 0; | |||||
| const uint8_t *data = nullptr; | |||||
| uint32_t size = 0U; | |||||
| }; | }; | ||||
| struct OmFileContext { | struct OmFileContext { | ||||
| std::vector<ModelPartition> partition_datas_; | std::vector<ModelPartition> partition_datas_; | ||||
| std::vector<char> partition_table_; | |||||
| uint32_t model_data_len_ = 0; | |||||
| std::vector<char_t> partition_table_; | |||||
| uint32_t model_data_len_ = 0U; | |||||
| }; | }; | ||||
| struct SaveParam { | struct SaveParam { | ||||
| @@ -53,57 +48,56 @@ struct SaveParam { | |||||
| class GE_FUNC_VISIBILITY OmFileLoadHelper { | class GE_FUNC_VISIBILITY OmFileLoadHelper { | ||||
| public: | public: | ||||
| Status Init(const ge::ModelData &model); | |||||
| Status Init(const ModelData &model); | |||||
| Status Init(uint8_t *model_data, const uint32_t model_data_size); | |||||
| Status Init(uint8_t *const model_data, const uint32_t model_data_size); | |||||
| Status Init(uint8_t *model_data, const uint32_t model_data_size, uint32_t model_num); | |||||
| Status Init(uint8_t *const model_data, const uint32_t model_data_size, const uint32_t model_num); | |||||
| Status GetModelPartition(ModelPartitionType type, ModelPartition &partition); | |||||
| Status GetModelPartition(const ModelPartitionType type, ModelPartition &partition); | |||||
| Status GetModelPartition(ModelPartitionType type, ModelPartition &partition, size_t model_index); | |||||
| Status GetModelPartition(const ModelPartitionType type, ModelPartition &partition, const size_t model_index) const; | |||||
| OmFileContext context_; | OmFileContext context_; | ||||
| vector<OmFileContext> model_contexts_; | |||||
| std::vector<OmFileContext> model_contexts_; | |||||
| private: | private: | ||||
| Status CheckModelValid(const ge::ModelData &model) const; | |||||
| Status LoadModelPartitionTable(uint8_t *model_data, const uint32_t model_data_size); | |||||
| Status LoadModelPartitionTable(uint8_t *const model_data, const uint32_t model_data_size, const size_t model_index, | |||||
| size_t &mem_offset); | |||||
| Status LoadModelPartitionTable(uint8_t *model_data, const uint32_t model_data_size, uint32_t model_num); | |||||
| Status LoadModelPartitionTable(uint8_t *const model_data, const uint32_t model_data_size, const uint32_t model_num); | |||||
| bool is_inited_{false}; | bool is_inited_{false}; | ||||
| }; | }; | ||||
| class GE_FUNC_VISIBILITY OmFileSaveHelper { | class GE_FUNC_VISIBILITY OmFileSaveHelper { | ||||
| public: | public: | ||||
| ModelFileHeader &GetModelFileHeader() { return model_header_; } | |||||
| ModelFileHeader &GetModelFileHeader() { | |||||
| return model_header_; | |||||
| } | |||||
| uint32_t GetModelDataSize() const { return context_.model_data_len_; } | |||||
| uint32_t GetModelDataSize() const; | |||||
| ModelPartitionTable *GetPartitionTable(); | ModelPartitionTable *GetPartitionTable(); | ||||
| Status AddPartition(ModelPartition &partition); | |||||
| Status AddPartition(const ModelPartition &partition); | |||||
| Status AddPartition(ModelPartition &partition, size_t cur_index); | |||||
| Status AddPartition(const ModelPartition &partition, const size_t cur_index); | |||||
| const std::vector<ModelPartition> &GetModelPartitions() const; | |||||
| Status SaveModel(const SaveParam &save_param, const char_t *const output_file, ModelBufferData &model, | |||||
| const bool is_offline = true); | |||||
| Status SaveModel(const SaveParam &save_param, const char *target_file, ge::ModelBufferData &model, | |||||
| bool is_offline = true); | |||||
| Status SaveModelToFile(const char_t *const output_file, ModelBufferData &model, const bool is_offline = true); | |||||
| Status SaveModelToFile(const char *output_file, ge::ModelBufferData &model, bool is_offline = true); | |||||
| ModelPartitionTable *GetPartitionTable(const size_t cur_ctx_index); | |||||
| vector<OmFileContext> model_contexts_; | |||||
| Status SaveRootModel(const SaveParam &save_param, const char_t *const output_file, ModelBufferData &model, | |||||
| const bool is_offline); | |||||
| private: | |||||
| ModelFileHeader model_header_; | ModelFileHeader model_header_; | ||||
| OmFileContext context_; | |||||
| ModelPartitionTable *GetPartitionTable(size_t cur_ctx_index); | |||||
| Status SaveRootModel(const SaveParam &save_param, const char *output_file, ModelBufferData &model, bool is_offline); | |||||
| std::vector<OmFileContext> model_contexts_; | |||||
| }; | }; | ||||
| } // namespace ge | } // namespace ge | ||||
| #endif // INC_FRAMEWORK_COMMON_HELPER_OM_FILE_HELPER_H_ | #endif // INC_FRAMEWORK_COMMON_HELPER_OM_FILE_HELPER_H_ | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -17,107 +17,24 @@ | |||||
| #ifndef INC_FRAMEWORK_COMMON_L2_CACHE_OPTIMIZE_H_ | #ifndef INC_FRAMEWORK_COMMON_L2_CACHE_OPTIMIZE_H_ | ||||
| #define INC_FRAMEWORK_COMMON_L2_CACHE_OPTIMIZE_H_ | #define INC_FRAMEWORK_COMMON_L2_CACHE_OPTIMIZE_H_ | ||||
| #include <stdint.h> | |||||
| #include <cstdint> | |||||
| #include <algorithm> | #include <algorithm> | ||||
| #include <functional> | #include <functional> | ||||
| #include <string> | #include <string> | ||||
| #include <vector> | #include <vector> | ||||
| #include "common/types.h" | |||||
| #include "common/util.h" | |||||
| #include "framework/common/types.h" | |||||
| #include "framework/common/util.h" | |||||
| #include "graph/compute_graph.h" | #include "graph/compute_graph.h" | ||||
| using std::vector; | |||||
| namespace ge { | namespace ge { | ||||
| // Size of RC memory alignment, 2M | // Size of RC memory alignment, 2M | ||||
| constexpr size_t ALIGN_SIZE = 2097152; | |||||
| constexpr uint32_t RC_VALUE_DEFAULT = 1; | |||||
| constexpr uint32_t RC_VALUE_MAX = 32; | |||||
| // RC data type classification | |||||
| enum RCType { | |||||
| RC_DEFAULT, // Such as temporary workspace memory of operator, variable (including global and local variable) | |||||
| RC_HCOM, // Output of gradient aggregation, RC value should be set to 0 | |||||
| RC_L2LOSS, // Parameter of L2 loss operator, RC value should be set to 0 | |||||
| RC_INPUTOUTPUT, // Input and output tensor of operator, RC value is returned by FE calculation | |||||
| RC_WEIGHTS, // The weight, fp16, RC value used by FP/BP operator should be set to 1 or the actual access numbers | |||||
| RC_DW, // The gradient data DW and RC value output by BP operator | |||||
| // should be set to 1 or the actual access numbers | |||||
| RC_ARGS // Args of FlowTable, actual access numbers | |||||
| }; | |||||
| enum MemType { INPUT_TENSOR, OUTPUT_TENSOR, WEIGHT, WORKSPACE }; | |||||
| // Memory usage information < node, type, number > | |||||
| struct NodeInfo { | |||||
| string nodeName; | |||||
| MemType memType; | |||||
| size_t index; | |||||
| }; | |||||
| // Memory block RC value | |||||
| struct RCMemoryBlock { | |||||
| RCType type; // RC type | |||||
| size_t blockSize; // memory block size | |||||
| size_t headOffset; // Start offset from base address | |||||
| size_t tailOffset; // End offset from base address | |||||
| uint32_t rcCount; // RC value | |||||
| NodeInfo nodeInfo; // Input and output indexes of node objects to which RC belongs | |||||
| }; | |||||
| // L2Cache optimizer | |||||
| class GE_FUNC_VISIBILITY L2CacheOptimize { | |||||
| public: | |||||
| explicit L2CacheOptimize(ge::ComputeGraphPtr &graph); | |||||
| ~L2CacheOptimize(); | |||||
| // Collect the information L2Cache Memory optimization | |||||
| Status Gath(); | |||||
| private: | |||||
| ge::ComputeGraphPtr graph_; | |||||
| // Save RC block information list | |||||
| vector<RCMemoryBlock> weightRCs; | |||||
| vector<RCMemoryBlock> opRCs; | |||||
| // Extract RC information generated by FE from compiled graph | |||||
| void RetirveRCinfo(); | |||||
| // Take the maximum common divisor of RC values for the duplicate address | |||||
| void Merge(vector<RCMemoryBlock> &blocks); | |||||
| // The RC information is aligned with the 2m address | |||||
| void Align(vector<RCMemoryBlock> &blocks); | |||||
| // Weight of l2loss operator, output of gradient aggregation output, RC value set to 0 | |||||
| void HandleOutputZeroRC(RCType type, ge::NodePtr node, vector<int64_t> &outputList, vector<RCMemoryBlock> &blocks); | |||||
| // Processing operator input Tensor's RC | |||||
| void HandOPInput(ge::NodePtr node, vector<int64_t> &inputList, vector<RCMemoryBlock> &blocks); | |||||
| // Processing operator output Tensor's RC | |||||
| void HandOPoutput(ge::NodePtr node, vector<int64_t> &outputList, vector<RCMemoryBlock> &blocks); | |||||
| constexpr size_t ALIGN_SIZE = 2097152U; | |||||
| // maximum common divisor | |||||
| uint32_t Measure(uint32_t x, uint32_t y) { | |||||
| if (x == 0 || y == 0) return RC_VALUE_DEFAULT; | |||||
| uint32_t z = y; | |||||
| while (x % y != 0) { | |||||
| z = x % y; | |||||
| x = y; | |||||
| y = z; | |||||
| } | |||||
| return z; | |||||
| } | |||||
| constexpr uint32_t RC_VALUE_DEFAULT = 1U; | |||||
| constexpr uint32_t RC_VALUE_MAX = 32U; | |||||
| bool Contain(const RCMemoryBlock &l_block, const RCMemoryBlock &r_block); | |||||
| bool Cross(const RCMemoryBlock &l_block, const RCMemoryBlock &r_block); | |||||
| bool Connect(const RCMemoryBlock &l_block, const RCMemoryBlock &r_block); | |||||
| }; | |||||
| } // namespace ge | } // namespace ge | ||||
| #endif // INC_FRAMEWORK_COMMON_L2_CACHE_OPTIMIZE_H_ | #endif // INC_FRAMEWORK_COMMON_L2_CACHE_OPTIMIZE_H_ | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -34,141 +34,10 @@ | |||||
| #include <google/protobuf/map.h> | #include <google/protobuf/map.h> | ||||
| #include <unordered_map> | #include <unordered_map> | ||||
| #include <string> | #include <string> | ||||
| #include "graph/debug/ge_attr_define.h" | #include "graph/debug/ge_attr_define.h" | ||||
| #include "proto/om.pb.h" | #include "proto/om.pb.h" | ||||
| using domi::AttrDef; | |||||
| using domi::AttrDef_ListValue; | |||||
| using domi::ModelDef; | |||||
| using domi::NamedAttrs; | |||||
| using domi::OpDef; | |||||
| namespace ge { | namespace ge { | ||||
| using AttrDefMap = ::google::protobuf::Map<::std::string, ::domi::AttrDef>; | |||||
| using AttrDefPair = ::google::protobuf::MapPair<std::string, domi::AttrDef>; | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, AttrDef &attr, OpDef *opdef); | |||||
| // DEFINE_ADD_ATTR_VALUE | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const std::string &value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const char *value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const char *key, const char *value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const uint32_t value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const int32_t value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const int64_t value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const float value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const double value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const bool value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const AttrDef_ListValue &value, AttrDefMap *attrs); | |||||
| // DEFINE_ADD_ATTR_VALUE | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const std::string &value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const char *value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const char *key, const char *value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const uint32_t value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const int32_t value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const int64_t value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const float value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const double value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const bool value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttr(const std::string &key, const AttrDef_ListValue &value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpBytesAttr(const std::string &key, const void *value, size_t size, OpDef *opdef); | |||||
| // DEFINE_ADD_ATTR_VALUE_LIST | |||||
| GE_FUNC_VISIBILITY void AddOpAttrList(const std::string &key, const double value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttrList(const std::string &key, const float value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttrList(const std::string &key, const uint32_t value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttrList(const std::string &key, const int32_t value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttrList(const std::string &key, const std::string value, AttrDefMap *attrs); | |||||
| GE_FUNC_VISIBILITY void AddOpAttrList(const std::string &key, const double value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttrList(const std::string &key, const float value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttrList(const std::string &key, const uint32_t value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttrList(const std::string &key, const int32_t value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttrList(const std::string &key, const bool value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttrList(const std::string &key, const int64_t value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY void AddOpAttrList(const std::string &key, const std::string &value, OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY bool GetOpAttr(const std::string &key, std::string *value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY bool GetOpAttr(const std::string &key, int32_t *value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY bool GetOpAttr(const std::string &key, int64_t *value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY bool GetOpAttr(const std::string &key, uint32_t *value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY bool GetOpAttr(const std::string &key, float *value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY bool GetOpAttr(const std::string &key, double *value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY bool GetOpAttr(const std::string &key, bool *value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY bool GetOpAttr(const std::string &key, AttrDef_ListValue *value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY uint32_t GetOpAttrListSize(const std::string &key, std::string value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY uint32_t GetOpAttrListSize(const std::string &key, int32_t value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY uint32_t GetOpAttrListSize(const std::string &key, int64_t value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY uint32_t GetOpAttrListSize(const std::string &key, uint32_t value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY uint32_t GetOpAttrListSize(const std::string &key, float value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY uint32_t GetOpAttrListSize(const std::string &key, double value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY uint32_t GetOpAttrListSize(const std::string &key, bool value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY bool GetBytesAttr(const std::string &key, std::string *value, const OpDef *opdef); | |||||
| GE_FUNC_VISIBILITY bool GetBytesAttr(const std::string &key, std::string *value, const ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttr(const std::string &key, const std::string &value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttr(const std::string &key, const char *value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttr(const char *key, const char *value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttr(const std::string &key, const uint32_t value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttr(const std::string &key, const int32_t value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttr(const std::string &key, const int64_t value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttr(const std::string &key, const float value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttr(const std::string &key, const double value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttr(const std::string &key, const bool value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttr(const std::string &key, const void *value, size_t size, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttr(const std::string &key, const AttrDef_ListValue &value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttrList(const std::string &key, const double value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttrList(const std::string &key, const float value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttrList(const std::string &key, const uint32_t value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttrList(const std::string &key, const int32_t value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY void AddModelAttrList(const std::string &key, const std::string &value, ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY bool GetModelAttr(const std::string &key, std::string *value, const ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY bool GetModelAttr(const std::string &key, int32_t *value, const ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY bool GetModelAttr(const std::string &key, int64_t *value, const ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY bool GetModelAttr(const std::string &key, uint32_t *value, const ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY bool GetModelAttr(const std::string &key, float *value, const ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY bool GetModelAttr(const std::string &key, double *value, const ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY bool GetModelAttr(const std::string &key, bool *value, const ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY bool GetModelAttr(const std::string &key, AttrDef_ListValue *value, const ModelDef *model_def); | |||||
| GE_FUNC_VISIBILITY bool HasOpAttr(const OpDef *opdef, const std::string &attr_name); | |||||
| GE_FUNC_VISIBILITY void SetAttrDef(const std::string &value, AttrDef *out); | |||||
| GE_FUNC_VISIBILITY void SetAttrDef(const char *value, AttrDef *out); | |||||
| GE_FUNC_VISIBILITY void SetAttrDef(const uint32_t value, AttrDef *out); | |||||
| GE_FUNC_VISIBILITY void SetAttrDef(const int32_t value, AttrDef *out); | |||||
| GE_FUNC_VISIBILITY void SetAttrDef(const float value, AttrDef *out); | |||||
| GE_FUNC_VISIBILITY void SetAttrDef(const double value, AttrDef *out); | |||||
| GE_FUNC_VISIBILITY void SetAttrDef(const bool value, AttrDef *out); | |||||
| GE_FUNC_VISIBILITY void SetAttrList(const std::string &value, AttrDef *out); | |||||
| GE_FUNC_VISIBILITY void SetAttrList(const bool value, AttrDef *out); | |||||
| GE_FUNC_VISIBILITY void SetAttrList(const float value, AttrDef *out); | |||||
| GE_FUNC_VISIBILITY void SetAttrList(const double value, AttrDef *out); | |||||
| GE_FUNC_VISIBILITY void SetAttrList(const uint32_t value, AttrDef *out); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefValue(const std::string &key, std::string *value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefValue(const std::string &key, int32_t *value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefValue(const std::string &key, int64_t *value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefValue(const std::string &key, uint32_t *value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefValue(const std::string &key, float *value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefValue(const std::string &key, double *value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefValue(const std::string &key, bool *value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefValue(const std::string &key, AttrDef_ListValue *value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefValue(const std::string &key, NamedAttrs *&value, AttrDefMap *attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefValue(const std::string &key, const NamedAttrs *&value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefListValue(const std::string &key, int idx, int32_t *value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefListValue(const std::string &key, int idx, uint32_t *value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefListValue(const std::string &key, int idx, float *value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY bool GetAttrDefListValue(const std::string &key, int idx, double *value, const AttrDefMap &attr); | |||||
| GE_FUNC_VISIBILITY void SetAttrDef(const std::string &value, domi::AttrDef *const out); | |||||
| } | } | ||||
| #endif // INC_FRAMEWORK_COMMON_OP_ATTR_VALUE_UTIL_H_ | |||||
| #endif // INC_FRAMEWORK_COMMON_OP_ATTR_VALUE_UTIL_H_ | |||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -20,10 +20,8 @@ | |||||
| #include <memory> | #include <memory> | ||||
| #include <vector> | #include <vector> | ||||
| #include "common/op/attr_value_util.h" | |||||
| #include "register/register_types.h" | |||||
| #include "register/register_error_codes.h" | |||||
| #include "common/util.h" | |||||
| #include "framework/common/op/attr_value_util.h" | |||||
| #include "framework/common/util.h" | |||||
| #include "graph/attr_value.h" | #include "graph/attr_value.h" | ||||
| #include "graph/ge_tensor.h" | #include "graph/ge_tensor.h" | ||||
| #include "graph/node.h" | #include "graph/node.h" | ||||
| @@ -31,18 +29,16 @@ | |||||
| #include "proto/insert_op.pb.h" | #include "proto/insert_op.pb.h" | ||||
| namespace ge { | namespace ge { | ||||
| using domi::Status; | |||||
| // Add Sub Mul | // Add Sub Mul | ||||
| GE_FUNC_VISIBILITY extern const uint32_t ADD_INPUT_NUM; | GE_FUNC_VISIBILITY extern const uint32_t ADD_INPUT_NUM; | ||||
| GE_FUNC_VISIBILITY extern const uint32_t SUB_INPUT_NUM; | |||||
| GE_FUNC_VISIBILITY extern const uint32_t MUL_INPUT_NUM; | GE_FUNC_VISIBILITY extern const uint32_t MUL_INPUT_NUM; | ||||
| // Permute | // Permute | ||||
| GE_FUNC_VISIBILITY extern const int32_t PERMUTE_ORDER_NUM; | GE_FUNC_VISIBILITY extern const int32_t PERMUTE_ORDER_NUM; | ||||
| // Ssd PriroBox | // Ssd PriroBox | ||||
| GE_FUNC_VISIBILITY extern const double SSD_PRIORBOX_ASPECT_RATIO_VALUE; | |||||
| GE_FUNC_VISIBILITY extern const float64_t SSD_PRIORBOX_ASPECT_RATIO_VALUE; | |||||
| GE_FUNC_VISIBILITY extern const uint32_t STRIDEDSLICE_INPUT_NUM; | GE_FUNC_VISIBILITY extern const uint32_t STRIDEDSLICE_INPUT_NUM; | ||||
| @@ -55,8 +51,8 @@ GE_FUNC_VISIBILITY extern const uint32_t SWITCH_DATA_INPUT; | |||||
| GE_FUNC_VISIBILITY extern const uint32_t SWITCH_PRED_INPUT; | GE_FUNC_VISIBILITY extern const uint32_t SWITCH_PRED_INPUT; | ||||
| // Merge | // Merge | ||||
| GE_FUNC_VISIBILITY extern const uint32_t MERGE_DATA_OUTPUT; | |||||
| GE_FUNC_VISIBILITY extern const uint32_t MERGE_INDEX_OUTPUT; | |||||
| GE_FUNC_VISIBILITY extern const int32_t MERGE_DATA_OUTPUT; | |||||
| GE_FUNC_VISIBILITY extern const int32_t MERGE_INDEX_OUTPUT; | |||||
| // FunctionOp | // FunctionOp | ||||
| GE_FUNC_VISIBILITY extern const uint32_t IF_COND_INPUT; | GE_FUNC_VISIBILITY extern const uint32_t IF_COND_INPUT; | ||||
| @@ -65,85 +61,36 @@ GE_FUNC_VISIBILITY extern const uint32_t FOR_LIMIT_INPUT; | |||||
| GE_FUNC_VISIBILITY extern const uint32_t FOR_DELTA_INPUT; | GE_FUNC_VISIBILITY extern const uint32_t FOR_DELTA_INPUT; | ||||
| GE_FUNC_VISIBILITY extern const uint32_t FOR_DATA_INPUT; | GE_FUNC_VISIBILITY extern const uint32_t FOR_DATA_INPUT; | ||||
| GE_FUNC_VISIBILITY extern const int NORMAL_TENSOR_SIZE; | |||||
| GE_FUNC_VISIBILITY extern const int32_t NORMAL_TENSOR_SIZE; | |||||
| /*lint -e148*/ | |||||
| class GE_FUNC_VISIBILITY OpUtils { | class GE_FUNC_VISIBILITY OpUtils { | ||||
| public: | public: | ||||
| /// | |||||
| /// @ingroup domi_ome | |||||
| /// @brief Check whether check_value is in [min_enum_value, max_enum_value] | |||||
| /// @return true Within | |||||
| /// @return false out of range | |||||
| // | |||||
| static inline bool CheckEnumValid(int32_t check_value, int32_t min_enum_value, int32_t max_enum_value) { | |||||
| return check_value < min_enum_value ? false : (check_value >= max_enum_value ? false : true); | |||||
| } | |||||
| /// | |||||
| /// @ingroup domi_omg | |||||
| /// @brief Determine whether to manually calculate the tensor size based on the values of format and dim | |||||
| /// @param [in] format, Format information of the tensor | |||||
| /// @param [in] real_dim_cnt, Tensor dim | |||||
| /// @return true Manually calculate the size based on dim and datatype | |||||
| /// @return false skip | |||||
| /// | |||||
| static bool IsComputDimsSize(const int32_t format, const uint32_t real_dim_cnt); | |||||
| /// | /// | ||||
| /// @brief Extract AIPP parameters from AttrDefMap and splice them | /// @brief Extract AIPP parameters from AttrDefMap and splice them | ||||
| /// @param [in] aipp_attr attr of operator | /// @param [in] aipp_attr attr of operator | ||||
| /// @param [out] aipp_params aipp parameters | /// @param [out] aipp_params aipp parameters | ||||
| /// @return enum of tagCCAippInputFormat | /// @return enum of tagCCAippInputFormat | ||||
| /// | /// | ||||
| static Status ConvertAippParams(const GeAttrValue::NamedAttrs &aipp_attr, domi::AippOpParams *aipp_params); | |||||
| static Status TransferDim(const std::vector<int64_t> &dim, std::vector<int64_t> &dim_vector); | |||||
| static Status ConvertAippParams(const GeAttrValue::NamedAttrs &aipp_attr, domi::AippOpParams &aipp_params); | |||||
| template <typename T> | template <typename T> | ||||
| static void SliceData(const std::vector<char *> &input, int64_t chunk_size, std::vector<char *> &output, | |||||
| int64_t begin, int64_t out_dim, int64_t stride); | |||||
| static void SliceData(const std::vector<char_t *> &input, const int64_t chunk_size, std::vector<char_t *> &output, | |||||
| const int64_t begin, const int64_t out_dim, const int64_t stride); | |||||
| template <typename T> | template <typename T> | ||||
| static Status SetDataByDataType(size_t out_size, const std::vector<char *> &chunk_input, | |||||
| const std::vector<char *> &chunk_output, GeTensor *output); | |||||
| static Status SetDataByDataType(const size_t out_size, const std::vector<char_t *> &chunk_input, | |||||
| const std::vector<char_t *> &chunk_output, GeTensor *const output); | |||||
| template <typename T> | template <typename T> | ||||
| static Status SetOutputSliceDataByDataType(void *data, int64_t data_size, const std::vector<int64_t> &input_dims, | |||||
| const std::vector<int64_t> &begin, const std::vector<int64_t> &output_dims, | |||||
| ge::GeTensor *output, const std::vector<int64_t> &stride); | |||||
| static Status SetOutputSliceData(void *data, int64_t data_size, int32_t data_type, std::vector<int64_t> &input_dims, | |||||
| std::vector<int64_t> &begin, std::vector<int64_t> &output_dims, ge::GeTensor *output, | |||||
| std::vector<int64_t> &stride); | |||||
| /// | |||||
| /// @ingroup domi_omg | |||||
| /// @brief Convert the convolutional weight data from [h, w, c, k] to [k, c, h, w] | |||||
| /// @param [in] input Weight data in HWCK format | |||||
| /// @param [in] H value of H dimension | |||||
| /// @param [in] W value of W dimension | |||||
| /// @param [in] C value of C dimension | |||||
| /// @param [in] K value of K dimension | |||||
| /// @param [out] output Data pointer after conversion. The format is KCHW. | |||||
| /// | |||||
| static void TransDataHWCK2KCHW(const void *input, int64_t H, int64_t W, int64_t C, int64_t K, void **output); | |||||
| /// | |||||
| /// @ingroup domi_omg | |||||
| /// @brief Converts the convolutional weight data from [k, c, h, w] to [h, w, c, k]. | |||||
| /// @param [in] input Weight data in HWCK format | |||||
| /// @param [in] K value of K dimension | |||||
| /// @param [in] C value of C dimension | |||||
| /// @param [in] H value of H dimension | |||||
| /// @param [in] W value of W dimension | |||||
| /// @param [out] output Data pointer after conversion. The format is HWCK | |||||
| /// | |||||
| static void TransDataKCHW2HWCK(const void *input, int64_t K, int64_t C, int64_t H, int64_t W, void *output); | |||||
| static vector<ConstGeTensorPtr> GetWeights(const ge::Node &node); | |||||
| static vector<ConstGeTensorPtr> GetWeights(ge::ConstNodePtr node); | |||||
| static vector<GeTensorPtr> MutableWeights(const ge::Node &node); | |||||
| static vector<GeTensorPtr> MutableWeights(const ge::NodePtr node); | |||||
| static Status SetWeights(ge::Node &node, const vector<ge::GeTensorPtr> &weights); | |||||
| static Status SetWeights(ge::NodePtr node, const vector<ge::GeTensorPtr> &weights); | |||||
| static Status GetShapeDataFromConstTensor(const ConstGeTensorPtr &tensor, DataType type, std::vector<int64_t> &dims); | |||||
| private: | |||||
| static uint32_t GetRealDimCnt(const GeTensorDesc &tensor_desc); | |||||
| static Status SetOutputSliceDataByDataType(void *const data, const int64_t data_size, | |||||
| const std::vector<int64_t> &input_dims, const std::vector<int64_t> &begin, | |||||
| const std::vector<int64_t> &output_dims, ge::GeTensor *const output, | |||||
| const std::vector<int64_t> &stride); | |||||
| static Status SetOutputSliceData(void *const data, const int64_t data_size, const int32_t data_type, | |||||
| const std::vector<int64_t> &input_dims, const std::vector<int64_t> &begin, | |||||
| const std::vector<int64_t> &output_dims, GeTensor *const output, | |||||
| const std::vector<int64_t> &stride); | |||||
| static Status GetShapeDataFromConstTensor(const ConstGeTensorPtr &tensor, const DataType type, | |||||
| std::vector<int64_t> &dims); | |||||
| }; | }; | ||||
| /*lint +e148*/ | |||||
| } // namespace ge | } // namespace ge | ||||
| #endif // INC_FRAMEWORK_COMMON_OP_GE_OP_UTILS_H_ | #endif // INC_FRAMEWORK_COMMON_OP_GE_OP_UTILS_H_ | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -17,9 +17,9 @@ | |||||
| #ifndef INC_FRAMEWORK_COMMON_OP_OP_PARSER_UTIL_H_ | #ifndef INC_FRAMEWORK_COMMON_OP_OP_PARSER_UTIL_H_ | ||||
| #define INC_FRAMEWORK_COMMON_OP_OP_PARSER_UTIL_H_ | #define INC_FRAMEWORK_COMMON_OP_OP_PARSER_UTIL_H_ | ||||
| #include <limits.h> | |||||
| #include <math.h> | |||||
| #include <stdint.h> | |||||
| #include <climits> | |||||
| #include <cmath> | |||||
| #include <cstdint> | |||||
| namespace ge { | namespace ge { | ||||
| // general | // general | ||||
| @@ -30,7 +30,7 @@ const uint32_t NORMAL_OUTPUT_NUM = 1; | |||||
| const uint32_t NORMAL_WORKSPACE_NUM = 0; | const uint32_t NORMAL_WORKSPACE_NUM = 0; | ||||
| const int32_t NORMAL_1D_DIM_NUM = 1; | const int32_t NORMAL_1D_DIM_NUM = 1; | ||||
| const int32_t NORMAL_SCALE_DIM_NUM = 0; | const int32_t NORMAL_SCALE_DIM_NUM = 0; | ||||
| const int NORMAL_TENSOR_SIZE = 4; | |||||
| const int32_t NORMAL_TENSOR_SIZE = 4; | |||||
| const uint32_t DEFAULT_REAL_DIM_CNT = 4; | const uint32_t DEFAULT_REAL_DIM_CNT = 4; | ||||
| // const | // const | ||||
| @@ -111,8 +111,8 @@ const int32_t ROIPOOLING_DEFAULT_SAMPLING_RATIO = -1; | |||||
| const int32_t DETECTIONOUTPUT_INPUT_SIZE = 3; | const int32_t DETECTIONOUTPUT_INPUT_SIZE = 3; | ||||
| const int32_t DETECTIONOUTPUT_OUTPUT_SIZE = 2; | const int32_t DETECTIONOUTPUT_OUTPUT_SIZE = 2; | ||||
| const int32_t DETECTIONOUTPUT_WORKSPACE_NUM = 1; | const int32_t DETECTIONOUTPUT_WORKSPACE_NUM = 1; | ||||
| const int DETECTIONOUTPUT_CLASS_NUM = 20; // Number of background categories | |||||
| const int DETECTIONOUTPUT_NUM_CLASSES_DEFAULT_VALUE = 21; | |||||
| const int32_t DETECTIONOUTPUT_CLASS_NUM = 20; // Number of background categories | |||||
| const int32_t DETECTIONOUTPUT_NUM_CLASSES_DEFAULT_VALUE = 21; | |||||
| const float DETECTIONOUTPUT_NMS_THRESHOLD_DEFAULT_VALUE = 0.3; | const float DETECTIONOUTPUT_NMS_THRESHOLD_DEFAULT_VALUE = 0.3; | ||||
| const float DETECTIONOUTPUT_CONFIDENCE_THRESHOLD_DEFAULT_VALUE = 0.8; | const float DETECTIONOUTPUT_CONFIDENCE_THRESHOLD_DEFAULT_VALUE = 0.8; | ||||
| @@ -128,8 +128,8 @@ const float PROPOSAL_SCALE_DIM_0_DEFAULT_VALUE = 8; | |||||
| const float PROPOSAL_SCALE_DIM_1_DEFAULT_VALUE = 16; | const float PROPOSAL_SCALE_DIM_1_DEFAULT_VALUE = 16; | ||||
| const float PROPOSAL_SCALE_DIM_2_DEFAULT_VALUE = 32; | const float PROPOSAL_SCALE_DIM_2_DEFAULT_VALUE = 32; | ||||
| const float PROPOSAL_MIN_SIZE_DEFAULT_VALUE = 16; | const float PROPOSAL_MIN_SIZE_DEFAULT_VALUE = 16; | ||||
| const int PROPOSAL_PRE_NMS_TOPN_DEFAULT_VALUE = 6000; | |||||
| const int PROPOSAL_POST_NMS_TOPN_DEFAULT_VALUE = 304; | |||||
| const int32_t PROPOSAL_PRE_NMS_TOPN_DEFAULT_VALUE = 6000; | |||||
| const int32_t PROPOSAL_POST_NMS_TOPN_DEFAULT_VALUE = 304; | |||||
| const float PROPOSAL_NMS_THRESH_DEFAULT_VALUE = 0.7; | const float PROPOSAL_NMS_THRESH_DEFAULT_VALUE = 0.7; | ||||
| const float PROPOSAL_FILTER_THRESH_DEFAULT_VALUE = 0; | const float PROPOSAL_FILTER_THRESH_DEFAULT_VALUE = 0; | ||||
| @@ -150,7 +150,7 @@ const int32_t PERMUTE_WORKSPACE_NUM = 1; | |||||
| const int32_t PERMUTE_ORDER_NUM = 4; | const int32_t PERMUTE_ORDER_NUM = 4; | ||||
| // Ssd normalize | // Ssd normalize | ||||
| const int SSD_NORMALIZE_INPUT_SIZE = 1; | |||||
| const int32_t SSD_NORMALIZE_INPUT_SIZE = 1; | |||||
| const float SSD_NORMALIZE_EPS_DEFAULT_VALUE = 2e-7; | const float SSD_NORMALIZE_EPS_DEFAULT_VALUE = 2e-7; | ||||
| // SsdPriroBox | // SsdPriroBox | ||||
| @@ -163,9 +163,9 @@ const double SSD_PRIORBOX_VARIANCE_VALUE = 0.1; | |||||
| const double SSD_PRIORBOX_VARIANCE_SIZE_ONE = 1; | const double SSD_PRIORBOX_VARIANCE_SIZE_ONE = 1; | ||||
| const double SSD_PRIORBOX_VARIANCE_SIZE_FOUR = 4; | const double SSD_PRIORBOX_VARIANCE_SIZE_FOUR = 4; | ||||
| const double SSD_PRIORBOX_ASPECT_RATIO_VALUE = 1.0; | const double SSD_PRIORBOX_ASPECT_RATIO_VALUE = 1.0; | ||||
| const int SSD_PRIOR_BOX_CODETYPE_CORNER_VALUE = 1; | |||||
| const int SSD_PRIOR_BOX_CODETYPE_CENTER_SIZE_VALUE = 2; | |||||
| const int SSD_PRIOR_BOX_CODETYPE_CORNER_SIZE_VALUE = 3; | |||||
| const int32_t SSD_PRIOR_BOX_CODETYPE_CORNER_VALUE = 1; | |||||
| const int32_t SSD_PRIOR_BOX_CODETYPE_CENTER_SIZE_VALUE = 2; | |||||
| const int32_t SSD_PRIOR_BOX_CODETYPE_CORNER_SIZE_VALUE = 3; | |||||
| // Ssd DetectionOutput | // Ssd DetectionOutput | ||||
| const int32_t SSD_DETECTIONOUTPUT_INPUT_SIZE = 3; | const int32_t SSD_DETECTIONOUTPUT_INPUT_SIZE = 3; | ||||
| @@ -205,8 +205,8 @@ const int32_t CHANNEL_AXPY_INPUT_DIM_SIZE = 4; | |||||
| const int32_t CHANNEL_AXPY_WORKSPACE_NUM = 1; | const int32_t CHANNEL_AXPY_WORKSPACE_NUM = 1; | ||||
| // Psroi pooling | // Psroi pooling | ||||
| const int PSROI_POOLING_INPUT_COUNT = 2; | |||||
| const int PSROI_POOLING_WORKSPACE_NUM = 1; | |||||
| const int32_t PSROI_POOLING_INPUT_COUNT = 2; | |||||
| const int32_t PSROI_POOLING_WORKSPACE_NUM = 1; | |||||
| // MaxPoolWithArgmax | // MaxPoolWithArgmax | ||||
| const uint32_t MAX_POOL_WITH_ARGMAX_OUTPUT_NUM = 2; | const uint32_t MAX_POOL_WITH_ARGMAX_OUTPUT_NUM = 2; | ||||
| @@ -223,7 +223,7 @@ const int32_t ROIALIGN_DEFAULT_POOLED_W = 1; | |||||
| // Correlation | // Correlation | ||||
| const uint32_t CORRELATION_INPUT_NUM = 2; | const uint32_t CORRELATION_INPUT_NUM = 2; | ||||
| const int CORRELATION_WORKSPACE_NUM = 1; | |||||
| const int32_t CORRELATION_WORKSPACE_NUM = 1; | |||||
| // Detectionpostprocess | // Detectionpostprocess | ||||
| const int32_t POSTPROCESS_INPUT_SIZE = 4; | const int32_t POSTPROCESS_INPUT_SIZE = 4; | ||||
| @@ -394,15 +394,15 @@ const uint32_t ATTENTION_DECODER_WORKSPACE_NUM = 1; | |||||
| const uint32_t ATTENTION_DECODER_INPUT_DECODER_INPUTS = 0; | const uint32_t ATTENTION_DECODER_INPUT_DECODER_INPUTS = 0; | ||||
| const uint32_t ATTENTION_DECODER_INPUT_DECODER_INITIAL_HIDDEN = 1; | const uint32_t ATTENTION_DECODER_INPUT_DECODER_INITIAL_HIDDEN = 1; | ||||
| const int ATTENTION_DECODER_ALGO_NORMAL = 0; | |||||
| const int ATTENTION_DECODER_SYMBOLS = 10000; | |||||
| const int ATTENTION_DECODER_EMBEDDING_SIZE = 128; | |||||
| const int ATTENTION_DECODER_ATTENTION_NUM_HIDDEN = 256; | |||||
| const int ATTENTION_DECODER_DECODER_NUM_HIDDEN = 128; | |||||
| const int ATTENTION_DECODER_DECODER_NUM_LAYERS = 2; | |||||
| const int ATTENTION_DECODER_RNN_UNBIDIRECTIONAL = 0; | |||||
| const int ATTENTION_DECODER_SEQLEN_VALUE = 57; | |||||
| const int ATTENTION_DECODER_GRU = 3; | |||||
| const int32_t ATTENTION_DECODER_ALGO_NORMAL = 0; | |||||
| const int32_t ATTENTION_DECODER_SYMBOLS = 10000; | |||||
| const int32_t ATTENTION_DECODER_EMBEDDING_SIZE = 128; | |||||
| const int32_t ATTENTION_DECODER_ATTENTION_NUM_HIDDEN = 256; | |||||
| const int32_t ATTENTION_DECODER_DECODER_NUM_HIDDEN = 128; | |||||
| const int32_t ATTENTION_DECODER_DECODER_NUM_LAYERS = 2; | |||||
| const int32_t ATTENTION_DECODER_RNN_UNBIDIRECTIONAL = 0; | |||||
| const int32_t ATTENTION_DECODER_SEQLEN_VALUE = 57; | |||||
| const int32_t ATTENTION_DECODER_GRU = 3; | |||||
| // Logicaland | // Logicaland | ||||
| const int32_t LOGICAL_AND_INPUT_NUM = 2; | const int32_t LOGICAL_AND_INPUT_NUM = 2; | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -20,6 +20,8 @@ | |||||
| #include <set> | #include <set> | ||||
| #include <string> | #include <string> | ||||
| #include "graph/types.h" | |||||
| namespace ge { | namespace ge { | ||||
| class GE_FUNC_VISIBILITY OpTypeContainer { | class GE_FUNC_VISIBILITY OpTypeContainer { | ||||
| public: | public: | ||||
| @@ -29,11 +31,12 @@ class GE_FUNC_VISIBILITY OpTypeContainer { | |||||
| } | } | ||||
| ~OpTypeContainer() = default; | ~OpTypeContainer() = default; | ||||
| void Register(const std::string &op_type) { op_type_list_.insert(op_type); } | |||||
| bool Register(const std::string &op_type) { | |||||
| return op_type_list_.insert(op_type).second; | |||||
| } | |||||
| bool IsExisting(const std::string &op_type) { | bool IsExisting(const std::string &op_type) { | ||||
| auto iter_find = op_type_list_.find(op_type); | |||||
| return iter_find != op_type_list_.end(); | |||||
| return op_type_list_.find(op_type) != op_type_list_.end(); | |||||
| } | } | ||||
| protected: | protected: | ||||
| @@ -42,21 +45,14 @@ class GE_FUNC_VISIBILITY OpTypeContainer { | |||||
| private: | private: | ||||
| std::set<std::string> op_type_list_; | std::set<std::string> op_type_list_; | ||||
| }; | }; | ||||
| class GE_FUNC_VISIBILITY OpTypeRegistrar { | |||||
| public: | |||||
| explicit OpTypeRegistrar(const std::string &op_type) { OpTypeContainer::Instance()->Register(op_type); } | |||||
| ~OpTypeRegistrar() {} | |||||
| }; | |||||
| } // namespace ge | |||||
| #define REGISTER_OPTYPE_DECLARE(var_name, str_name) \ | #define REGISTER_OPTYPE_DECLARE(var_name, str_name) \ | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *var_name; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char_t *var_name; | |||||
| #define REGISTER_OPTYPE_DEFINE(var_name, str_name) \ | #define REGISTER_OPTYPE_DEFINE(var_name, str_name) \ | ||||
| const char *var_name = str_name; \ | |||||
| const OpTypeRegistrar g_##var_name##_reg(str_name); | |||||
| #define IS_OPTYPE_EXISTING(str_name) (OpTypeContainer::Instance()->IsExisting(str_name)) | |||||
| } // namespace ge | |||||
| const char_t *var_name = str_name; \ | |||||
| const bool g_##var_name##_reg = OpTypeContainer::Instance()->Register(str_name); | |||||
| #define IS_OPTYPE_EXISTING(str_name) (ge::OpTypeContainer::Instance()->IsExisting(str_name)) | |||||
| #endif // INC_FRAMEWORK_COMMON_OP_TYPES_H_ | #endif // INC_FRAMEWORK_COMMON_OP_TYPES_H_ | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -17,39 +17,15 @@ | |||||
| #ifndef INC_FRAMEWORK_COMMON_GE_PROFILING_H_ | #ifndef INC_FRAMEWORK_COMMON_GE_PROFILING_H_ | ||||
| #define INC_FRAMEWORK_COMMON_GE_PROFILING_H_ | #define INC_FRAMEWORK_COMMON_GE_PROFILING_H_ | ||||
| #include "ge/ge_api_error_codes.h" | |||||
| #include "toolchain/prof_callback.h" | |||||
| #include "external/ge/ge_api_error_codes.h" | |||||
| #include "runtime/base.h" | #include "runtime/base.h" | ||||
| const int MAX_DEV_NUM = 64; | |||||
| enum ProfCommandHandleType { | |||||
| kProfCommandhandleInit = 0, | |||||
| kProfCommandhandleStart, | |||||
| kProfCommandhandleStop, | |||||
| kProfCommandhandleFinalize, | |||||
| kProfCommandhandleModelSubscribe, | |||||
| kProfCommandhandleModelUnsubscribe | |||||
| }; | |||||
| struct ProfCommandHandleData { | |||||
| uint64_t profSwitch; | |||||
| uint32_t devNums; // length of device id list | |||||
| uint32_t devIdList[MAX_DEV_NUM]; | |||||
| uint32_t modelId; | |||||
| }; | |||||
| GE_FUNC_VISIBILITY ge::Status RegProfCtrlCallback(MsprofCtrlCallback func); | |||||
| GE_FUNC_VISIBILITY ge::Status RegProfSetDeviceCallback(MsprofSetDeviceCallback func); | |||||
| GE_FUNC_VISIBILITY ge::Status RegProfReporterCallback(MsprofReporterCallback func); | |||||
| GE_FUNC_VISIBILITY ge::Status ProfCommandHandle(ProfCommandHandleType type, void *data, uint32_t len); | |||||
| /// | /// | ||||
| /// @brief Output the profiling data of single operator in Pytorch, and does not support multithreading | /// @brief Output the profiling data of single operator in Pytorch, and does not support multithreading | ||||
| /// @return Status result | /// @return Status result | ||||
| /// | /// | ||||
| GE_FUNC_VISIBILITY ge::Status ProfSetStepInfo(uint64_t index_id, uint16_t tag_id, rtStream_t stream); | |||||
| GE_FUNC_VISIBILITY ge::Status ProfSetStepInfo(const uint64_t index_id, const uint16_t tag_id, rtStream_t const stream); | |||||
| GE_FUNC_VISIBILITY ge::Status ProfGetDeviceFormGraphId(uint32_t graph_id, uint32_t &device_id); | |||||
| GE_FUNC_VISIBILITY ge::Status ProfGetDeviceFormGraphId(const uint32_t graph_id, uint32_t &device_id); | |||||
| #endif // INC_FRAMEWORK_COMMON_GE_PROFILING_H_ | #endif // INC_FRAMEWORK_COMMON_GE_PROFILING_H_ | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -0,0 +1,220 @@ | |||||
| /** | |||||
| * Copyright 2021 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef AIR_CXX_PROFILING_DEFINITIONS_H | |||||
| #define AIR_CXX_PROFILING_DEFINITIONS_H | |||||
| #include <string> | |||||
| #include <iostream> | |||||
| #include <mutex> | |||||
| #include <unordered_map> | |||||
| #include "graph/profiler.h" | |||||
| #include "external/ge/ge_api_types.h" | |||||
| #include "toolchain/prof_callback.h" | |||||
| namespace ge { | |||||
| namespace profiling { | |||||
| enum { | |||||
| kAclCompileAndExecute, | |||||
| kAclMatchOpModel, | |||||
| kAclMatchStaticOpModel, | |||||
| kAclMatchDynamicOpModel, | |||||
| kAclExecuteAsync, | |||||
| kAclLoadSingleOp, | |||||
| kAclBuildOpModel, | |||||
| kInferShape, | |||||
| kTiling, | |||||
| kUpdateShape, | |||||
| kConstPrepare, | |||||
| kInitHybridExecuteArgs, | |||||
| kInitInferShapeContext, | |||||
| kDestroyInferShapeContext, | |||||
| kResetSubgraphExecutor, | |||||
| kCommitInferShapeTask, | |||||
| kDeviceToHost, | |||||
| kPrepareTask, | |||||
| kLaunchTask, | |||||
| kCommitTilingTask, | |||||
| kAtomic, | |||||
| kKernelLaunchPrepare, | |||||
| kRtKernelLaunch, | |||||
| kRtEventCreateRecord, | |||||
| kRtEventSync, | |||||
| kRtEventDestroy, | |||||
| kRtStreamSync, | |||||
| kOpExecute, | |||||
| kModelExecute, | |||||
| kAllocMem, | |||||
| kCopyH2D, | |||||
| kPrepareNode, | |||||
| kWaitForPrepareDone, | |||||
| kPropgateOutputs, | |||||
| kOnNodeDoneCallback, | |||||
| kValidateInputTensor, | |||||
| kAfterExecuted, | |||||
| kRtEventSychronize, | |||||
| kInferShapeWaitDependShape, | |||||
| kInferShapeWaitInputTensor, | |||||
| kInferShapeCallInferFunc, | |||||
| kInferShapePropgate, | |||||
| // v2 control node | |||||
| kSelectBranch, | |||||
| kExecuteSubGraph, | |||||
| kInitSubGraphExecutor, | |||||
| // fuzz compile | |||||
| kSelectBin, | |||||
| kFindCompileCache, | |||||
| kAddCompileCache, | |||||
| kFuzzCompileOp, | |||||
| kCalcRuningParam, | |||||
| kGenTask, | |||||
| kRegisterBin, | |||||
| // FFTS Plus | |||||
| kFftsPlusPreThread, | |||||
| kFftsPlusNodeThread, | |||||
| kFftsPlusInferShape, | |||||
| kOpFftsCalculateV2, | |||||
| kInitThreadRunInfo, | |||||
| kFftsPlusGraphSchedule, | |||||
| kKnownGetAddrAndPrefCnt, | |||||
| kKernelGetAddrAndPrefCnt, | |||||
| kUpdateAddrAndPrefCnt, | |||||
| kInitOpRunInfo, | |||||
| kGetAutoThreadParam, | |||||
| kAllocateOutputs, | |||||
| kAllocateWorkspaces, | |||||
| kInitTaskAddrs, | |||||
| kInitThreadRunParam, | |||||
| kUpdateTaskAndCache, | |||||
| kFftsPlusTaskLaunch, | |||||
| // Add new definitions here | |||||
| kProfilingIndexEnd | |||||
| }; | |||||
| constexpr uint64_t kInvalidHashId = 0UL; | |||||
| class ProfilingContext { | |||||
| public: | |||||
| static bool IsDumpToStdEnabled(); | |||||
| static ProfilingContext &GetInstance(); | |||||
| ProfilingContext(); | |||||
| ~ProfilingContext(); | |||||
| /* | |||||
| * 还有一种思路是`IsEnabled`只判断profiler_是否为空指针,不再设置单独的enabled标记位,这样可以少一个标记位。 | |||||
| * 但是这么做就意味着,profiler_实例在未使能profiling时,必须是空指针状态。 | |||||
| * 为了性能考虑,profiling机制在编译和加载时,就会调用`RegisterString`,向profiler_注册字符串,后续执行时,只会使用注册好的index了。 | |||||
| * 因此存在一种场景:编译时并未使能profiling(因为编译时间很长,使能profiling也无法真实反应执行时的耗时状态), | |||||
| * 因此编译时注册字符串的动作并没有生效。在执行时,动态的打开了profiling,这种场景下,执行时无法拿到注册后字符串 | |||||
| */ | |||||
| bool IsEnabled() const noexcept { | |||||
| return enabled_ && (profiler_ != nullptr); | |||||
| } | |||||
| void SetEnable() noexcept { | |||||
| enabled_ = true; | |||||
| } | |||||
| void SetDisable() noexcept { | |||||
| enabled_ = false; | |||||
| } | |||||
| void RecordCurrentThread(const int64_t element, const int64_t event, const EventType et, | |||||
| const std::chrono::time_point<std::chrono::system_clock> time_point) { | |||||
| if (IsEnabled()) { | |||||
| profiler_->RecordCurrentThread(element, event, et, time_point); | |||||
| } | |||||
| } | |||||
| void RecordCurrentThread(const int64_t element, const int64_t event, const EventType et) { | |||||
| RecordCurrentThread(element, event, et, std::chrono::system_clock::now()); | |||||
| } | |||||
| const Profiler *GetProfiler() const { | |||||
| return profiler_.get(); | |||||
| } | |||||
| void Dump(std::ostream &out_stream) const { | |||||
| if (IsEnabled()) { | |||||
| profiler_->Dump(out_stream); | |||||
| } else { | |||||
| out_stream << "Profiling not enable, skip to dump" << std::endl; | |||||
| } | |||||
| } | |||||
| void DumpToStdOut() const { | |||||
| Dump(std::cout); | |||||
| } | |||||
| void Reset() { | |||||
| if (IsEnabled()) { | |||||
| profiler_->Reset(); | |||||
| } | |||||
| } | |||||
| int64_t RegisterString(const std::string &str); | |||||
| int64_t RegisterStringHash(const uint64_t hash_id, const std::string &str); | |||||
| void UpdateElementHashId(); | |||||
| static Status QueryHashId(const std::string &src_str, uint64_t &hash_id); | |||||
| size_t GetRegisterStringNum() const { | |||||
| return strings_to_index_.size(); | |||||
| } | |||||
| void Init(); | |||||
| private: | |||||
| void UpdateHashByStr(const std::string &str, const uint64_t hash); | |||||
| private: | |||||
| bool inited_; | |||||
| bool enabled_; | |||||
| int64_t str_index_; | |||||
| std::unordered_map<std::string, int64_t> strings_to_index_; | |||||
| std::mutex strings_to_index_mutex_; | |||||
| std::unique_ptr<Profiler> profiler_; | |||||
| }; | |||||
| class ScopeProfiler { | |||||
| public: | |||||
| ScopeProfiler(const int64_t element, const int64_t event) : element_(element), event_(event) { | |||||
| if (ProfilingContext::GetInstance().IsEnabled()) { | |||||
| start_trace_ = std::chrono::system_clock::now(); | |||||
| } | |||||
| } | |||||
| ~ScopeProfiler() { | |||||
| if (ProfilingContext::GetInstance().IsEnabled()) { | |||||
| ProfilingContext::GetInstance().RecordCurrentThread(element_, event_, EventType::kEventStart, start_trace_); | |||||
| ProfilingContext::GetInstance().RecordCurrentThread(element_, event_, EventType::kEventEnd); | |||||
| } | |||||
| } | |||||
| void SetElement(const int64_t element) { | |||||
| element_ = element; | |||||
| } | |||||
| private: | |||||
| std::chrono::time_point<std::chrono::system_clock> start_trace_; | |||||
| int64_t element_; | |||||
| int64_t event_; | |||||
| }; | |||||
| } // namespace profiling | |||||
| } // namespace ge | |||||
| #define PROFILING_START(element, event) \ | |||||
| ge::profiling::ProfilingContext::GetInstance().RecordCurrentThread((element), (event), \ | |||||
| ge::profiling::EventType::kEventStart) | |||||
| #define PROFILING_END(element, event) \ | |||||
| ge::profiling::ProfilingContext::GetInstance().RecordCurrentThread((element), (event), \ | |||||
| ge::profiling::EventType::kEventEnd) | |||||
| #define PROFILING_SCOPE(element, event) ge::profiling::ScopeProfiler profiler((element), (event)) | |||||
| #define PROFILING_SCOPE_CONST(element, event) const ge::profiling::ScopeProfiler profiler((element), (event)) | |||||
| #define PROFILING_SCOPE_ELEMENT(element) profiler.SetElement((element)) | |||||
| #endif // AIR_CXX_PROFILING_DEFINITIONS_H | |||||
| @@ -0,0 +1,38 @@ | |||||
| /** | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021-2022. All rights reserved. | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_FRAMEWORK_COMMON_RUNTIME_TENSOR_DESC_H_ | |||||
| #define INC_FRAMEWORK_COMMON_RUNTIME_TENSOR_DESC_H_ | |||||
| #include <cstdint> | |||||
| namespace ge { | |||||
| constexpr int64_t kMaxDimSize = 32; | |||||
| #pragma pack(push, 1) | |||||
| struct RuntimeTensorDesc { | |||||
| uint64_t data_addr; | |||||
| int64_t data_offset_size; | |||||
| int64_t dtype; | |||||
| int64_t shape[kMaxDimSize + 1]; // shape:Dim_Num|DIM0|DIM1|...|DIM31 | |||||
| int64_t original_shape[kMaxDimSize + 1]; // original_shape:Dim_Num|DIM0|DIM1|...|DIM31 | |||||
| int64_t format; | |||||
| int64_t sub_format; | |||||
| uint8_t reserved[456]; // padding to 1024 bytes | |||||
| }; | |||||
| #pragma pack(pop) | |||||
| } // namespace ge | |||||
| #endif // INC_FRAMEWORK_COMMON_RUNTIME_TENSOR_DESC_H_ | |||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -18,14 +18,15 @@ | |||||
| #define INC_FRAMEWORK_COMMON_SCOPE_GUARD_H_ | #define INC_FRAMEWORK_COMMON_SCOPE_GUARD_H_ | ||||
| #include <functional> | #include <functional> | ||||
| #include <iostream> | |||||
| /// Usage: | /// Usage: | ||||
| /// Acquire Resource 1 | /// Acquire Resource 1 | ||||
| /// MAKE_GUARD([&] { Release Resource 1 }) | /// MAKE_GUARD([&] { Release Resource 1 }) | ||||
| /// Acquire Resource 2 | /// Acquire Resource 2 | ||||
| // MAKE_GUARD([&] { Release Resource 2 }) | // MAKE_GUARD([&] { Release Resource 2 }) | ||||
| #define GE_MAKE_GUARD(var, callback) ScopeGuard make_guard_##var(callback) | |||||
| #define GE_MAKE_GUARD(var, callback) const ::ge::ScopeGuard const_guard_##var(callback) | |||||
| #define GE_DISMISSABLE_GUARD(var, callback) ::ge::ScopeGuard make_guard_##var(callback) | |||||
| #define GE_DISMISS_GUARD(var) make_guard_##var.Dismiss() | #define GE_DISMISS_GUARD(var) make_guard_##var.Dismiss() | ||||
| namespace ge { | namespace ge { | ||||
| @@ -42,13 +43,16 @@ class GE_FUNC_VISIBILITY ScopeGuard { | |||||
| if (on_exit_scope_ != nullptr) { | if (on_exit_scope_ != nullptr) { | ||||
| try { | try { | ||||
| on_exit_scope_(); | on_exit_scope_(); | ||||
| } catch (std::bad_function_call &e) { } | |||||
| catch (...) { } | |||||
| } catch (std::bad_function_call &) { | |||||
| } catch (...) { | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| void Dismiss() { dismissed_ = true; } | |||||
| void Dismiss() { | |||||
| dismissed_ = true; | |||||
| } | |||||
| private: | private: | ||||
| std::function<void()> on_exit_scope_; | std::function<void()> on_exit_scope_; | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -39,24 +39,27 @@ | |||||
| #include <sstream> | #include <sstream> | ||||
| #include <string> | #include <string> | ||||
| #include <vector> | #include <vector> | ||||
| #include "graph/types.h" | |||||
| namespace ge { | namespace ge { | ||||
| class GE_FUNC_VISIBILITY StringUtils { | class GE_FUNC_VISIBILITY StringUtils { | ||||
| public: | public: | ||||
| static std::string &Ltrim(std::string &s) { | static std::string &Ltrim(std::string &s) { | ||||
| #if __cplusplus >= 201103L | #if __cplusplus >= 201103L | ||||
| (void)s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int c) { return !std::isspace(c); })); | |||||
| (void)s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](const int32_t c) { return std::isspace(c) == 0; })); | |||||
| #else | #else | ||||
| (void)s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace)))); | |||||
| (void)s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int32_t, int32_t>(std::isspace)))); | |||||
| #endif | #endif | ||||
| return s; | return s; | ||||
| } | } | ||||
| // lint -esym(551,*) | // lint -esym(551,*) | ||||
| static std::string &Rtrim(std::string &s) { /*lint !e618*/ | |||||
| static std::string &Rtrim(std::string &s) { /*lint !e618*/ | |||||
| #if __cplusplus >= 201103L | #if __cplusplus >= 201103L | ||||
| (void)s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int c) { return !std::isspace(c); })); | |||||
| (void)s.erase(std::find_if(s.rbegin(), s.rend(), [](const int32_t c) { return std::isspace(c) == 0; }).base(), | |||||
| s.end()); | |||||
| #else | #else | ||||
| (void)s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end()); | |||||
| (void)s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int32_t, int32_t>(std::isspace))).base(), | |||||
| s.end()); | |||||
| #endif | #endif | ||||
| return s; | return s; | ||||
| } | } | ||||
| @@ -67,7 +70,9 @@ class GE_FUNC_VISIBILITY StringUtils { | |||||
| /// @param [in] string to be trimmed | /// @param [in] string to be trimmed | ||||
| /// @return string after trim | /// @return string after trim | ||||
| /// | /// | ||||
| static std::string &Trim(std::string &s) { return Ltrim(Rtrim(s)); } | |||||
| static std::string &Trim(std::string &s) { | |||||
| return Ltrim(Rtrim(s)); | |||||
| } | |||||
| /// | /// | ||||
| /// @ingroup domi_common | /// @ingroup domi_common | ||||
| @@ -76,8 +81,8 @@ class GE_FUNC_VISIBILITY StringUtils { | |||||
| /// @param [in] delim separator | /// @param [in] delim separator | ||||
| /// @return string array after segmentation | /// @return string array after segmentation | ||||
| /// | /// | ||||
| static std::vector<std::string> Split(const std::string &str, char delim) { | |||||
| std::vector<std::string> elems; | |||||
| static std::vector<std::string, std::allocator<std::string>> Split(const std::string &str, const char_t delim) { | |||||
| std::vector<std::string, std::allocator<std::string>> elems; | |||||
| if (str.empty()) { | if (str.empty()) { | ||||
| elems.emplace_back(""); | elems.emplace_back(""); | ||||
| @@ -91,8 +96,8 @@ class GE_FUNC_VISIBILITY StringUtils { | |||||
| elems.push_back(item); | elems.push_back(item); | ||||
| } | } | ||||
| auto str_size = str.size(); | |||||
| if (str_size > 0 && str[str_size - 1] == delim) { | |||||
| const auto str_size = str.size(); | |||||
| if ((str_size > 0U) && (str[str_size - 1U] == delim)) { | |||||
| elems.emplace_back(""); | elems.emplace_back(""); | ||||
| } | } | ||||
| @@ -104,13 +109,13 @@ class GE_FUNC_VISIBILITY StringUtils { | |||||
| /// @param [in] s path name | /// @param [in] s path name | ||||
| /// @return file name | /// @return file name | ||||
| /// | /// | ||||
| static std::string GetFileName(std::string &s) { | |||||
| static std::string GetFileName(const std::string &s) { | |||||
| if (s.empty()) { | if (s.empty()) { | ||||
| return ""; | return ""; | ||||
| } | } | ||||
| std::vector<std::string> files = StringUtils::Split(s, '/'); | |||||
| const std::vector<std::string> files = StringUtils::Split(s, '/'); | |||||
| return files.empty() ? "" : files[files.size() - 1]; | |||||
| return files.empty() ? "" : files[files.size() - 1U]; | |||||
| } | } | ||||
| /// | /// | ||||
| /// @ingroup domi_common | /// @ingroup domi_common | ||||
| @@ -122,12 +127,13 @@ class GE_FUNC_VISIBILITY StringUtils { | |||||
| /// @return string after replacement | /// @return string after replacement | ||||
| /// | /// | ||||
| static std::string ReplaceAll(std::string str, const std::string &old_value, const std::string &new_value) { | static std::string ReplaceAll(std::string str, const std::string &old_value, const std::string &new_value) { | ||||
| std::string::size_type cur_pos = 0; | |||||
| std::string::size_type old_length = old_value.length(); | |||||
| std::string::size_type new_length = new_value.length(); | |||||
| std::string::size_type cur_pos = 0U; | |||||
| const std::string::size_type old_length = old_value.length(); | |||||
| const std::string::size_type new_length = new_value.length(); | |||||
| // cycle replace | // cycle replace | ||||
| for (; cur_pos != std::string::npos; cur_pos += new_length) { | for (; cur_pos != std::string::npos; cur_pos += new_length) { | ||||
| if ((cur_pos = str.find(old_value, cur_pos)) != std::string::npos) { | |||||
| cur_pos = str.find(old_value, cur_pos); | |||||
| if (cur_pos != std::string::npos) { | |||||
| (void)str.replace(cur_pos, old_length, new_value); | (void)str.replace(cur_pos, old_length, new_value); | ||||
| } else { | } else { | ||||
| break; | break; | ||||
| @@ -145,7 +151,7 @@ class GE_FUNC_VISIBILITY StringUtils { | |||||
| /// @return if the value is a prefix, true is returned. Otherwise, false is returned | /// @return if the value is a prefix, true is returned. Otherwise, false is returned | ||||
| /// | /// | ||||
| static bool StartWith(const std::string &str, const std::string str_x) { | static bool StartWith(const std::string &str, const std::string str_x) { | ||||
| return ((str.size() >= str_x.size()) && (str.compare(0, str_x.size(), str_x) == 0)); | |||||
| return ((str.size() >= str_x.size()) && (str.compare(0U, str_x.size(), str_x) == 0)); | |||||
| } | } | ||||
| /// | /// | ||||
| @@ -156,14 +162,14 @@ class GE_FUNC_VISIBILITY StringUtils { | |||||
| /// @param [in] ... format Filling Content | /// @param [in] ... format Filling Content | ||||
| /// @return formatted string | /// @return formatted string | ||||
| /// | /// | ||||
| static std::string FormatString(const char *format, ...) { | |||||
| const uint32_t MAX_BUFFER_LEN = 1024; // the stack memory plint check result must be less than 1024 | |||||
| static std::string FormatString(const char_t *const format, ...) { | |||||
| const uint32_t MAX_BUFFER_LEN = 1024U; // the stack memory plint check result must be less than 1024 | |||||
| va_list args; | va_list args; | ||||
| va_start(args, format); | va_start(args, format); | ||||
| char buffer[MAX_BUFFER_LEN] = {0}; | |||||
| int32_t ret = vsnprintf_s(buffer, MAX_BUFFER_LEN, MAX_BUFFER_LEN - 1, format, args); | |||||
| char_t buffer[MAX_BUFFER_LEN] = {}; | |||||
| const int32_t ret = vsnprintf_s(&buffer[0], MAX_BUFFER_LEN, MAX_BUFFER_LEN - 1U, format, args); | |||||
| va_end(args); | va_end(args); | ||||
| return ret > 0 ? buffer : ""; | |||||
| return (ret > 0) ? buffer : ""; | |||||
| } | } | ||||
| }; | }; | ||||
| } // namespace ge | } // namespace ge | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -21,9 +21,9 @@ | |||||
| namespace ge { | namespace ge { | ||||
| const int CC_FUSION_OP_MAX = 32; | |||||
| const int32_t CC_FUSION_OP_MAX = 32; | |||||
| typedef enum tagCcStatus { | |||||
| enum class ccStatus_t { | |||||
| CC_STATUS_SUCCESS = 0, /**< succ */ | CC_STATUS_SUCCESS = 0, /**< succ */ | ||||
| CC_STATUS_NOT_INITIALIZED = 1, /**< not init */ | CC_STATUS_NOT_INITIALIZED = 1, /**< not init */ | ||||
| CC_STATUS_ALLOC_FAILED = 2, /**< alloc mem failed */ | CC_STATUS_ALLOC_FAILED = 2, /**< alloc mem failed */ | ||||
| @@ -33,10 +33,10 @@ typedef enum tagCcStatus { | |||||
| CC_STATUS_RUNTIME_ERROR = 6, /**< runtime error */ | CC_STATUS_RUNTIME_ERROR = 6, /**< runtime error */ | ||||
| CC_STATUS_NOT_SUPPORTED = 7, /**< unsupport error */ | CC_STATUS_NOT_SUPPORTED = 7, /**< unsupport error */ | ||||
| CC_STATUS_INVALID_VALUE = 7, /**< invalid value error for blas*/ | CC_STATUS_INVALID_VALUE = 7, /**< invalid value error for blas*/ | ||||
| CC_STATUS_RESERVED /**< just for check */ | |||||
| } ccStatus_t; | |||||
| CC_STATUS_RESERVED = 8, /**< just for check */ | |||||
| }; | |||||
| typedef enum tagccKernelType { | |||||
| enum class ccKernelType { | |||||
| CCE_AI_CORE = 0, /* cce aicore */ | CCE_AI_CORE = 0, /* cce aicore */ | ||||
| CCE_AI_CPU = 1, /* cce aicpu */ | CCE_AI_CPU = 1, /* cce aicpu */ | ||||
| TE = 2, /* te operator*/ | TE = 2, /* te operator*/ | ||||
| @@ -47,9 +47,9 @@ typedef enum tagccKernelType { | |||||
| CUST_AI_CPU = 7, /* custom aicpu*/ | CUST_AI_CPU = 7, /* custom aicpu*/ | ||||
| HOST_CPU = 8, /* host cpu */ | HOST_CPU = 8, /* host cpu */ | ||||
| INVALID = 10000 /* unknown kernel type */ | INVALID = 10000 /* unknown kernel type */ | ||||
| } ccKernelType; | |||||
| }; | |||||
| typedef struct tagOpContext { | |||||
| using ccOpContext = struct tagOpContext { | |||||
| ccKernelType kernelType; | ccKernelType kernelType; | ||||
| uint32_t opId; | uint32_t opId; | ||||
| uint32_t kernelFuncId; | uint32_t kernelFuncId; | ||||
| @@ -66,7 +66,28 @@ typedef struct tagOpContext { | |||||
| uint64_t genVariableBaseAddr; | uint64_t genVariableBaseAddr; | ||||
| uint64_t genVariableBaseSize; | uint64_t genVariableBaseSize; | ||||
| uint64_t l2ctrlSize; | uint64_t l2ctrlSize; | ||||
| } ccOpContext; | |||||
| } // namespace ge | |||||
| }; | |||||
| enum class tagOpTensorFormat { OP_TENSOR_FORMAT_NC1HWC0 = 0, OP_TENSOR_FORMAT_ND, OP_TENSOR_FORMAT_RESERVED }; | |||||
| enum class tagOpDataType { | |||||
| OP_DATA_FLOAT = 0, /**< float type */ | |||||
| OP_DATA_HALF, /**< fp16 type */ | |||||
| OP_DATA_INT8, /**< int8 type */ | |||||
| OP_DATA_INT32, /**< int32 type */ | |||||
| OP_DATA_UINT8, /**< uint8 type */ | |||||
| OP_DATA_HALF_UINT16_PROPOSAL, /**< mixed type for proposal */ | |||||
| OP_DATA_RESERVED | |||||
| }; | |||||
| // AICPU Tensor | |||||
| using ccAICPUTensor = struct tagOpTensor { | |||||
| // real dim info | |||||
| tagOpTensorFormat format; | |||||
| tagOpDataType data_type; | |||||
| int32_t dim_cnt; | |||||
| int32_t mm; | |||||
| int32_t dim[8]; | |||||
| }; | |||||
| } // namespace ge | |||||
| #endif // INC_FRAMEWORK_COMMON_TASKDOWN_COMMON_H_ | #endif // INC_FRAMEWORK_COMMON_TASKDOWN_COMMON_H_ | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -17,28 +17,16 @@ | |||||
| #ifndef INC_FRAMEWORK_COMMON_TYPES_H_ | #ifndef INC_FRAMEWORK_COMMON_TYPES_H_ | ||||
| #define INC_FRAMEWORK_COMMON_TYPES_H_ | #define INC_FRAMEWORK_COMMON_TYPES_H_ | ||||
| #include <limits.h> | |||||
| #include <stdint.h> | |||||
| #include <algorithm> | |||||
| #include <cstdint> | |||||
| #include <map> | #include <map> | ||||
| #include <memory> | #include <memory> | ||||
| #include <string> | #include <string> | ||||
| #include <utility> | |||||
| #include <vector> | |||||
| #include "framework/common/fmk_error_codes.h" | #include "framework/common/fmk_error_codes.h" | ||||
| #include "framework/common/fmk_types.h" | #include "framework/common/fmk_types.h" | ||||
| #include "framework/common/op_types.h" | #include "framework/common/op_types.h" | ||||
| #include "register/register_types.h" | #include "register/register_types.h" | ||||
| #if !defined(__ANDROID__) && !defined(ANDROID) | |||||
| #define DOMI_DYNAMIC_CAST static_cast | |||||
| #define DOMI_DYNAMIC_POINTER_CAST std::static_pointer_cast | |||||
| #else | |||||
| #define DOMI_DYNAMIC_CAST static_cast | |||||
| #define DOMI_DYNAMIC_POINTER_CAST std::static_pointer_cast | |||||
| #endif | |||||
| namespace ge { | namespace ge { | ||||
| // dump | // dump | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string DUMP_MODEL; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string DUMP_MODEL; | ||||
| @@ -51,54 +39,20 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string OP_DEB | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string OP_DEBUG_ATOMIC; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string OP_DEBUG_ATOMIC; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string OP_DEBUG_ALL; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string OP_DEBUG_ALL; | ||||
| // Supported public properties name | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string PROP_OME_START_TIME; // Start time | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string PROP_OME_DUMP_PATH; // Dump path | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string PROP_OME_LOG_PATH; // Log path | |||||
| // Profile-related constants | // Profile-related constants | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t CCE_PROFILE_ON; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t CCE_PROFILE_OFF; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string OME_PROFILE; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string CCE_PROFILE; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string RTS_PROFILE; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string PROFILER_JOBCTX; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string PROFILER_TARGET_PATH; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string RTS_PROFILE_PATH; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string PROFILE_STOP_KEY; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string PROFILE_STOP_VALUE; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::map<std::string, std::string> PROFILE_COMPONENT_MAP; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string PROFILE_CONFIG; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string PROFILE_MODEL_ID; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string PROFILE_MODEL_ID; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string MODEL_ATTR_TASKS; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string MODEL_ATTR_TASKS; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string MODEL_ATTR_TASK_GEN_BASE_ADDR; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string MODEL_ATTR_TASK_GEN_BASE_ADDR; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string MODEL_ATTR_TASK_GEN_HOST_BASE_ADDR; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string MODEL_ATTR_HOST_MEMORY_SIZE; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string MODEL_ATTR_TASK_GEN_WEIGHT_ADDR; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string MODEL_ATTR_TASK_GEN_WEIGHT_ADDR; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string MODEL_ATTR_FUSION_MODEL_DEF; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string MODEL_ATTR_FUSION_MODEL_DEF; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const int MODEL_MAX_SIZE; // Max size of 2 GB minus 1 byte. | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint64_t FILE_HEADER_MAX_SIZE; // Max size of 3 GB. | |||||
| #if !defined(__ANDROID__) && !defined(ANDROID) | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint64_t ALLOC_MEMORY_MAX_SIZE; // Max size of 8 GB. | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint64_t ALLOC_MEMORY_MAX_SIZE; // Max size of 8 GB. | ||||
| #else | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint64_t ALLOC_MEMORY_MAX_SIZE; // Max size of 512M. | |||||
| #endif | |||||
| template <typename K, typename V> | |||||
| static std::pair<V, K> flip_pair(const std::pair<K, V> &p) { | |||||
| return std::pair<V, K>(p.second, p.first); | |||||
| } | |||||
| template <typename K, typename V> | |||||
| static std::map<V, K> flip_map(std::map<K, V> src) { | |||||
| std::map<V, K> dst; | |||||
| std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), flip_pair<K, V>); | |||||
| return dst; | |||||
| } | |||||
| REGISTER_OPTYPE_DECLARE(DATA, "Data"); | REGISTER_OPTYPE_DECLARE(DATA, "Data"); | ||||
| REGISTER_OPTYPE_DECLARE(AIPPDATA, "AippData"); | REGISTER_OPTYPE_DECLARE(AIPPDATA, "AippData"); | ||||
| REGISTER_OPTYPE_DECLARE(QUEUE_DATA, "QueueData"); | |||||
| REGISTER_OPTYPE_DECLARE(CONVOLUTION, "Convolution"); | REGISTER_OPTYPE_DECLARE(CONVOLUTION, "Convolution"); | ||||
| REGISTER_OPTYPE_DECLARE(CORRELATION, "Correlation"); | REGISTER_OPTYPE_DECLARE(CORRELATION, "Correlation"); | ||||
| REGISTER_OPTYPE_DECLARE(CORRELATIONV2, "Correlation_V2"); | REGISTER_OPTYPE_DECLARE(CORRELATIONV2, "Correlation_V2"); | ||||
| @@ -134,6 +88,7 @@ REGISTER_OPTYPE_DECLARE(DROPOUTDOMASKV3, "DropOutDoMaskV3"); | |||||
| REGISTER_OPTYPE_DECLARE(DROPOUTDOMASKV3D, "DropOutDoMaskV3D"); | REGISTER_OPTYPE_DECLARE(DROPOUTDOMASKV3D, "DropOutDoMaskV3D"); | ||||
| REGISTER_OPTYPE_DECLARE(SOFTMAXV2WITHDROPOUTDOMASKV3D, "SoftmaxV2WithDropOutDoMaskV3D"); | REGISTER_OPTYPE_DECLARE(SOFTMAXV2WITHDROPOUTDOMASKV3D, "SoftmaxV2WithDropOutDoMaskV3D"); | ||||
| REGISTER_OPTYPE_DECLARE(DROPOUTGENMASK, "DropOutGenMask"); | REGISTER_OPTYPE_DECLARE(DROPOUTGENMASK, "DropOutGenMask"); | ||||
| REGISTER_OPTYPE_DECLARE(AXPYWITHSOFTMAXANDDROPOUTDOMASK, "AxpyWithSoftmaxAndDropOutDoMask"); | |||||
| REGISTER_OPTYPE_DECLARE(CONCAT, "Concat"); | REGISTER_OPTYPE_DECLARE(CONCAT, "Concat"); | ||||
| REGISTER_OPTYPE_DECLARE(ROIPOOLING, "ROIPooling"); | REGISTER_OPTYPE_DECLARE(ROIPOOLING, "ROIPooling"); | ||||
| REGISTER_OPTYPE_DECLARE(PROPOSAL, "Proposal"); | REGISTER_OPTYPE_DECLARE(PROPOSAL, "Proposal"); | ||||
| @@ -167,6 +122,10 @@ REGISTER_OPTYPE_DECLARE(SLICED, "SliceD"); | |||||
| REGISTER_OPTYPE_DECLARE(FLOORDIV, "FloorDiv"); | REGISTER_OPTYPE_DECLARE(FLOORDIV, "FloorDiv"); | ||||
| REGISTER_OPTYPE_DECLARE(SQUEEZE, "Squeeze"); | REGISTER_OPTYPE_DECLARE(SQUEEZE, "Squeeze"); | ||||
| REGISTER_OPTYPE_DECLARE(UNSQUEEZE, "Unsqueeze"); | REGISTER_OPTYPE_DECLARE(UNSQUEEZE, "Unsqueeze"); | ||||
| REGISTER_OPTYPE_DECLARE(SQUEEZEV2, "SqueezeV2"); | |||||
| REGISTER_OPTYPE_DECLARE(UNSQUEEZEV2, "UnsqueezeV2"); | |||||
| REGISTER_OPTYPE_DECLARE(SQUEEZEV3, "SqueezeV3"); | |||||
| REGISTER_OPTYPE_DECLARE(UNSQUEEZEV3, "UnsqueezeV3"); | |||||
| REGISTER_OPTYPE_DECLARE(STRIDEDSLICE, "StridedSlice"); | REGISTER_OPTYPE_DECLARE(STRIDEDSLICE, "StridedSlice"); | ||||
| REGISTER_OPTYPE_DECLARE(RANGE, "Range"); | REGISTER_OPTYPE_DECLARE(RANGE, "Range"); | ||||
| REGISTER_OPTYPE_DECLARE(RPNPROPOSALS, "GenerateRpnProposals"); | REGISTER_OPTYPE_DECLARE(RPNPROPOSALS, "GenerateRpnProposals"); | ||||
| @@ -203,6 +162,7 @@ REGISTER_OPTYPE_DECLARE(_IF, "_If"); | |||||
| REGISTER_OPTYPE_DECLARE(STATELESSIF, "StatelessIf"); | REGISTER_OPTYPE_DECLARE(STATELESSIF, "StatelessIf"); | ||||
| REGISTER_OPTYPE_DECLARE(IF, "If"); | REGISTER_OPTYPE_DECLARE(IF, "If"); | ||||
| REGISTER_OPTYPE_DECLARE(CASE, "Case"); | REGISTER_OPTYPE_DECLARE(CASE, "Case"); | ||||
| REGISTER_OPTYPE_DECLARE(STATELESSCASE, "StatelessCase"); | |||||
| REGISTER_OPTYPE_DECLARE(_WHILE, "_While"); | REGISTER_OPTYPE_DECLARE(_WHILE, "_While"); | ||||
| REGISTER_OPTYPE_DECLARE(WHILE, "While"); | REGISTER_OPTYPE_DECLARE(WHILE, "While"); | ||||
| REGISTER_OPTYPE_DECLARE(STATELESSWHILE, "StatelessWhile"); | REGISTER_OPTYPE_DECLARE(STATELESSWHILE, "StatelessWhile"); | ||||
| @@ -339,10 +299,15 @@ REGISTER_OPTYPE_DECLARE(PLACEHOLDER, "PlaceHolder"); | |||||
| REGISTER_OPTYPE_DECLARE(END, "End"); | REGISTER_OPTYPE_DECLARE(END, "End"); | ||||
| REGISTER_OPTYPE_DECLARE(BASICLSTMCELL, "BasicLSTMCell"); | REGISTER_OPTYPE_DECLARE(BASICLSTMCELL, "BasicLSTMCell"); | ||||
| REGISTER_OPTYPE_DECLARE(GETNEXT, "GetNext"); | REGISTER_OPTYPE_DECLARE(GETNEXT, "GetNext"); | ||||
| REGISTER_OPTYPE_DECLARE(ITERATOR, "Iterator"); | |||||
| REGISTER_OPTYPE_DECLARE(ITERATORV2, "IteratorV2"); | |||||
| REGISTER_OPTYPE_DECLARE(INITDATA, "InitData"); | REGISTER_OPTYPE_DECLARE(INITDATA, "InitData"); | ||||
| REGISTER_OPTYPE_DECLARE(TRANSSHAPE, "TransShape") | REGISTER_OPTYPE_DECLARE(TRANSSHAPE, "TransShape") | ||||
| REGISTER_OPTYPE_DECLARE(REFIDENTITY, "RefIdentity"); | REGISTER_OPTYPE_DECLARE(REFIDENTITY, "RefIdentity"); | ||||
| REGISTER_OPTYPE_DECLARE(BITCAST, "Bitcast"); | REGISTER_OPTYPE_DECLARE(BITCAST, "Bitcast"); | ||||
| REGISTER_OPTYPE_DECLARE(GATHERSHAPES, "GatherShapes"); | |||||
| REGISTER_OPTYPE_DECLARE(FLATTENV2, "FlattenV2"); | |||||
| REGISTER_OPTYPE_DECLARE(FILECONSTANT, "FileConstant"); | |||||
| // ANN dedicated operator | // ANN dedicated operator | ||||
| REGISTER_OPTYPE_DECLARE(ANN_MEAN, "AnnMean"); | REGISTER_OPTYPE_DECLARE(ANN_MEAN, "AnnMean"); | ||||
| @@ -460,6 +425,7 @@ REGISTER_OPTYPE_DECLARE(MODELEXIT, "ModelExit"); | |||||
| REGISTER_OPTYPE_DECLARE(SEND, "Send"); | REGISTER_OPTYPE_DECLARE(SEND, "Send"); | ||||
| REGISTER_OPTYPE_DECLARE(RECV, "Recv"); | REGISTER_OPTYPE_DECLARE(RECV, "Recv"); | ||||
| REGISTER_OPTYPE_DECLARE(ENDOFSEQUENCE, "EndOfSequence"); | REGISTER_OPTYPE_DECLARE(ENDOFSEQUENCE, "EndOfSequence"); | ||||
| REGISTER_OPTYPE_DECLARE(STARTOFSEQUENCE, "StartOfSequence"); | |||||
| REGISTER_OPTYPE_DECLARE(LABELSET, "LabelSet"); | REGISTER_OPTYPE_DECLARE(LABELSET, "LabelSet"); | ||||
| REGISTER_OPTYPE_DECLARE(LABELGOTO, "LabelGoto"); | REGISTER_OPTYPE_DECLARE(LABELGOTO, "LabelGoto"); | ||||
| @@ -483,8 +449,6 @@ REGISTER_OPTYPE_DECLARE(ELU_GRAD, "EluGrad"); | |||||
| REGISTER_OPTYPE_DECLARE(ADD_V2, "AddV2"); | REGISTER_OPTYPE_DECLARE(ADD_V2, "AddV2"); | ||||
| REGISTER_OPTYPE_DECLARE(DATAFORMATDIMMAP, "DataFormatDimMap"); | REGISTER_OPTYPE_DECLARE(DATAFORMATDIMMAP, "DataFormatDimMap"); | ||||
| REGISTER_OPTYPE_DECLARE(DATAFORMATVECPERMUTE, "DataFormatVecPermute"); | REGISTER_OPTYPE_DECLARE(DATAFORMATVECPERMUTE, "DataFormatVecPermute"); | ||||
| REGISTER_OPTYPE_DECLARE(BESSELI0e, "BesselI0e"); | |||||
| REGISTER_OPTYPE_DECLARE(BESSELI1e, "BesselI1e"); | |||||
| REGISTER_OPTYPE_DECLARE(DEQUANTIZE, "Dequantize"); | REGISTER_OPTYPE_DECLARE(DEQUANTIZE, "Dequantize"); | ||||
| REGISTER_OPTYPE_DECLARE(APPLYADADELTA, "ApplyAdadelta"); | REGISTER_OPTYPE_DECLARE(APPLYADADELTA, "ApplyAdadelta"); | ||||
| REGISTER_OPTYPE_DECLARE(APPLYADAGRAD, "ApplyAdagrad"); | REGISTER_OPTYPE_DECLARE(APPLYADAGRAD, "ApplyAdagrad"); | ||||
| @@ -538,29 +502,11 @@ REGISTER_OPTYPE_DECLARE(GETDYNAMICDIMS, "GetDynamicDims"); | |||||
| // profiling training trace node | // profiling training trace node | ||||
| REGISTER_OPTYPE_DECLARE(PROFILINGTRAININGTRACE, "ProfilingTrainingTrace"); | REGISTER_OPTYPE_DECLARE(PROFILINGTRAININGTRACE, "ProfilingTrainingTrace"); | ||||
| enum InputMode { INPUT = 0, CONST_INPUT }; | |||||
| // Definition of the processing status enum of the process module | |||||
| enum ModelProcessState { | |||||
| INIT_STATE = 0, // init status | |||||
| WAIT_EVENT_STATE, // Wait for the event status | |||||
| IND_RSLT_STATE, // The model execution result is being output to the high level | |||||
| STOPPED_STATE, // Model execution completed. The model enters this state after Model Manager::Stop | |||||
| RESERVED_STATE, // reserved | |||||
| }; | |||||
| // Indicates the enun definition of the execution mode of the access module | |||||
| enum SysMode { | |||||
| INFERENCE = 0, // Normal, that is, Inference mode | |||||
| DEBUG, // Debug mode | |||||
| TIME, // Model execution time mode, including the execution time of each OP | |||||
| STOP, // STOP mode | |||||
| RESET, // RESET mode | |||||
| PERFORMANCE, // Impact of enabling the performance model: 1. The input data of the model is considered ready and does | |||||
| // not need to be converted | |||||
| ANDROID_DEBUG, // Exports Android platform computing data | |||||
| RESERVED, // reserved | |||||
| }; | |||||
| // Stack series | |||||
| REGISTER_OPTYPE_DECLARE(STACK, "Stack"); | |||||
| REGISTER_OPTYPE_DECLARE(STACKPUSH, "StackPush"); | |||||
| REGISTER_OPTYPE_DECLARE(STACKPOP, "StackPop"); | |||||
| REGISTER_OPTYPE_DECLARE(STACKCLOSE, "StackClose"); | |||||
| // @brief encryption type of the model file | // @brief encryption type of the model file | ||||
| enum ModelEncryptType { | enum ModelEncryptType { | ||||
| @@ -599,50 +545,22 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t MODEL_FIL | |||||
| /// | /// | ||||
| /// @brief model name length | /// @brief model name length | ||||
| /// | /// | ||||
| static constexpr uint32_t MODEL_NAME_LENGTH = 32; | |||||
| constexpr uint32_t MODEL_NAME_LENGTH = 32U; | |||||
| /// | /// | ||||
| /// @brief length of user-defined information | /// @brief length of user-defined information | ||||
| /// | /// | ||||
| static constexpr uint32_t USER_DEFINE_INFO_LENGTH = 32; | |||||
| constexpr uint32_t USER_DEFINE_INFO_LENGTH = 32U; | |||||
| /// | /// | ||||
| /// @brief length of the model file signature | /// @brief length of the model file signature | ||||
| /// | /// | ||||
| static constexpr uint32_t MODEL_FILE_CHECKSUM_LENGTH = 64; | |||||
| constexpr uint32_t MODEL_FILE_CHECKSUM_LENGTH = 64U; | |||||
| /// | /// | ||||
| /// @brief length of the reserved field in the model file header | /// @brief length of the reserved field in the model file header | ||||
| /// | /// | ||||
| static constexpr uint32_t MODEL_FILE_RESERVED_LENGTH = 75; | |||||
| /// | |||||
| /// @ingroup domi_omg | |||||
| /// @brief INPUT node type | |||||
| /// | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string INPUT_TYPE; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string DUMMY_DATA; | |||||
| /// | |||||
| /// @ingroup domi_omg | |||||
| /// @brief AIPP flag, indicating the aipp conv operator | |||||
| /// | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string AIPP_CONV_FLAG; | |||||
| /// | |||||
| /// @ingroup domi_omg | |||||
| /// @brief AIPP flag, indicating the aipp data operator | |||||
| /// | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string AIPP_DATA_FLAG; | |||||
| // flag of the Data operator, indicating that the input will be input to the dynamic AIPP operator | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string INPUT_TO_DYNAMIC_AIPP; | |||||
| // records the W dimension of the model input corresponding to the dynamic AIPP | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string AIPP_RELATED_DATA_DIM_W; | |||||
| // H dimension of the model input corresponding to the dynamic AIPP | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string AIPP_RELATED_DATA_DIM_H; | |||||
| constexpr uint32_t MODEL_FILE_RESERVED_LENGTH = 75U; | |||||
| // DATA node type | // DATA node type | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string DATA_TYPE; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string DATA_TYPE; | ||||
| @@ -655,10 +573,6 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string FRAMEW | |||||
| // DATA node type | // DATA node type | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string ANN_DATA_TYPE; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string ANN_DATA_TYPE; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string ANN_NETOUTPUT_TYPE; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string ANN_DEPTHCONV_TYPE; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string ANN_CONV_TYPE; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string ANN_FC_TYPE; | |||||
| // convolution node type | // convolution node type | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_NET_OUTPUT; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_NET_OUTPUT; | ||||
| @@ -667,161 +581,31 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_N | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_OP_DEBUG; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_OP_DEBUG; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string OP_TYPE_OP_DEBUG; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string OP_TYPE_OP_DEBUG; | ||||
| // convolution node type | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string OP_TYPE_CONVOLUTION; | |||||
| // adds a convolutional node name for the hard AIPP | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string AIPP_CONV_OP_NAME; | |||||
| // delimiter of operator configuration items | // delimiter of operator configuration items | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string OP_CONF_DELIMITER; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string OP_CONF_DELIMITER; | ||||
| // op attr name | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string ATTR_NAME_VALUE1; | |||||
| // op attr name, used to 6d_2_4d C channel | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string ATTR_NAME_INPUT_CVALUE; | |||||
| // op attr name | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string ATTR_NAME_VALUE1; | |||||
| // alpha default value | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const float ALPHA_DEFAULT_VALUE; | |||||
| // beta default value | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const float BETA_DEFAULT_VALUE; | |||||
| // coef default value | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const float COEF_DEFAULT_VALUE; | |||||
| // coef value of Relu6 | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const float RELU6_COEF; | |||||
| // stride default value | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t STRIDE_DEFAULT_VALUE; | |||||
| // pad default value | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t PAD_DEFAULT_VALUE; | |||||
| // dilation default value | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const int DILATION_DEFAULT_VALUE; | |||||
| // kernel default value | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t KERNEL_DEFAULT_VALUE; | |||||
| // default conv Group Size | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t DEFAULT_CONV_GROUP; | |||||
| // default deconv adj | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t DEFAULT_DECONV_ADJ; | |||||
| // indicate num 1 | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NUM_ONE; | |||||
| // dim default size value | // dim default size value | ||||
| static const int32_t DIM_DEFAULT_SIZE = 4; | |||||
| // the shape of c must be the mutiply of 16 for depthwise | |||||
| static const uint32_t DEPTHWISE_DIM_C_BASE_NUM = 16; | |||||
| // C1HWNCoC0 dim size | |||||
| static const int32_t DIM_C1HWNCoC0_SIZE = 6; | |||||
| // C1HWNCoC0 C0 value | |||||
| static const int C1HWCOC_C0_VALUE = 16; | |||||
| // spatial default dim size | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const int32_t SPATIAL_DIM_DEFAULT_SIZE; | |||||
| constexpr int32_t DIM_DEFAULT_SIZE = 4; | |||||
| // dim extension default value | // dim extension default value | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const int32_t DIM_DEFAULT_VALUE; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const int32_t DIM_DEFAULT_VALUE; | ||||
| // the first item in the weight list of opdef is filter | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const int32_t WEIGHT_FILTER_INDEX; | |||||
| // the second item in the weight list of opdef is bias. | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const int32_t WEIGHT_BIAS_INDEX; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const int32_t TENSOR_ND_SUPPORT_SIZE; | |||||
| // default NCHW index | // default NCHW index | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_N; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_N; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_C; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_C; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_H; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_H; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_W; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_W; | ||||
| // default C1HWNCoC0 index | |||||
| static const uint32_t C1HWNCoC0_DIM_C1 = 0; | |||||
| static const uint32_t C1HWNCoC0_DIM_H = 1; | |||||
| static const uint32_t C1HWNCoC0_DIM_W = 2; | |||||
| static const uint32_t C1HWNCoC0_DIM_N = 3; | |||||
| static const uint32_t C1HWNCoC0_DIM_Co = 4; | |||||
| static const uint32_t C1HWNCoC0_DIM_C0 = 5; | |||||
| // default KCHW index | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t KCHW_DIM_K; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t KCHW_DIM_C; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t KCHW_DIM_H; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t KCHW_DIM_W; | |||||
| // default HWCK index | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t HWCK_DIM_H; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t HWCK_DIM_W; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t HWCK_DIM_C; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t HWCK_DIM_K; | |||||
| // default NHWC index | // default NHWC index | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_N; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_N; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_H; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_H; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_W; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_W; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_C; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_C; | ||||
| // default CHWN index | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t CHWN_DIM_N; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t CHWN_DIM_C; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t CHWN_DIM_H; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t CHWN_DIM_W; | |||||
| // default CHW index | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t CHW_DIM_C; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t CHW_DIM_H; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t CHW_DIM_W; | |||||
| // default HWC index | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t HWC_DIM_H; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t HWC_DIM_W; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t HWC_DIM_C; | |||||
| // default Pad index | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t PAD_H_HEAD; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t PAD_H_TAIL; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t PAD_W_HEAD; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t PAD_W_TAIL; | |||||
| // default window index | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t WINDOW_H; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t WINDOW_W; | |||||
| // default stride index | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t STRIDE_H; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t STRIDE_W; | |||||
| // default dilation index | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t DILATION_H; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t DILATION_W; | |||||
| // the num of XRBG channel | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t XRGB_CHN_NUM; | |||||
| // default tensor format | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const int DEFAULT_FORMAT; | |||||
| // default global pooling | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const bool DEFAULT_GLOBAL_POOLING; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t MODEL_VERSION; // model version 1.0 | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t MODEL_VERSION; // model version 1.0 | ||||
| // Number of inputs of the Eltwise operator | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const int ELTWISE_MIN_INPUT_SIZE; | |||||
| // flowctrl | // flowctrl | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_STREAM_SWITCH; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_STREAM_SWITCH; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_STREAM_ACTIVE; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_FLOWCTRL_LOOP_PER_ITER; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_FLOWCTRL_LOOP_PER_ITER; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_FLOWCTRL_LOOP_COND; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_FLOWCTRL_LOOP_COND; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_FLOWCTRL_LOOP_INCREMENT; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_FLOWCTRL_LOOP_INCREMENT; | ||||
| @@ -833,41 +617,36 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t TRUE_STRE | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t STREAM_SWITCH_INPUT_NUM; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t STREAM_SWITCH_INPUT_NUM; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_GLOBAL_STEP; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_GLOBAL_STEP; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const std::string NODE_NAME_GLOBAL_STEP_ASSIGNADD; | |||||
| static const int PLATFORM_VERSION_LEN = 20; | |||||
| constexpr uint32_t PLATFORM_VERSION_LEN = 20U; | |||||
| // Definition of the file header of the model file | // Definition of the file header of the model file | ||||
| struct ModelFileHeader { | struct ModelFileHeader { | ||||
| uint32_t magic = MODEL_FILE_MAGIC_NUM; // magic number of DOMI | |||||
| uint32_t headsize = MODEL_FILE_HEAD_LEN; // length of the model header. The value is fixed at 256 | |||||
| uint32_t version = MODEL_VERSION; // version 1.0 | |||||
| uint8_t checksum[MODEL_FILE_CHECKSUM_LENGTH] = {0}; // signature | |||||
| uint32_t length = 0; // Ciphertext length. In the non-encryption model, the length is the plaintext length. | |||||
| uint8_t is_encrypt = ModelEncryptType::UNENCRYPTED; // whether encrypted 0:not encrypt, 1:encrypt | |||||
| uint8_t is_checksum = ModelCheckType::CHECK; // whether to check the checksum | |||||
| uint8_t modeltype = 0; // 0:IR model 1:standard model 2: OM Tiny model | |||||
| uint8_t genmode = 0; // 0:offline generate 1:online generate | |||||
| uint8_t name[MODEL_NAME_LENGTH] = {0}; // Model name, which contains 32 characters | |||||
| uint32_t ops = 0; // Computing power (Kops) | |||||
| uint8_t userdefineinfo[USER_DEFINE_INFO_LENGTH] = {0}; // User-defined information. The value contains 32 characters | |||||
| uint32_t om_ir_version = 0; | |||||
| uint32_t model_num = 0; | |||||
| uint8_t platform_version[PLATFORM_VERSION_LEN] = {0}; | |||||
| uint8_t platform_type = {0}; | |||||
| uint8_t reserved[MODEL_FILE_RESERVED_LENGTH] = {0}; // Reserved field 75 | |||||
| uint32_t magic = MODEL_FILE_MAGIC_NUM; // magic number of DOMI | |||||
| uint32_t headsize = MODEL_FILE_HEAD_LEN; // length of the model header. The value is fixed at 256 | |||||
| uint32_t version = MODEL_VERSION; // version 1.0 | |||||
| uint8_t checksum[MODEL_FILE_CHECKSUM_LENGTH] = {0U}; // signature | |||||
| uint32_t length = 0U; // Ciphertext length. In the non-encryption model, the length is the plaintext length. | |||||
| // whether encrypted 0:not encrypt, 1:encrypt | |||||
| uint8_t is_encrypt = static_cast<uint8_t>(ModelEncryptType::UNENCRYPTED); | |||||
| uint8_t is_checksum = static_cast<uint8_t>(ModelCheckType::CHECK); // whether to check the checksum | |||||
| uint8_t modeltype = 0U; // 0:IR model 1:standard model 2: OM Tiny model | |||||
| uint8_t genmode = 0U; // 0:offline generate 1:online generate | |||||
| uint8_t name[MODEL_NAME_LENGTH] = {0U}; // Model name, which contains 32 characters | |||||
| uint32_t ops = 0U; // Computing power (Kops) | |||||
| uint8_t userdefineinfo[USER_DEFINE_INFO_LENGTH] = {0U}; // User-defined information. The value contains 32 characters | |||||
| uint32_t om_ir_version = 0U; | |||||
| uint32_t model_num = 0U; | |||||
| uint8_t platform_version[PLATFORM_VERSION_LEN] = {0U}; | |||||
| uint8_t platform_type = {0U}; | |||||
| uint8_t reserved[MODEL_FILE_RESERVED_LENGTH] = {0U}; // Reserved field 75 | |||||
| }; | }; | ||||
| static constexpr uint8_t TARGET_TYPE_LTTE_8BIT = 0; | |||||
| static constexpr uint8_t TARGET_TYPE_MINI_8BIT = 1; | |||||
| static constexpr uint8_t TARGET_TYPE_TINY_8BIT = 2; | |||||
| static constexpr int32_t PARTITION_TYPE_MODEL_DEF = 0; | |||||
| static constexpr int32_t PARTITION_TYPE_WEIGHTS = 1; | |||||
| static constexpr int32_t PARTITION_TYPE_TASK_INFO = 2; | |||||
| constexpr uint8_t TARGET_TYPE_LTTE_8BIT = 0U; | |||||
| constexpr uint8_t TARGET_TYPE_MINI_8BIT = 1U; | |||||
| // number of partitions in the current model | // number of partitions in the current model | ||||
| static constexpr uint32_t PARTITION_SIZE = 5; | |||||
| constexpr uint32_t PARTITION_SIZE = 5U; | |||||
| enum ModelPartitionType { MODEL_DEF = 0, WEIGHTS_DATA, TASK_INFO, TBE_KERNELS, CUST_AICPU_KERNELS }; | enum ModelPartitionType { MODEL_DEF = 0, WEIGHTS_DATA, TASK_INFO, TBE_KERNELS, CUST_AICPU_KERNELS }; | ||||
| @@ -882,24 +661,9 @@ struct ModelPartitionTable { | |||||
| ModelPartitionMemInfo partition[0]; | ModelPartitionMemInfo partition[0]; | ||||
| }; | }; | ||||
| #define SIZE_OF_MODEL_PARTITION_TABLE(table) (sizeof(ModelPartitionTable) + sizeof(ModelPartitionMemInfo) * (table).num) | |||||
| static constexpr int32_t PTHREAD_CREAT_SUCCESS = 0; // pthread_creat success | |||||
| // Filter format | |||||
| typedef enum tagDomiFilterFormat { | |||||
| DOMI_FILTER_KCHW, // KCHW | |||||
| DOMI_FILTER_HWCK, // HWCK | |||||
| DOMI_FILTER_RESERVED | |||||
| } domiFilterFormat_t; | |||||
| // Const data trans type | |||||
| typedef enum tagDomiConstDataTransType { | |||||
| DOMI_CONST_DATA_NOT_CHANGE = 0, // No action is required | |||||
| DOMI_CONST_DATA_TRANS_MATMUL, // The const input to MatMul and needs to be transposed | |||||
| DOMI_CONST_DATA_RESERVED | |||||
| } domiConstDataTransType_t; | |||||
| inline uint64_t SizeOfModelPartitionTable(const ModelPartitionTable &table) { | |||||
| return sizeof(ModelPartitionTable) + (sizeof(ModelPartitionMemInfo) * static_cast<uint64_t>(table.num)); | |||||
| } | |||||
| // mode of activation | // mode of activation | ||||
| typedef enum tagDomiActivationMode { | typedef enum tagDomiActivationMode { | ||||
| DOMI_ACTIVATION_SIGMOID = 0, // sigmoid | DOMI_ACTIVATION_SIGMOID = 0, // sigmoid | ||||
| @@ -919,190 +683,6 @@ typedef enum tagDomiActivationMode { | |||||
| DOMI_ACTIVATION_RESERVED | DOMI_ACTIVATION_RESERVED | ||||
| } domiActivationMode_t; | } domiActivationMode_t; | ||||
| // mode of batchnorm | |||||
| typedef enum tagDomiBatchNormMode { | |||||
| DOMI_BATCHNORM_PER_ACTIVATION = 0, // bnScale, bnBias tensor dims are 1xCxHxW | |||||
| DOMI_BATCHNORM_SPATIAL, // bnScale, bnBias tensor dims are 1xCx1x1 | |||||
| DOMI_BATCHNORM_RESERVED | |||||
| } domiBatchNormMode_t; | |||||
| // eltwise mode | |||||
| typedef enum tagDomiEltwiseMode { | |||||
| DOMI_ELTWISE_PROD = 0, // prod | |||||
| DOMI_ELTWISE_SUM, // sum | |||||
| DOMI_ELTWISE_MAX, // max | |||||
| DOMI_ELTWISE_RESERVED | |||||
| } domiEltwiseMode_t; | |||||
| // mode of padding | |||||
| typedef enum tagDomiPaddingMode { | |||||
| DOMI_PADDING_CEIL = 0, // Default padding mode | |||||
| DOMI_PADDING_DIRECTASSIGN, // Default padding mode: NOTSET | |||||
| DOMI_PADDING_VALID, // VALID padding mode | |||||
| DOMI_PADDING_SAME, // Padding values of 0 are always used | |||||
| DOMI_PADDING_CEIL_NEW, // Padding values of 0 are always used | |||||
| DOMI_PADDING_VALID_NEW, // Padding values of 0 are always used | |||||
| DOMI_PADDING_SAME_NEW, // Padding values of 0 are always used | |||||
| DOMI_PADDING_RESERVED | |||||
| } domiPaddingMode_t; | |||||
| // algorithm of convolution forward | |||||
| typedef enum tagDomiConvolutionFwdAlgo { | |||||
| DOMI_CONVOLUTION_FWD_ALGO_GEMM = 0, // matrix gemm algo | |||||
| DOMI_CONVOLUTION_FWD_ALGO_WINOGRAD, // Winograd Transform algo | |||||
| DOMI_CONVOLUTION_FWD_ALGO_GEMM_ACCU_FLOAT32, // accumulate in L0c with FP32 | |||||
| DOMI_CONVOLUTION_FWD_ALGO_RESERVED | |||||
| } domiConvolutionFwdAlgo_t; | |||||
| typedef enum tagDomiFullConnectFwdAlgo { | |||||
| DOMI_FULLCONNECT_FWD_ALGO_HALF = 0, // accumulate in L0c with FP16 | |||||
| DOMI_FULLCONNECT_FWD_ALGO_FLOAT32 // accumulate in L0c with FP32 | |||||
| } domiFullConnectFwdAlgo_t; | |||||
| typedef enum tagDomiPooingFwdAlgo { | |||||
| DOMI_POOLING_FWD_ALGO_HALF = 0, // accumulate in L0c with FP16 | |||||
| DOMI_POOLING_FWD_ALGO_FLOAT32 // accumulate in L0c with FP32 | |||||
| } domiPooingFwdAlgo_t; | |||||
| // mode of convolution | |||||
| typedef enum tagDomiConvolutionMode { | |||||
| DOMI_CONV_CONVOLUTION = 0, // math convolution | |||||
| DOMI_CONV_CROSS_CORRELATION, // cross-correlation convolution | |||||
| DOMI_CONV_DECONVOLUTION, // deconvolution, also named transposed convolution | |||||
| DOMI_CONV_MODE_DEPTHWISE, // depthwise convolution | |||||
| DOMI_CONV_MODE_RESERVED | |||||
| } domiConvolutionMode_t; | |||||
| // softmax mode | |||||
| typedef enum tagDomiSoftmaxMode { | |||||
| DOMI_SOFTMAX_MODE_INSTANCE = 0, // compute the softmax over all C, H, W for each N | |||||
| DOMI_SOFTMAX_MODE_CHANNEL, // compute the softmax over all C for each H, W, N | |||||
| DOMI_SOFTMAX_MODE_HEIGHT, // compute the softmax over all H for each N, C, W | |||||
| DOMI_SOFTMAX_MODE_WIDTH, // compute the softmax over all W for each N, C, H | |||||
| DOMI_SOFTMAX_MODE_RESERVED | |||||
| } domiSoftmaxMode_t; | |||||
| // softmax algorithm | |||||
| typedef enum tagDomiSoftmaxAlgo { | |||||
| DOMI_SOFTMAX_FAST = 0, // straightforward implementation | |||||
| DOMI_SOFTMAX_ACCURATE, // subtract max from every point to avoid overflow | |||||
| DOMI_SOFTMAX_LOG, // perform the Log softmax operation to avoid overflow | |||||
| DOMI_SOFTMAX_ACCURATE_FP32, | |||||
| DOMI_SOFTMAX_RESERVED | |||||
| } domiSoftmaxAlgo_t; | |||||
| // algorithm of convolution backward | |||||
| typedef enum tagDomiConvolutionBwdAlgo { | |||||
| DOMI_CONVOLUTION_BWD_ALGO_GEMM = 0, // matrix gemm algo | |||||
| DOMI_CONVOLUTION_BWD_ALGO_WINOGRAD, // Winograd Transform algo | |||||
| DOMI_CONVOLUTION_BWD_ALGO_RESERVED | |||||
| } domiConvolutionBwdAlgo_t; | |||||
| // mode of pooling | |||||
| typedef enum tagDomiPoolingMode { | |||||
| DOMI_POOLING_MAX = 0, // max pooling | |||||
| DOMI_POOLING_AVG, // average pooling | |||||
| DOMI_POOLING_L2, // L2 pooling | |||||
| DOMI_POOLING_RESERVED | |||||
| } domiPoolingMode_t; | |||||
| // propagate Nan | |||||
| typedef enum tagDomiNanPropagation { | |||||
| DOMI_NAN_NOT_PROPAGATE = 0, // Nan numbers are not propagated | |||||
| DOMI_NAN_PROPAGATE, // Nan numbers are propagated | |||||
| DOMI_NAN_PROPAGATE_RESERVED | |||||
| } domiNanPropagation_t; | |||||
| // mode of cropandresize | |||||
| typedef enum tagDomiCropAndResizeMode { | |||||
| DOMI_RESIZE_METHOD_BILINEAR = 0, // resize bilinear | |||||
| DOMI_RESIZE_METHOD_NEAREST, // resize nearest | |||||
| DOMI_RESIZE_RESERVED | |||||
| } domiCropAndResizeMode_t; | |||||
| // yolo version | |||||
| typedef enum tagDomiYoloVersion { DOMI_YOLO_V2 = 1, DOMI_YOLO_V3, DOMI_YOLO_TRSERVED } domiYoloVersion_t; | |||||
| typedef enum tagDomiRNNScopePassType { | |||||
| DOMI_STATIC_BIDIRECTIONAL_RNN_GENERAL_PASS = 0, | |||||
| DOMI_DYNAMIC_BIDIRECTIONAL_RNN_GENERAL_PASS, | |||||
| DOMI_DYNAMIC_BIDIRECTIONAL_RNN_BIDAF_PASS | |||||
| } domiRNNScopePassType; | |||||
| // RNNDataLayout | |||||
| typedef enum tagDomiRNNDataLayout { | |||||
| DOMI_RNN_ND_TBX = 0, // data[max_time,batch_size,Xt] | |||||
| DOMI_RNN_ND_BTX, // data[batch_size,max_time,Xt] | |||||
| DOMI_RNN_5D_TX1BX, // data[max_time,Xt,1,batch_size,Xt] | |||||
| DOMI_RNN_5D_BX1TX, // dataa[batch_size,Xt,1,max_time,Xt] | |||||
| DOMI_RNN_4DTBX1, | |||||
| DOMI_ENN_DL_RESERVED | |||||
| } domiRNNDataLayout_t; | |||||
| // RNNInputMode | |||||
| typedef enum tagDomiRNNInputMode { DOMI_RNN_LINEAR_INPUT = 0, DOMI_RNN_SKIP_INPUT } domiRNNInputMode_t; | |||||
| // RNNDirectionMode | |||||
| typedef enum tagDomiRNNDirectionMode { DOMI_RNN_UNIDIRECTIONAL = 0, DOMI_RNN_BIDIRECTIONAL } domiDirectionMode_t; | |||||
| typedef enum tagDomiPoolingCeilMode { DOMI_POOLING_FLOOR = 0, DOMI_POOLING_CEIL } domiPoolingCeilMode_t; | |||||
| // RNNMode | |||||
| typedef enum tagDomiRNNActivationMode { | |||||
| DOMI_RNN_ACTIVATION_SIGMOID = 0, // sigmoid | |||||
| DOMI_RNN_ACTIVATION_TANH, // tanh | |||||
| DOMI_RNN_ACTIVATION_RELU, // ReLU | |||||
| DOMI_RNN_ACTIVATION_RELU1, // ReLU1 | |||||
| DOMI_RNN_ACTIVATION_RELU6, // ReLU6 | |||||
| DOMI_RNN_ACTIVATION_RESERVED | |||||
| } domiRNNActivationMode_t; | |||||
| typedef enum tagDomiRNNLSTMOutMode { | |||||
| DOMI_RNN_LSTM_OUT_SEPARATE = 0, | |||||
| DOMI_RNN_LSTM_OUT_CONCAT, | |||||
| DOMI_RNN_LSTM_OUT_RESERVED | |||||
| } domiRNNLSTMOutPutMode_t; | |||||
| typedef enum tagDomiRNNLSTMStateOutMode { | |||||
| DOMI_RNN_LSTM_STATE_OUT_SEPARATE = 0, | |||||
| DOMI_RNN_LSTM_STATE_OUT_CONCAT_ALL, | |||||
| DOMI_RNN_LSTM_STATE_OUT_RESERVED | |||||
| } domiRNNLSTMStateOutMode_t; | |||||
| typedef enum tagDomiRNNMode { | |||||
| DOMI_RNN_RELU = 0, | |||||
| DOMI_RNN_TANH, | |||||
| DOMI_LSTM, | |||||
| DOMI_GRU, | |||||
| DOMI_RNN_MODE_RESERVED | |||||
| } domiRNNMode_t; | |||||
| typedef enum tagDomiResizeBilinearMode { | |||||
| DOMI_RESIZE_OUTPUT_DIM_BY_ZOOM_FACTOR = 0, // Output dimension specified by zoom factor | |||||
| DOMI_RESIZE_OUTPUT_DIM_BY_SHRINK_FACTOR, // specified by shrink factor | |||||
| DOMI_RESIZE_OUTPUT_DIM_EXPLICIT, // specified explicitly | |||||
| DOMI_RESIZE_OUTPUT_DIM_RESERVED | |||||
| } domiResizeOutputDimMode_t; | |||||
| #pragma pack(1) // single-byte alignment | |||||
| // DUMP file struct | |||||
| struct FileHeader { | |||||
| int32_t Version; // version | |||||
| int32_t Output_Offset; // output offset address | |||||
| char Reserved[24] = {0}; // 24 bytes reserved | |||||
| }; | |||||
| struct BasicInfo { | |||||
| struct FileHeader header; // file header | |||||
| int32_t stream_id; // stread id | |||||
| uint64_t start_time; // start time | |||||
| uint64_t end_time; // end time | |||||
| uint32_t input_size; // input memory size | |||||
| uint32_t output_size; // output memory size | |||||
| uint32_t weight_size; // weight Memory Size | |||||
| uint32_t workspace_size; // workspace | |||||
| uint32_t total_size; // total memory size | |||||
| }; | |||||
| #pragma pack() // Cancels single-byte alignment | |||||
| enum class MemorySizeCalcType { NORMAL = 0, ALWAYS_EMPTY }; | enum class MemorySizeCalcType { NORMAL = 0, ALWAYS_EMPTY }; | ||||
| } // namespace ge | } // namespace ge | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -14,33 +14,32 @@ | |||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #ifndef INC_FRAMEWORK_COMMON_UTIL_H_ | |||||
| #define INC_FRAMEWORK_COMMON_UTIL_H_ | |||||
| #ifndef AIR_INC_FRAMEWORK_COMMON_UTIL_H_ | |||||
| #define AIR_INC_FRAMEWORK_COMMON_UTIL_H_ | |||||
| #include <google/protobuf/text_format.h> | |||||
| #include <limits.h> | |||||
| #include <math.h> | |||||
| #include <cmath> | |||||
| #include <sstream> | #include <sstream> | ||||
| #include <string> | #include <string> | ||||
| #include <vector> | |||||
| #include "framework/common/debug/ge_log.h" | |||||
| #include <google/protobuf/text_format.h> | |||||
| #include "external/graph/types.h" | |||||
| #include "external/register/register.h" | |||||
| #include "framework/common/debug/log.h" | #include "framework/common/debug/log.h" | ||||
| #include "framework/common/scope_guard.h" | #include "framework/common/scope_guard.h" | ||||
| #include "framework/common/ge_inner_error_codes.h" | #include "framework/common/ge_inner_error_codes.h" | ||||
| #include "mmpa/mmpa_api.h" | |||||
| #include "graph/detail/attributes_holder.h" | |||||
| #define GE_CHECK_POSITIVE_SIZE_RANGE(size) \ | |||||
| do { \ | |||||
| if (size <= 0) { \ | |||||
| DOMI_LOGE("param[%s] is not a positive number", #size); \ | |||||
| return PARAM_INVALID; \ | |||||
| } \ | |||||
| } while (0) | |||||
| #define GE_CHECK_POSITIVE_SIZE_RANGE(size) \ | |||||
| do { \ | |||||
| if ((size) <= 0) { \ | |||||
| GELOGE(ge::FAILED, "param[%s] is not a positive number", #size); \ | |||||
| return PARAM_INVALID; \ | |||||
| } \ | |||||
| } while (false) | |||||
| #define CHECK_FALSE_EXEC(expr, exec_expr, ...) \ | #define CHECK_FALSE_EXEC(expr, exec_expr, ...) \ | ||||
| { \ | { \ | ||||
| bool b = (expr); \ | |||||
| const bool b = (expr); \ | |||||
| if (!b) { \ | if (!b) { \ | ||||
| exec_expr; \ | exec_expr; \ | ||||
| } \ | } \ | ||||
| @@ -48,189 +47,244 @@ | |||||
| // new ge marco | // new ge marco | ||||
| // Encapsulate common resource releases | // Encapsulate common resource releases | ||||
| #define GE_MAKE_GUARD_RTMEM(var) \ | |||||
| GE_MAKE_GUARD(var, [&] { \ | |||||
| if (var) GE_CHK_RT(rtFreeHost(var)); \ | |||||
| }); | |||||
| #define GE_MAKE_GUARD_RTMEM(var) \ | |||||
| GE_MAKE_GUARD(var, [&] { \ | |||||
| if ((var) != nullptr) { \ | |||||
| GE_CHK_RT(rtFreeHost(var)); \ | |||||
| } \ | |||||
| }) | |||||
| #define GE_MAKE_GUARD_RTSTREAM(var) \ | |||||
| GE_MAKE_GUARD(var, [&] { \ | |||||
| if (var) GE_CHK_RT(rtStreamDestroy(var)); \ | |||||
| }); | |||||
| #define GE_MAKE_GUARD_RTSTREAM(var) \ | |||||
| GE_MAKE_GUARD(var, [&] { \ | |||||
| if ((var) != nullptr) { \ | |||||
| GE_CHK_RT(rtStreamDestroy(var)); \ | |||||
| } \ | |||||
| }) | |||||
| // For propagating errors when calling a function. | // For propagating errors when calling a function. | ||||
| #define GE_RETURN_IF_ERROR(expr) \ | |||||
| do { \ | |||||
| const ::ge::Status _status = (expr); \ | |||||
| if (_status) return _status; \ | |||||
| } while (0) | |||||
| #define GE_RETURN_IF_ERROR(expr) \ | |||||
| do { \ | |||||
| const ge::Status _chk_status = (expr); \ | |||||
| if (_chk_status != ge::SUCCESS) { \ | |||||
| return _chk_status; \ | |||||
| } \ | |||||
| } while (false) | |||||
| #define GE_RETURN_WITH_LOG_IF_ERROR(expr, ...) \ | #define GE_RETURN_WITH_LOG_IF_ERROR(expr, ...) \ | ||||
| do { \ | do { \ | ||||
| const ::ge::Status _status = (expr); \ | |||||
| if (_status) { \ | |||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| return _status; \ | |||||
| const ge::Status _chk_status = (expr); \ | |||||
| if (_chk_status != ge::SUCCESS) { \ | |||||
| GELOGE(ge::FAILED, __VA_ARGS__); \ | |||||
| return _chk_status; \ | |||||
| } \ | } \ | ||||
| } while (0) | |||||
| } while (false) | |||||
| // check whether the parameter is true. If it is, return FAILED and record the error log | // check whether the parameter is true. If it is, return FAILED and record the error log | ||||
| #define GE_RETURN_WITH_LOG_IF_TRUE(condition, ...) \ | #define GE_RETURN_WITH_LOG_IF_TRUE(condition, ...) \ | ||||
| do { \ | do { \ | ||||
| if (condition) { \ | if (condition) { \ | ||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| GELOGE(ge::FAILED, __VA_ARGS__); \ | |||||
| return ge::FAILED; \ | return ge::FAILED; \ | ||||
| } \ | } \ | ||||
| } while (0) | |||||
| } while (false) | |||||
| // Check if the parameter is false. If yes, return FAILED and record the error log | // Check if the parameter is false. If yes, return FAILED and record the error log | ||||
| #define GE_RETURN_WITH_LOG_IF_FALSE(condition, ...) \ | #define GE_RETURN_WITH_LOG_IF_FALSE(condition, ...) \ | ||||
| do { \ | do { \ | ||||
| bool _condition = (condition); \ | |||||
| const bool _condition = (condition); \ | |||||
| if (!_condition) { \ | if (!_condition) { \ | ||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| GELOGE(ge::FAILED, __VA_ARGS__); \ | |||||
| return ge::FAILED; \ | return ge::FAILED; \ | ||||
| } \ | } \ | ||||
| } while (0) | |||||
| } while (false) | |||||
| // Checks whether the parameter is true. If so, returns PARAM_INVALID and records the error log | // Checks whether the parameter is true. If so, returns PARAM_INVALID and records the error log | ||||
| #define GE_RT_PARAM_INVALID_WITH_LOG_IF_TRUE(condition, ...) \ | #define GE_RT_PARAM_INVALID_WITH_LOG_IF_TRUE(condition, ...) \ | ||||
| do { \ | do { \ | ||||
| if (condition) { \ | if (condition) { \ | ||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| GELOGE(ge::FAILED, __VA_ARGS__); \ | |||||
| return ge::PARAM_INVALID; \ | return ge::PARAM_INVALID; \ | ||||
| } \ | } \ | ||||
| } while (0) | |||||
| } while (false) | |||||
| // Check if the parameter is false. If yes, return PARAM_INVALID and record the error log | // Check if the parameter is false. If yes, return PARAM_INVALID and record the error log | ||||
| #define GE_RT_PARAM_INVALID_WITH_LOG_IF_FALSE(condition, ...) \ | #define GE_RT_PARAM_INVALID_WITH_LOG_IF_FALSE(condition, ...) \ | ||||
| do { \ | do { \ | ||||
| bool _condition = (condition); \ | |||||
| const bool _condition = (condition); \ | |||||
| if (!_condition) { \ | if (!_condition) { \ | ||||
| DOMI_LOGE(__VA_ARGS__); \ | |||||
| GELOGE(ge::FAILED, __VA_ARGS__); \ | |||||
| return ge::PARAM_INVALID; \ | return ge::PARAM_INVALID; \ | ||||
| } \ | } \ | ||||
| } while (0) | |||||
| } while (false) | |||||
| // Check if the parameter is null. If yes, return PARAM_INVALID and record the error | // Check if the parameter is null. If yes, return PARAM_INVALID and record the error | ||||
| #define GE_CHECK_NOTNULL(val) \ | |||||
| do { \ | |||||
| if (val == nullptr) { \ | |||||
| REPORT_INNER_ERROR("E19999", "Param:%s is nullptr, check invalid", #val); \ | |||||
| DOMI_LOGE("[Check][Param:%s]null is invalid.", #val); \ | |||||
| return ge::PARAM_INVALID; \ | |||||
| } \ | |||||
| } while (0) | |||||
| #define GE_CHECK_NOTNULL(val, ...) \ | |||||
| do { \ | |||||
| if ((val) == nullptr) { \ | |||||
| REPORT_INNER_ERROR("E19999", "Param:" #val " is nullptr, check invalid" __VA_ARGS__); \ | |||||
| GELOGE(ge::FAILED, "[Check][Param:" #val "]null is invalid" __VA_ARGS__); \ | |||||
| return ge::PARAM_INVALID; \ | |||||
| } \ | |||||
| } while (false) | |||||
| // Check if the parameter is null. If yes, just return and record the error | // Check if the parameter is null. If yes, just return and record the error | ||||
| #define GE_CHECK_NOTNULL_JUST_RETURN(val) \ | |||||
| do { \ | |||||
| if (val == nullptr) { \ | |||||
| DOMI_LOGE("param[%s] must not be null.", #val); \ | |||||
| return; \ | |||||
| } \ | |||||
| } while (0) | |||||
| #define GE_CHECK_NOTNULL_JUST_RETURN(val) \ | |||||
| do { \ | |||||
| if ((val) == nullptr) { \ | |||||
| GELOGE(ge::FAILED, "param[%s] must not be null.", #val); \ | |||||
| return; \ | |||||
| } \ | |||||
| } while (false) | |||||
| // Check whether the parameter is null. If so, execute the exec_expr expression and record the error log | // Check whether the parameter is null. If so, execute the exec_expr expression and record the error log | ||||
| #define GE_CHECK_NOTNULL_EXEC(val, exec_expr) \ | |||||
| do { \ | |||||
| if (val == nullptr) { \ | |||||
| DOMI_LOGE("param[%s] must not be null.", #val); \ | |||||
| exec_expr; \ | |||||
| } \ | |||||
| } while (0) | |||||
| #define GE_CHECK_NOTNULL_EXEC(val, exec_expr) \ | |||||
| do { \ | |||||
| if ((val) == nullptr) { \ | |||||
| GELOGE(ge::FAILED, "param[%s] must not be null.", #val); \ | |||||
| exec_expr; \ | |||||
| } \ | |||||
| } while (false) | |||||
| // Check whether the parameter is null. If yes, return directly and record the error log | // Check whether the parameter is null. If yes, return directly and record the error log | ||||
| #define GE_RT_VOID_CHECK_NOTNULL(val) \ | |||||
| do { \ | |||||
| if (val == nullptr) { \ | |||||
| DOMI_LOGE("param[%s] must not be null.", #val); \ | |||||
| return; \ | |||||
| } \ | |||||
| } while (0) | |||||
| #define GE_RT_VOID_CHECK_NOTNULL(val) \ | |||||
| do { \ | |||||
| if ((val) == nullptr) { \ | |||||
| GELOGE(ge::FAILED, "param[%s] must not be null.", #val); \ | |||||
| return; \ | |||||
| } \ | |||||
| } while (false) | |||||
| // Check if the parameter is null. If yes, return false and record the error log | // Check if the parameter is null. If yes, return false and record the error log | ||||
| #define GE_RT_FALSE_CHECK_NOTNULL(val) \ | |||||
| do { \ | |||||
| if (val == nullptr) { \ | |||||
| DOMI_LOGE("param[%s] must not be null.", #val); \ | |||||
| return false; \ | |||||
| } \ | |||||
| } while (0) | |||||
| #define GE_RT_FALSE_CHECK_NOTNULL(val) \ | |||||
| do { \ | |||||
| if ((val) == nullptr) { \ | |||||
| GELOGE(ge::FAILED, "param[%s] must not be null.", #val); \ | |||||
| return false; \ | |||||
| } \ | |||||
| } while (false) | |||||
| // Check if the parameter is out of bounds | // Check if the parameter is out of bounds | ||||
| #define GE_CHECK_SIZE(size) \ | |||||
| do { \ | |||||
| if (size == 0) { \ | |||||
| DOMI_LOGE("param[%s] is out of range", #size); \ | |||||
| return ge::PARAM_INVALID; \ | |||||
| } \ | |||||
| } while (0) | |||||
| #define GE_CHECK_SIZE(size) \ | |||||
| do { \ | |||||
| if ((size) == 0U) { \ | |||||
| GELOGE(ge::FAILED, "param[%s] is out of range", #size); \ | |||||
| return ge::PARAM_INVALID; \ | |||||
| } \ | |||||
| } while (false) | |||||
| // Check if the value on the left is greater than or equal to the value on the right | // Check if the value on the left is greater than or equal to the value on the right | ||||
| #define GE_CHECK_GE(lhs, rhs) \ | |||||
| do { \ | |||||
| if (lhs < rhs) { \ | |||||
| DOMI_LOGE("param[%s] is less than[%s]", #lhs, #rhs); \ | |||||
| return ge::PARAM_INVALID; \ | |||||
| } \ | |||||
| } while (0) | |||||
| #define GE_CHECK_GE(lhs, rhs) \ | |||||
| do { \ | |||||
| if ((lhs) < (rhs)) { \ | |||||
| GELOGE(ge::FAILED, "param[%s] is less than[%s]", #lhs, #rhs); \ | |||||
| return ge::PARAM_INVALID; \ | |||||
| } \ | |||||
| } while (false) | |||||
| // Check if the value on the left is less than or equal to the value on the right | // Check if the value on the left is less than or equal to the value on the right | ||||
| #define GE_CHECK_LE(lhs, rhs) \ | |||||
| do { \ | |||||
| if (lhs > rhs) { \ | |||||
| DOMI_LOGE("param[%s] is greater than[%s]", #lhs, #rhs); \ | |||||
| return ge::PARAM_INVALID; \ | |||||
| } \ | |||||
| } while (0) | |||||
| #define GE_CHECK_LE(lhs, rhs) \ | |||||
| do { \ | |||||
| if ((lhs) > (rhs)) { \ | |||||
| GELOGE(ge::FAILED, "param[%s] is greater than[%s]", #lhs, #rhs); \ | |||||
| return ge::PARAM_INVALID; \ | |||||
| } \ | |||||
| } while (false) | |||||
| #define GE_DELETE_NEW_SINGLE(var) \ | #define GE_DELETE_NEW_SINGLE(var) \ | ||||
| do { \ | do { \ | ||||
| if (var != nullptr) { \ | |||||
| delete var; \ | |||||
| var = nullptr; \ | |||||
| if ((var) != nullptr) { \ | |||||
| delete (var); \ | |||||
| (var) = nullptr; \ | |||||
| } \ | } \ | ||||
| } while (0) | |||||
| } while (false) | |||||
| #define GE_DELETE_NEW_ARRAY(var) \ | #define GE_DELETE_NEW_ARRAY(var) \ | ||||
| do { \ | do { \ | ||||
| if (var != nullptr) { \ | |||||
| delete[] var; \ | |||||
| var = nullptr; \ | |||||
| if ((var) != nullptr) { \ | |||||
| delete[](var); \ | |||||
| (var) = nullptr; \ | |||||
| } \ | } \ | ||||
| } while (0) | |||||
| } while (false) | |||||
| #define GE_FREE_RT_LOG(addr) \ | #define GE_FREE_RT_LOG(addr) \ | ||||
| do { \ | do { \ | ||||
| if (addr != nullptr) { \ | |||||
| rtError_t error = rtFree(addr); \ | |||||
| if ((addr) != nullptr) { \ | |||||
| const rtError_t error = rtFree(addr); \ | |||||
| if (error != RT_ERROR_NONE) { \ | if (error != RT_ERROR_NONE) { \ | ||||
| GELOGE(RT_FAILED, "Call rtFree failed, error: %#x", error); \ | GELOGE(RT_FAILED, "Call rtFree failed, error: %#x", error); \ | ||||
| } \ | } \ | ||||
| addr = nullptr; \ | |||||
| (addr) = nullptr; \ | |||||
| } \ | } \ | ||||
| } while (0) | |||||
| } while (false) | |||||
| namespace ge { | |||||
| /** | /** | ||||
| * @ingroup domi_common | * @ingroup domi_common | ||||
| * @brief version of om.proto file | * @brief version of om.proto file | ||||
| */ | */ | ||||
| static constexpr int32_t OM_PROTO_VERSION = 2; | |||||
| /** | |||||
| * Finding an Integer Ceiling Value Without Precision Loss | |||||
| */ | |||||
| #define CEIL(N, n) (((N) + (n)-1) / (n)) | |||||
| constexpr int32_t OM_PROTO_VERSION = 2; | |||||
| namespace ge { | |||||
| using google::protobuf::Message; | |||||
| /// | |||||
| /// @ingroup domi_common | |||||
| /// @brief onverts Vector of a number to a string. | |||||
| /// @param [in] v Vector of a number | |||||
| /// @return string | |||||
| /// | |||||
| template <typename T> | |||||
| GE_FUNC_VISIBILITY std::string ToString(const std::vector<T> &v) { | |||||
| bool first = true; | |||||
| std::stringstream ss; | |||||
| ss << "["; | |||||
| for (const T &x : v) { | |||||
| if (first) { | |||||
| first = false; | |||||
| ss << x; | |||||
| } else { | |||||
| ss << ", " << x; | |||||
| } | |||||
| } | |||||
| ss << "]"; | |||||
| return ss.str(); | |||||
| } | |||||
| /// | /// | ||||
| /// @ingroup domi_common | /// @ingroup domi_common | ||||
| /// @brief Maximum file path length | |||||
| /// @brief Converts RepeatedField to String. | |||||
| /// @param [in] rpd_field RepeatedField | |||||
| /// @return string | |||||
| /// | /// | ||||
| const int32_t DOMI_MAX_PATH_LEN = 256; | |||||
| template <typename T> | |||||
| GE_FUNC_VISIBILITY std::string ToString(const google::protobuf::RepeatedField<T> &rpd_field) { | |||||
| std::stringstream ss; | |||||
| ss << "["; | |||||
| for (const T x : rpd_field) { | |||||
| ss << x; | |||||
| ss << ", "; | |||||
| } | |||||
| // Delete the two extra characters at the end of the line. | |||||
| std::string str = ss.str().substr(0U, ss.str().length() - 2U); | |||||
| str += "]"; | |||||
| return str; | |||||
| } | |||||
| /// | |||||
| /// @ingroup ge_ir_utils | |||||
| /// @brief RepeatedPtrField->String | |||||
| /// @param [in] const rpd_field RepeatedPtrField | |||||
| /// @return String | |||||
| /// | |||||
| template <typename T> | |||||
| GE_FUNC_VISIBILITY std::string ToString(const google::protobuf::RepeatedPtrField<T> &rpd_ptr_field) { | |||||
| std::stringstream ss; | |||||
| ss << "["; | |||||
| for (const T &x : rpd_ptr_field) { | |||||
| ss << x; | |||||
| ss << ", "; | |||||
| } | |||||
| std::string str_ret = ss.str().substr(0U, ss.str().length() - 2U); | |||||
| str_ret += "]"; | |||||
| return str_ret; | |||||
| } | |||||
| /// | /// | ||||
| /// @ingroup domi_common | /// @ingroup domi_common | ||||
| @@ -241,7 +295,8 @@ const int32_t DOMI_MAX_PATH_LEN = 256; | |||||
| /// @return true success | /// @return true success | ||||
| /// @return false fail | /// @return false fail | ||||
| /// | /// | ||||
| GE_FUNC_VISIBILITY bool ReadProtoFromArray(const void *data, int size, Message *proto); | |||||
| GE_FUNC_VISIBILITY bool ReadProtoFromArray(const void *const data, const int32_t size, | |||||
| google::protobuf::Message *const proto); | |||||
| /// | /// | ||||
| /// @ingroup domi_proto | /// @ingroup domi_proto | ||||
| @@ -251,17 +306,15 @@ GE_FUNC_VISIBILITY bool ReadProtoFromArray(const void *data, int size, Message * | |||||
| /// @return true success | /// @return true success | ||||
| /// @return false fail | /// @return false fail | ||||
| /// | /// | ||||
| GE_FUNC_VISIBILITY bool ReadProtoFromText(const char *file, google::protobuf::Message *message); | |||||
| GE_FUNC_VISIBILITY bool ReadProtoFromMem(const char *data, int size, google::protobuf::Message *message); | |||||
| GE_FUNC_VISIBILITY bool ReadProtoFromText(const char_t *const file, google::protobuf::Message *const message); | |||||
| /// | /// | ||||
| /// @ingroup: domi_common | /// @ingroup: domi_common | ||||
| /// @brief: get length of file | /// @brief: get length of file | ||||
| /// @param [in] input_file: path of file | /// @param [in] input_file: path of file | ||||
| /// @return long: File length. If the file length fails to be obtained, the value -1 is returned. | |||||
| /// @return int64_t: File length. If the file length fails to be obtained, the value -1 is returned. | |||||
| /// | /// | ||||
| GE_FUNC_VISIBILITY extern long GetFileLength(const std::string &input_file); | |||||
| GE_FUNC_VISIBILITY extern int64_t GetFileLength(const std::string &input_file); | |||||
| /// | /// | ||||
| /// @ingroup domi_common | /// @ingroup domi_common | ||||
| @@ -272,9 +325,7 @@ GE_FUNC_VISIBILITY extern long GetFileLength(const std::string &input_file); | |||||
| /// @return false fail | /// @return false fail | ||||
| /// @return true success | /// @return true success | ||||
| /// | /// | ||||
| GE_FUNC_VISIBILITY bool ReadBytesFromBinaryFile(const char *file_name, char **buffer, int &length); | |||||
| GE_FUNC_VISIBILITY bool ReadBytesFromBinaryFile(const char *file_name, std::vector<char> &buffer); | |||||
| GE_FUNC_VISIBILITY bool ReadBytesFromBinaryFile(const char_t *const file_name, char_t **const buffer, int32_t &length); | |||||
| /// | /// | ||||
| /// @ingroup domi_common | /// @ingroup domi_common | ||||
| @@ -283,7 +334,7 @@ GE_FUNC_VISIBILITY bool ReadBytesFromBinaryFile(const char *file_name, std::vect | |||||
| /// @return 0 success | /// @return 0 success | ||||
| /// @return -1 fail | /// @return -1 fail | ||||
| /// | /// | ||||
| GE_FUNC_VISIBILITY extern int CreateDirectory(const std::string &directory_path); | |||||
| GE_FUNC_VISIBILITY extern int32_t CreateDirectory(const std::string &directory_path); | |||||
| /// | /// | ||||
| /// @ingroup domi_common | /// @ingroup domi_common | ||||
| @@ -292,46 +343,6 @@ GE_FUNC_VISIBILITY extern int CreateDirectory(const std::string &directory_path) | |||||
| /// | /// | ||||
| GE_FUNC_VISIBILITY std::string CurrentTimeInStr(); | GE_FUNC_VISIBILITY std::string CurrentTimeInStr(); | ||||
| /// | |||||
| /// @ingroup domi_common | |||||
| /// @brief onverts Vector of a number to a string. | |||||
| /// @param [in] v Vector of a number | |||||
| /// @return string | |||||
| /// | |||||
| template <typename T> | |||||
| GE_FUNC_VISIBILITY std::string ToString(std::vector<T> &v) { | |||||
| std::stringstream ss; | |||||
| ss << "["; | |||||
| for (T x : v) { | |||||
| ss << x; | |||||
| ss << ", "; | |||||
| } | |||||
| std::string strRet = | |||||
| ss.str().substr(0, ss.str().length() - 2); // Delete the two extra characters at the end of the line. | |||||
| strRet += "]"; | |||||
| return strRet; | |||||
| } | |||||
| /// | |||||
| /// @ingroup domi_common | |||||
| /// @brief Converts RepeatedField to String. | |||||
| /// @param [in] rpd_field RepeatedField | |||||
| /// @return string | |||||
| /// | |||||
| template <typename T> | |||||
| GE_FUNC_VISIBILITY std::string ToString(const google::protobuf::RepeatedField<T> &rpd_field) { | |||||
| std::stringstream ss; | |||||
| ss << "["; | |||||
| for (T x : rpd_field) { | |||||
| ss << x; | |||||
| ss << ", "; | |||||
| } | |||||
| std::string strRet = | |||||
| ss.str().substr(0, ss.str().length() - 2); // Delete the two extra characters at the end of the line. | |||||
| strRet += "]"; | |||||
| return strRet; | |||||
| } | |||||
| /// | /// | ||||
| /// @ingroup domi_common | /// @ingroup domi_common | ||||
| /// @brief Obtains the absolute time (timestamp) of the current system. | /// @brief Obtains the absolute time (timestamp) of the current system. | ||||
| @@ -355,7 +366,7 @@ GE_FUNC_VISIBILITY uint32_t GetCurrentSecondTimestap(); | |||||
| /// @param [in] b | /// @param [in] b | ||||
| /// @return false: true: The result is within the normal int64 range. | /// @return false: true: The result is within the normal int64 range. | ||||
| /// | /// | ||||
| GE_FUNC_VISIBILITY bool CheckInt64MulOverflow(int64_t a, int64_t b); | |||||
| GE_FUNC_VISIBILITY bool CheckInt64MulOverflow(const int64_t a, const int64_t b); | |||||
| /// | /// | ||||
| /// @ingroup domi_common | /// @ingroup domi_common | ||||
| @@ -363,7 +374,7 @@ GE_FUNC_VISIBILITY bool CheckInt64MulOverflow(int64_t a, int64_t b); | |||||
| /// @param [in] path of input file | /// @param [in] path of input file | ||||
| /// @param [out] Absolute path of a file. If the absolute path cannot be obtained, an empty string is returned | /// @param [out] Absolute path of a file. If the absolute path cannot be obtained, an empty string is returned | ||||
| /// | /// | ||||
| GE_FUNC_VISIBILITY std::string RealPath(const char *path); | |||||
| GE_FUNC_VISIBILITY std::string RealPath(const char_t *path); | |||||
| /// | /// | ||||
| /// @ingroup domi_common | /// @ingroup domi_common | ||||
| @@ -387,28 +398,12 @@ GE_FUNC_VISIBILITY bool CheckOutputPathValid(const std::string &file_path, const | |||||
| /// | /// | ||||
| /// @ingroup domi_common | /// @ingroup domi_common | ||||
| /// @brief Check whether the file path meets the whitelist verification requirements. | /// @brief Check whether the file path meets the whitelist verification requirements. | ||||
| /// @param [in] filePath file path | |||||
| /// @param [out] result | |||||
| /// | |||||
| GE_FUNC_VISIBILITY bool ValidateStr(const std::string &filePath, const std::string &mode); | |||||
| /// | |||||
| /// @ingroup domi_common | |||||
| /// @brief Check whether the file is normal file. | |||||
| /// @param [in] file_path file path | |||||
| /// @param [in] str file path | |||||
| /// @param [out] result | /// @param [out] result | ||||
| /// | /// | ||||
| GE_FUNC_VISIBILITY bool IsValidFile(const char *file_path); | |||||
| GE_FUNC_VISIBILITY bool ValidateStr(const std::string &file_path, const std::string &mode); | |||||
| /// | |||||
| /// @ingroup domi_common | |||||
| /// @brief Check path invalid | |||||
| /// @param [in] path, path to be checked | |||||
| /// @param [in] length, length of path | |||||
| /// @return 0 success | |||||
| /// @return -1 fail | |||||
| /// | |||||
| GE_FUNC_VISIBILITY Status CheckPath(const char *path, size_t length); | |||||
| GE_FUNC_VISIBILITY Status ConvertToInt32(const std::string &str, int32_t &val); | |||||
| } // namespace ge | } // namespace ge | ||||
| #endif // INC_FRAMEWORK_COMMON_UTIL_H_ | |||||
| #endif // AIR_INC_FRAMEWORK_COMMON_UTIL_H_ | |||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -21,16 +21,17 @@ | |||||
| #include <string> | #include <string> | ||||
| #include <vector> | #include <vector> | ||||
| #include "common/ge_inner_error_codes.h" | |||||
| #include "common/ge_types.h" | |||||
| #include "framework/common/ge_inner_error_codes.h" | |||||
| #include "framework/common/ge_types.h" | |||||
| #include "graph/types.h" | #include "graph/types.h" | ||||
| namespace ge { | namespace ge { | ||||
| enum PriorityEnum { | |||||
| enum class PriorityEnum { | |||||
| COST_0 = 0, | COST_0 = 0, | ||||
| COST_1, | |||||
| COST_2, | |||||
| COST_3, | |||||
| COST_1 = 1, | |||||
| COST_2 = 2, | |||||
| COST_3 = 3, | |||||
| COST_4 = 4, | |||||
| COST_9 = 9, | COST_9 = 9, | ||||
| COST_10 = 10, | COST_10 = 10, | ||||
| }; | }; | ||||
| @@ -38,19 +39,37 @@ enum PriorityEnum { | |||||
| struct DNNEngineAttribute { | struct DNNEngineAttribute { | ||||
| std::string engine_name; | std::string engine_name; | ||||
| std::vector<std::string> mem_type; | std::vector<std::string> mem_type; | ||||
| uint32_t compute_cost; | |||||
| PriorityEnum compute_cost; | |||||
| enum RuntimeType runtime_type; // HOST, DEVICE | enum RuntimeType runtime_type; // HOST, DEVICE | ||||
| // If engine input format must be specific, set this attribute, else set FORMAT_RESERVED | // If engine input format must be specific, set this attribute, else set FORMAT_RESERVED | ||||
| Format engine_input_format; | Format engine_input_format; | ||||
| Format engine_output_format; | Format engine_output_format; | ||||
| bool atomic_engine_flag; | |||||
| }; | }; | ||||
| class GE_FUNC_VISIBILITY DNNEngine { | class GE_FUNC_VISIBILITY DNNEngine { | ||||
| public: | public: | ||||
| DNNEngine() = default; | |||||
| explicit DNNEngine(const DNNEngineAttribute &attrs) { | |||||
| engine_attribute_ = attrs; | |||||
| } | |||||
| virtual ~DNNEngine() = default; | virtual ~DNNEngine() = default; | ||||
| virtual Status Initialize(const std::map<std::string, std::string> &options) = 0; | |||||
| virtual Status Finalize() = 0; | |||||
| virtual void GetAttributes(DNNEngineAttribute &attr) const = 0; | |||||
| Status Initialize(const std::map<std::string, std::string> &options) const { | |||||
| (void)options; | |||||
| return SUCCESS; | |||||
| } | |||||
| Status Finalize() const { | |||||
| return SUCCESS; | |||||
| } | |||||
| void GetAttributes(DNNEngineAttribute &attr) const { | |||||
| attr = engine_attribute_; | |||||
| } | |||||
| bool IsAtomic() const { | |||||
| return engine_attribute_.atomic_engine_flag; | |||||
| } | |||||
| protected: | |||||
| DNNEngineAttribute engine_attribute_; | |||||
| }; | }; | ||||
| } // namespace ge | } // namespace ge | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -22,42 +22,58 @@ | |||||
| #include <vector> | #include <vector> | ||||
| #include "common/dynamic_aipp.h" | #include "common/dynamic_aipp.h" | ||||
| #include "common/ge_inner_error_codes.h" | |||||
| #include "common/ge_types.h" | |||||
| #include "common/types.h" | |||||
| #include "framework/common/ge_inner_error_codes.h" | |||||
| #include "framework/common/ge_types.h" | |||||
| #include "framework/common/types.h" | |||||
| #include "graph/tensor.h" | #include "graph/tensor.h" | ||||
| #include "graph/ge_tensor.h" | #include "graph/ge_tensor.h" | ||||
| #include "runtime/base.h" | |||||
| namespace ge { | namespace ge { | ||||
| class SingleOp; | class SingleOp; | ||||
| class DynamicSingleOp; | class DynamicSingleOp; | ||||
| class GeRootModel; | |||||
| struct RunModelData { | struct RunModelData { | ||||
| uint32_t index; // Data index | uint32_t index; // Data index | ||||
| uint32_t modelId; | uint32_t modelId; | ||||
| std::vector<DataBuffer> blobs; // All input/output data buffer | |||||
| uint32_t timestamp; // Data creation time | |||||
| uint32_t timeout; // Processing timeout | |||||
| uint64_t request_id = 0; // Request ID | |||||
| uint64_t dynamic_batch_size = 0; // Dynamic batch size scene, set dynamic size, not supported by default:0 | |||||
| uint64_t dynamic_image_height = 0; // Dynamic image size scene, set image height, not supported by default:0 | |||||
| uint64_t dynamic_image_width = 0; // Dynamic image size scene, set image width, not supported by default:0 | |||||
| std::vector<uint64_t> dynamic_dims; // Dynamic dims scene, set dynamic dims, not supported by default:empty | |||||
| std::vector<DataBuffer> blobs; // All input/output data buffer | |||||
| uint32_t timestamp; // Data creation time | |||||
| uint32_t timeout; // Processing timeout | |||||
| uint64_t request_id = 0UL; // Request ID | |||||
| uint64_t dynamic_batch_size = 0UL; // Dynamic batch size scene, set dynamic size, not supported by default:0 | |||||
| uint64_t dynamic_image_height = 0UL; // Dynamic image size scene, set image height, not supported by default:0 | |||||
| uint64_t dynamic_image_width = 0UL; // Dynamic image size scene, set image width, not supported by default:0 | |||||
| std::vector<uint64_t> dynamic_dims; // Dynamic dims scene, set dynamic dims, not supported by default:empty | |||||
| }; | }; | ||||
| class GE_FUNC_VISIBILITY GeExecutor { | class GE_FUNC_VISIBILITY GeExecutor { | ||||
| public: | public: | ||||
| GeExecutor(); | GeExecutor(); | ||||
| ~GeExecutor() = default; | ~GeExecutor() = default; | ||||
| ge::Status Initialize(); | |||||
| ge::Status Finalize(); | |||||
| ge::Status UnloadModel(uint32_t modelId); | |||||
| Status Initialize(); | |||||
| Status Finalize(); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Initialize global execute environment. | |||||
| /// @param [in] options: environment variables. | |||||
| /// @return init result | |||||
| /// | |||||
| static Status Initialize(const std::map<std::string, std::string> &options); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Finalize global execute environment. | |||||
| /// @return execute result | |||||
| /// | |||||
| static Status FinalizeEx(); | |||||
| Status UnloadModel(const uint32_t model_id); | |||||
| // Get input and output descriptor | // Get input and output descriptor | ||||
| ge::Status GetModelDescInfo(uint32_t model_id, std::vector<ge::TensorDesc> &input_desc, | |||||
| std::vector<ge::TensorDesc> &output_desc, bool new_model_desc = false); | |||||
| Status GetModelDescInfo(const uint32_t model_id, std::vector<TensorDesc> &input_desc, | |||||
| std::vector<TensorDesc> &output_desc, const bool new_model_desc = false); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -68,7 +84,8 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [in] batch_size: batch size entered by user in dynamic multi-batch scenario | /// @param [in] batch_size: batch size entered by user in dynamic multi-batch scenario | ||||
| /// @return execute result | /// @return execute result | ||||
| /// | /// | ||||
| ge::Status SetDynamicBatchSize(uint32_t model_id, void *dynamic_input_addr, uint64_t length, uint64_t batch_size); | |||||
| Status SetDynamicBatchSize(const uint32_t model_id, void *const dynamic_input_addr, const uint64_t length, | |||||
| const uint64_t batch_size); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -80,8 +97,8 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [in] image_width: image width entered by user in dynamic multi-resolution scenario | /// @param [in] image_width: image width entered by user in dynamic multi-resolution scenario | ||||
| /// @return execute result | /// @return execute result | ||||
| /// | /// | ||||
| ge::Status SetDynamicImageSize(uint32_t model_id, void *dynamic_input_addr, uint64_t length, uint64_t image_height, | |||||
| uint64_t image_width); | |||||
| Status SetDynamicImageSize(const uint32_t model_id, void *const dynamic_input_addr, const uint64_t length, | |||||
| const uint64_t image_height, const uint64_t image_width); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -93,8 +110,8 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [in] dynamic_dims: array of dynamic dimensions | /// @param [in] dynamic_dims: array of dynamic dimensions | ||||
| /// @return execute result | /// @return execute result | ||||
| /// | /// | ||||
| ge::Status SetDynamicDims(uint32_t model_id, void *dynamic_input_addr, uint64_t length, | |||||
| const std::vector<uint64_t> &dynamic_dims); | |||||
| Status SetDynamicDims(const uint32_t model_id, void *const dynamic_input_addr, const uint64_t length, | |||||
| const std::vector<uint64_t> &dynamic_dims); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -104,8 +121,8 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [out] cur_dynamic_dims: current dynamic dims | /// @param [out] cur_dynamic_dims: current dynamic dims | ||||
| /// @return execute result | /// @return execute result | ||||
| /// | /// | ||||
| ge::Status GetCurDynamicDims(uint32_t model_id, const std::vector<uint64_t> &dynamic_dims, | |||||
| std::vector<uint64_t> &cur_dynamic_dims); | |||||
| Status GetCurDynamicDims(const uint32_t model_id, const std::vector<uint64_t> &dynamic_dims, | |||||
| std::vector<uint64_t> &cur_dynamic_dims); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -115,8 +132,8 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [out] dynamic_type | /// @param [out] dynamic_type | ||||
| /// @return execute result | /// @return execute result | ||||
| /// | /// | ||||
| ge::Status GetDynamicBatchInfo(uint32_t model_id, std::vector<std::vector<int64_t>> &batch_info, | |||||
| int32_t &dynamic_type); | |||||
| Status GetDynamicBatchInfo(const uint32_t model_id, std::vector<std::vector<int64_t>> &batch_info, | |||||
| int32_t &dynamic_type); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -125,7 +142,7 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [out] batch_info | /// @param [out] batch_info | ||||
| /// @return execute result | /// @return execute result | ||||
| /// | /// | ||||
| ge::Status GetCombinedDynamicDims(uint32_t model_id, std::vector<std::vector<int64_t>> &batch_info); | |||||
| Status GetCombinedDynamicDims(const uint32_t model_id, std::vector<std::vector<int64_t>> &batch_info); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -134,9 +151,9 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [out] user_designate_shape_order | /// @param [out] user_designate_shape_order | ||||
| /// @return execute result | /// @return execute result | ||||
| /// | /// | ||||
| ge::Status GetUserDesignateShapeOrder(uint32_t model_id, std::vector<std::string> &user_designate_shape_order); | |||||
| Status GetUserDesignateShapeOrder(const uint32_t model_id, std::vector<std::string> &user_designate_shape_order); | |||||
| ge::Status GetCurShape(const uint32_t model_id, std::vector<int64_t> &batch_info, int32_t &dynamic_type); | |||||
| Status GetCurShape(const uint32_t model_id, std::vector<int64_t> &batch_info, int32_t &dynamic_type); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -148,22 +165,22 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [in] aippParms: kAippDynamicPara by user in dynamic aipp | /// @param [in] aippParms: kAippDynamicPara by user in dynamic aipp | ||||
| /// @return execute result | /// @return execute result | ||||
| /// | /// | ||||
| ge::Status SetDynamicAippData(uint32_t model_id, void *dynamic_input_addr, uint64_t length, | |||||
| const std::vector<kAippDynamicBatchPara> &aippBatchPara, | |||||
| const kAippDynamicPara &aippParms); | |||||
| Status SetDynamicAippData(const uint32_t model_id, void *const dynamic_input_addr, const uint64_t length, | |||||
| const std::vector<kAippDynamicBatchPara> &aipp_batch_para, | |||||
| const kAippDynamicPara &aipp_parms); | |||||
| ge::Status GetAIPPInfo(uint32_t model_id, uint32_t index, AippConfigInfo &aipp_info); | |||||
| Status GetAIPPInfo(const uint32_t model_id, const uint32_t index, AippConfigInfo &aipp_info); | |||||
| ge::Status GetOpAttr(uint32_t model_id, const std::string &op_name, const std::string &attr_name, | |||||
| std::string &attr_value); | |||||
| Status GetOpAttr(const uint32_t model_id, const std::string &op_name, const std::string &attr_name, | |||||
| std::string &attr_value); | |||||
| ge::Status GetModelAttr(uint32_t model_id, std::vector<std::string> &dynamic_output_shape_info); | |||||
| Status GetModelAttr(const uint32_t model_id, std::vector<std::string> &dynamic_output_shape_info); | |||||
| ge::Status GetAippType(uint32_t model_id, uint32_t index, InputAippType &type, size_t &aipp_index); | |||||
| Status GetAippType(const uint32_t model_id, const uint32_t index, InputAippType &type, size_t &aipp_index); | |||||
| ge::Status CommandHandle(const ge::Command &command); | |||||
| Status CommandHandle(const Command &command) const; | |||||
| ge::Status SetDump(const DumpConfig &dump_config); | |||||
| Status SetDump(const DumpConfig &dump_config); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -173,7 +190,7 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @return SUCCESS | /// @return SUCCESS | ||||
| /// @return FAILED | /// @return FAILED | ||||
| /// | /// | ||||
| ge::Status GetMaxUsedMemory(uint32_t model_id, uint32_t &max_size); | |||||
| Status GetMaxUsedMemory(const uint32_t model_id, uint32_t &max_size); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -182,7 +199,7 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [out] ModelData &model_data: Offline model memory data | /// @param [out] ModelData &model_data: Offline model memory data | ||||
| /// @return SUCCESS handle successfully / others handle failed | /// @return SUCCESS handle successfully / others handle failed | ||||
| /// | /// | ||||
| ge::Status LoadDataFromFile(const std::string &path, ge::ModelData &model_data); | |||||
| Status LoadDataFromFile(const std::string &path, ModelData &model_data); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -195,8 +212,8 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [out] uint32_t &model_id: Corresponding identification after model loading | /// @param [out] uint32_t &model_id: Corresponding identification after model loading | ||||
| /// @return SUCCESS handle successfully / others handle failed | /// @return SUCCESS handle successfully / others handle failed | ||||
| /// | /// | ||||
| ge::Status LoadModelFromData(uint32_t &model_id, const ge::ModelData &model_data, void *dev_ptr, size_t mem_size, | |||||
| void *weight_ptr, size_t weight_size); | |||||
| Status LoadModelFromData(uint32_t &model_id, const ModelData &model_data, void *const dev_ptr, const size_t mem_size, | |||||
| void *const weight_ptr, const size_t weight_size); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -207,9 +224,20 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [in] output_queue_ids: input queue ids create from user. | /// @param [in] output_queue_ids: input queue ids create from user. | ||||
| /// @return: 0 for success / others for fail | /// @return: 0 for success / others for fail | ||||
| /// | /// | ||||
| ge::Status LoadModelWithQ(uint32_t &model_id, const ge::ModelData &model_data, | |||||
| const std::vector<uint32_t> &input_queue_ids, | |||||
| const std::vector<uint32_t> &output_queue_ids); | |||||
| Status LoadModelWithQ(uint32_t &model_id, const ModelData &model_data, const std::vector<uint32_t> &input_queue_ids, | |||||
| const std::vector<uint32_t> &output_queue_ids); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Load task list from ModelData with queue. | |||||
| /// @param [out] model_id: model id allocate from manager. | |||||
| /// @param [in] root_model: Instance of GeRootModel. | |||||
| /// @param [in] input_queue_ids: input queue ids create from user. | |||||
| /// @param [in] output_queue_ids: input queue ids create from user. | |||||
| /// @return: 0 for success / others for fail | |||||
| /// | |||||
| Status LoadModelWithQ(uint32_t &model_id, const std::shared_ptr<GeRootModel> &root_model, | |||||
| const std::vector<uint32_t> &input_queue_ids, const std::vector<uint32_t> &output_queue_ids); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -221,8 +249,17 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [out] domi::OutputData *output_data: Model output data | /// @param [out] domi::OutputData *output_data: Model output data | ||||
| /// @return SUCCESS handle successfully / others handle failed | /// @return SUCCESS handle successfully / others handle failed | ||||
| /// | /// | ||||
| ge::Status ExecModel(uint32_t model_id, void *stream, const ge::RunModelData &input_data, | |||||
| ge::RunModelData &output_data, bool async_mode = false); | |||||
| Status ExecModel(const uint32_t model_id, void *const stream, const RunModelData &input_data, | |||||
| RunModelData &output_data, const bool async_mode = false); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Load task list from root_model without input queue or output queue. | |||||
| /// @param [out] model_id: model id allocate from manager. | |||||
| /// @param [in] root_model: Instance of GeRootModel. | |||||
| /// @return: 0 for success / others for fail | |||||
| /// | |||||
| Status LoadModelWithoutQ(uint32_t &model_id, const std::shared_ptr<GeRootModel> &root_model) const; | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -236,9 +273,9 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [out] std::vector<GeTensorDesc> &output_desc: description of model output data | /// @param [out] std::vector<GeTensorDesc> &output_desc: description of model output data | ||||
| /// @return SUCCESS handle successfully / others handle failed | /// @return SUCCESS handle successfully / others handle failed | ||||
| /// | /// | ||||
| ge::Status ExecModel(uint32_t model_id, void *stream, const ge::RunModelData &run_input_data, | |||||
| const std::vector<GeTensorDesc> &input_desc, ge::RunModelData &run_output_data, | |||||
| std::vector<GeTensorDesc> &output_desc, bool async_mode = false); | |||||
| Status ExecModel(const uint32_t model_id, void *const stream, const RunModelData &run_input_data, | |||||
| const std::vector<GeTensorDesc> &input_desc, RunModelData &run_output_data, | |||||
| std::vector<GeTensorDesc> &output_desc, const bool async_mode = false); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -248,7 +285,7 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [out] size_t &weight_size Weight memory space size | /// @param [out] size_t &weight_size Weight memory space size | ||||
| /// @return SUCCESS handle successfully / others handle failed | /// @return SUCCESS handle successfully / others handle failed | ||||
| /// | /// | ||||
| ge::Status GetMemAndWeightSize(const std::string &path, size_t &mem_size, size_t &weight_size); | |||||
| Status GetMemAndWeightSize(const std::string &path, size_t &mem_size, size_t &weight_size); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| @@ -259,39 +296,45 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||||
| /// @param [out] size_t &weight_size Weight memory space size | /// @param [out] size_t &weight_size Weight memory space size | ||||
| /// @return SUCCESS handle successfully / others handle failed | /// @return SUCCESS handle successfully / others handle failed | ||||
| /// | /// | ||||
| ge::Status GetMemAndWeightSize(const void *model_data, size_t model_size, size_t &mem_size, size_t &weight_size); | |||||
| Status GetMemAndWeightSize(const void *const model_data, const size_t model_size, size_t &mem_size, | |||||
| size_t &weight_size); | |||||
| static Status LoadSingleOp(const std::string &model_name, const ModelData &model_data, void *const stream, | |||||
| SingleOp **const single_op); | |||||
| static Status LoadSingleOpV2(const std::string &model_name, const ModelData &model_data, void *const stream, | |||||
| SingleOp **const single_op, const uint64_t model_id); | |||||
| static ge::Status LoadSingleOp(const std::string &modelName, const ge::ModelData &modelData, void *stream, | |||||
| SingleOp **single_op); | |||||
| static Status ExecuteAsync(SingleOp *const executor, const std::vector<DataBuffer> &inputs, | |||||
| std::vector<DataBuffer> &outputs); | |||||
| static ge::Status LoadSingleOpV2(const std::string &modelName, const ge::ModelData &modelData, void *stream, | |||||
| SingleOp **single_op, const uint64_t model_id); | |||||
| static Status LoadDynamicSingleOp(const std::string &model_name, const ModelData &model_data, void *const stream, | |||||
| DynamicSingleOp **const single_op); | |||||
| static ge::Status ExecuteAsync(SingleOp *executor, const std::vector<DataBuffer> &inputs, | |||||
| std::vector<DataBuffer> &outputs); | |||||
| static Status LoadDynamicSingleOpV2(const std::string &model_name, const ModelData &model_data, void *const stream, | |||||
| DynamicSingleOp **const single_op, const uint64_t model_id); | |||||
| static ge::Status LoadDynamicSingleOp(const std::string &model_name, const ge::ModelData &modelData, void *stream, | |||||
| DynamicSingleOp **single_op); | |||||
| static Status UnloadSingleOp(const uint64_t op_id); | |||||
| static ge::Status LoadDynamicSingleOpV2(const std::string &model_name, const ge::ModelData &modelData, void *stream, | |||||
| DynamicSingleOp **single_op, const uint64_t model_id); | |||||
| static Status UnloadDynamicSingleOp(const uint64_t op_id); | |||||
| static ge::Status ExecuteAsync(DynamicSingleOp *executor, const std::vector<GeTensorDesc> &input_desc, | |||||
| const std::vector<DataBuffer> &inputs, std::vector<GeTensorDesc> &output_desc, | |||||
| std::vector<DataBuffer> &outputs); | |||||
| static Status ExecuteAsync(DynamicSingleOp *const executor, const std::vector<GeTensorDesc> &input_desc, | |||||
| const std::vector<DataBuffer> &inputs, std::vector<GeTensorDesc> &output_desc, | |||||
| std::vector<DataBuffer> &outputs); | |||||
| static ge::Status ReleaseSingleOpResource(void *stream); | |||||
| static Status ReleaseSingleOpResource(void *const stream); | |||||
| static ge::Status GetDeviceIdByModelId(uint32_t model_id, uint32_t &device_id); | |||||
| static Status GetDeviceIdByModelId(const uint32_t model_id, uint32_t &device_id); | |||||
| ge::Status GetBatchInfoSize(uint32_t model_id, size_t &shape_count); | |||||
| ge::Status GetOrigInputInfo(uint32_t model_id, uint32_t index, OriginInputInfo &orig_input_info); | |||||
| ge::Status GetAllAippInputOutputDims(uint32_t model_id, uint32_t index, std::vector<InputOutputDims> &input_dims, | |||||
| std::vector<InputOutputDims> &output_dims); | |||||
| ge::Status GetOpDescInfo(uint32_t device_id, uint32_t stream_id, uint32_t task_id, OpDescInfo &op_desc_info); | |||||
| Status GetBatchInfoSize(const uint32_t model_id, size_t &shape_count); | |||||
| Status GetOrigInputInfo(const uint32_t model_id, const uint32_t index, OriginInputInfo &orig_input_info); | |||||
| Status GetAllAippInputOutputDims(const uint32_t model_id, const uint32_t index, | |||||
| std::vector<InputOutputDims> &input_dims, std::vector<InputOutputDims> &output_dims); | |||||
| Status GetOpDescInfo(const uint32_t device_id, const uint32_t stream_id, const uint32_t task_id, | |||||
| OpDescInfo &op_desc_info); | |||||
| private: | private: | ||||
| static bool isInit_; | |||||
| static std::atomic_bool is_inited_; | |||||
| }; | }; | ||||
| } // namespace ge | } // namespace ge | ||||
| @@ -1,113 +0,0 @@ | |||||
| /** | |||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_FRAMEWORK_GE_RUNTIME_DAVINCI_MODEL_H_ | |||||
| #define INC_FRAMEWORK_GE_RUNTIME_DAVINCI_MODEL_H_ | |||||
| #include <memory> | |||||
| #include <vector> | |||||
| #include "ge_runtime/op_info.h" | |||||
| #include "ge_runtime/task_info.h" | |||||
| namespace ge { | |||||
| namespace model_runner { | |||||
| class DavinciModel { | |||||
| public: | |||||
| DavinciModel(const std::vector<std::shared_ptr<TaskInfo>> &task_info_list, | |||||
| const std::vector<std::shared_ptr<OpInfo>> &data_info_list, | |||||
| const std::vector<std::shared_ptr<OpInfo>> &output_info_list, | |||||
| const std::vector<std::shared_ptr<OpInfo>> &constant_info_list, | |||||
| const std::vector<model_runner::OpInfoPtr> &variable_info_list, | |||||
| const std::vector<uint32_t> &wait_active_stream_list, | |||||
| const std::vector<uint32_t> &force_copy_stream_list, uint64_t mem_size = 0, uint64_t weight_size = 0, | |||||
| uint64_t var_size = 0, uintptr_t logic_mem_base = 0, uintptr_t logic_weight_base = 0, | |||||
| uintptr_t logic_var_base = 0, uint32_t stream_num = 0, uint32_t batch_num = 0, uint32_t event_num = 0, | |||||
| int32_t priority = 0) | |||||
| : task_info_list_(task_info_list), | |||||
| data_info_list_(data_info_list), | |||||
| output_info_list_(output_info_list), | |||||
| constant_info_list_(constant_info_list), | |||||
| variable_info_list_(variable_info_list), | |||||
| wait_active_stream_list_(wait_active_stream_list), | |||||
| force_copy_stream_list_(force_copy_stream_list), | |||||
| mem_size_(mem_size), | |||||
| weight_size_(weight_size), | |||||
| var_size_(var_size), | |||||
| logic_mem_base_(logic_mem_base), | |||||
| logic_weight_base_(logic_weight_base), | |||||
| logic_var_base_(logic_var_base), | |||||
| stream_num_(stream_num), | |||||
| batch_num_(batch_num), | |||||
| event_num_(event_num), | |||||
| priority_(priority) {} | |||||
| ~DavinciModel() {} | |||||
| uint64_t GetMemSize() const { return mem_size_; } | |||||
| uint64_t GetWeightSize() const { return weight_size_; } | |||||
| uint64_t GetVarSize() const { return var_size_; } | |||||
| uintptr_t GetLogicMemBase() const { return logic_mem_base_; } | |||||
| uintptr_t GetLogicWeightBase() const { return logic_weight_base_; } | |||||
| uintptr_t GetLogicVarBase() const { return logic_var_base_; } | |||||
| uint32_t GetStreamNum() const { return stream_num_; } | |||||
| uint32_t GetBatchNum() const { return batch_num_; } | |||||
| uint32_t GetEventNum() const { return event_num_; } | |||||
| const std::vector<uint32_t> &GetWaitActiveStreams() const { return wait_active_stream_list_; } | |||||
| const std::vector<uint32_t> &GetForceCopyStreams() const { return force_copy_stream_list_; } | |||||
| int32_t GetPriority() const { return priority_; } | |||||
| const std::vector<std::shared_ptr<TaskInfo>> &GetTaskInfoList() const { return task_info_list_; } | |||||
| const std::vector<std::shared_ptr<OpInfo>> &GetDataInfoList() const { return data_info_list_; } | |||||
| const std::vector<std::shared_ptr<OpInfo>> &GetOutputInfoList() const { return output_info_list_; } | |||||
| const std::vector<std::shared_ptr<OpInfo>> &GetConstantInfoList() const { return output_info_list_; } | |||||
| const std::vector<model_runner::OpInfoPtr> &GetVariableInfoList() const { return variable_info_list_; } | |||||
| private: | |||||
| std::vector<std::shared_ptr<TaskInfo>> task_info_list_; | |||||
| std::vector<std::shared_ptr<OpInfo>> data_info_list_; | |||||
| std::vector<std::shared_ptr<OpInfo>> output_info_list_; | |||||
| std::vector<std::shared_ptr<OpInfo>> constant_info_list_; | |||||
| std::vector<model_runner::OpInfoPtr> variable_info_list_; | |||||
| std::vector<uint32_t> wait_active_stream_list_; | |||||
| std::vector<uint32_t> force_copy_stream_list_; | |||||
| uint64_t mem_size_; | |||||
| uint64_t weight_size_; | |||||
| uint64_t var_size_; | |||||
| uintptr_t logic_mem_base_; | |||||
| uintptr_t logic_weight_base_; | |||||
| uintptr_t logic_var_base_; | |||||
| uint32_t stream_num_; | |||||
| uint32_t batch_num_; | |||||
| uint32_t event_num_; | |||||
| int32_t priority_; | |||||
| // Disable to copy constructor and assignment operator | |||||
| DavinciModel &operator=(const DavinciModel &) = delete; | |||||
| DavinciModel(const DavinciModel &) = delete; | |||||
| }; | |||||
| } // namespace model_runner | |||||
| } // namespace ge | |||||
| #endif // INC_FRAMEWORK_GE_RUNTIME_DAVINCI_MODEL_H_ | |||||
| @@ -1,68 +0,0 @@ | |||||
| /** | |||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_FRAMEWORK_GE_RUNTIME_MODEL_RUNNER_H_ | |||||
| #define INC_FRAMEWORK_GE_RUNTIME_MODEL_RUNNER_H_ | |||||
| #include <memory> | |||||
| #include <unordered_map> | |||||
| #include <vector> | |||||
| #include "common/ge_inner_error_codes.h" | |||||
| #include "common/ge_types.h" | |||||
| #include "ge_runtime/davinci_model.h" | |||||
| namespace ge { | |||||
| namespace model_runner { | |||||
| class RuntimeModel; | |||||
| using RuntimeInfo = std::tuple<uint32_t, uint32_t, void *>; | |||||
| class ModelRunner { | |||||
| public: | |||||
| static ModelRunner &Instance(); | |||||
| bool LoadDavinciModel(uint32_t device_id, uint64_t session_id, uint32_t model_id, | |||||
| std::shared_ptr<DavinciModel> davinci_model, std::shared_ptr<ModelListener> listener); | |||||
| bool DistributeTask(uint32_t model_id); | |||||
| bool LoadModelComplete(uint32_t model_id); | |||||
| const std::vector<uint32_t> &GetTaskIdList(uint32_t model_id) const; | |||||
| const std::vector<uint32_t> &GetStreamIdList(uint32_t model_id) const; | |||||
| const std::map<std::string, std::shared_ptr<RuntimeInfo>> &GetRuntimeInfoMap(uint32_t model_id) const; | |||||
| void *GetModelHandle(uint32_t model_id) const; | |||||
| bool UnloadModel(uint32_t model_id); | |||||
| bool RunModel(uint32_t model_id, const InputData &input_data, OutputData *output_data); | |||||
| bool GetInputOutputDescInfo(uint32_t model_id, bool zero_copy, std::vector<InputOutputDescInfo> *input_desc, | |||||
| std::vector<InputOutputDescInfo> *output_desc, std::vector<uint32_t> *input_format, | |||||
| std::vector<uint32_t> *output_format); | |||||
| private: | |||||
| ModelRunner() = default; | |||||
| ~ModelRunner() = default; | |||||
| std::unordered_map<uint32_t, std::shared_ptr<RuntimeModel>> runtime_models_; | |||||
| }; | |||||
| } // namespace model_runner | |||||
| } // namespace ge | |||||
| #endif // INC_FRAMEWORK_GE_RUNTIME_MODEL_RUNNER_H_ | |||||
| @@ -1,72 +0,0 @@ | |||||
| /** | |||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_FRAMEWORK_GE_RUNTIME_OP_INFO_H_ | |||||
| #define INC_FRAMEWORK_GE_RUNTIME_OP_INFO_H_ | |||||
| #include <memory> | |||||
| #include <string> | |||||
| #include <vector> | |||||
| namespace ge { | |||||
| namespace model_runner { | |||||
| struct TensorInfo { | |||||
| int64_t GetShapeSize() const { | |||||
| int64_t res = 1; | |||||
| if (dims.empty()) { | |||||
| return 0; | |||||
| } | |||||
| for (auto dim : dims) { | |||||
| res *= dim; | |||||
| } | |||||
| return res; | |||||
| } | |||||
| int64_t GetDim(uint32_t index) { | |||||
| if (index >= dims.size()) { | |||||
| return 0; | |||||
| } | |||||
| return dims[index]; | |||||
| } | |||||
| std::vector<int64_t> dims; | |||||
| uint32_t datatype; | |||||
| uint32_t format; | |||||
| uint32_t real_dim_cnt; | |||||
| uint32_t size; | |||||
| bool is_output; | |||||
| }; | |||||
| struct OpInfo { | |||||
| uint32_t index; | |||||
| std::string name; | |||||
| std::string type; | |||||
| bool var_is_broadcast; | |||||
| std::vector<uintptr_t> input_addrs; | |||||
| std::vector<uintptr_t> output_addrs; | |||||
| std::vector<TensorInfo> input_tensors; | |||||
| std::vector<TensorInfo> output_tensors; | |||||
| std::vector<TensorInfo> weight_tensors; | |||||
| std::vector<std::string> src_name; | |||||
| std::vector<int64_t> src_index; | |||||
| std::string weight_data; | |||||
| }; | |||||
| using TensorInfoPtr = std::shared_ptr<TensorInfo>; | |||||
| using OpInfoPtr = std::shared_ptr<OpInfo>; | |||||
| } // namespace model_runner | |||||
| } // namespace ge | |||||
| #endif // INC_FRAMEWORK_GE_RUNTIME_OP_INFO_H_ | |||||
| @@ -1,405 +0,0 @@ | |||||
| /** | |||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_FRAMEWORK_GE_RUNTIME_TASK_INFO_H_ | |||||
| #define INC_FRAMEWORK_GE_RUNTIME_TASK_INFO_H_ | |||||
| #include <stdint.h> | |||||
| #include <memory> | |||||
| #include <string> | |||||
| #include <utility> | |||||
| #include <vector> | |||||
| #include "cce/taskdown_api.h" | |||||
| namespace ge { | |||||
| namespace model_runner { | |||||
| enum TaskInfoType { | |||||
| CCE = 0, | |||||
| TBE, | |||||
| AICPU, | |||||
| LABEL_SET, | |||||
| LABEL_SWITCH, | |||||
| LABEL_GOTO, | |||||
| EVENT_RECORD, | |||||
| EVENT_WAIT, | |||||
| FUSION_START, | |||||
| FUSION_END, | |||||
| HCCL, | |||||
| PROFILER_TRACE, | |||||
| MEMCPY_ASYNC, | |||||
| STREAM_SWITCH, | |||||
| STREAM_ACTIVE, | |||||
| // Insert new task type here | |||||
| REVSERVED = 23 | |||||
| }; | |||||
| class TaskInfo { | |||||
| public: | |||||
| virtual ~TaskInfo() {} | |||||
| uint32_t stream_id() const { return stream_id_; } | |||||
| TaskInfoType type() const { return type_; } | |||||
| std::string op_name() const { return op_name_; } | |||||
| bool dump_flag() const { return dump_flag_; } | |||||
| protected: | |||||
| TaskInfo(const std::string &op_name, uint32_t stream_id, TaskInfoType type, bool dump_flag) | |||||
| : op_name_(op_name), stream_id_(stream_id), type_(type), dump_flag_(dump_flag) {} | |||||
| private: | |||||
| std::string op_name_; | |||||
| uint32_t stream_id_; | |||||
| TaskInfoType type_; | |||||
| bool dump_flag_; | |||||
| }; | |||||
| class CceTaskInfo : public TaskInfo { | |||||
| public: | |||||
| CceTaskInfo(const std::string &op_name, uint32_t stream_id, const cce::ccOpContext &ctx, const std::string &stub_func, | |||||
| uint32_t block_dim, const std::vector<uint8_t> &args, uint32_t args_size, | |||||
| const std::vector<uint8_t> &sm_desc, const std::vector<uint8_t> &flow_table, | |||||
| const std::vector<uint8_t> &args_offset, bool is_flowtable) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::CCE, false), | |||||
| ctx_(ctx), | |||||
| stub_func_(stub_func), | |||||
| block_dim_(block_dim), | |||||
| args_(args), | |||||
| args_size_(args_size), | |||||
| sm_desc_(sm_desc), | |||||
| flow_table_(flow_table), | |||||
| args_offset_(args_offset), | |||||
| is_flowtable_(is_flowtable) {} | |||||
| ~CceTaskInfo() override {} | |||||
| cce::ccOpContext cc_context() const { return ctx_; } | |||||
| std::string stub_func() const { return stub_func_; } | |||||
| uint32_t block_dim() const { return block_dim_; } | |||||
| const std::vector<uint8_t> &args() const { return args_; } | |||||
| uint32_t args_size() const { return args_size_; } | |||||
| const std::vector<uint8_t> &sm_desc() const { return sm_desc_; } | |||||
| const std::vector<uint8_t> &flow_table() const { return flow_table_; } | |||||
| const std::vector<uint8_t> &args_offset() const { return args_offset_; } | |||||
| bool is_flowtable() const { return is_flowtable_; } | |||||
| private: | |||||
| cce::ccOpContext ctx_; | |||||
| std::string stub_func_; | |||||
| uint32_t block_dim_; | |||||
| std::vector<uint8_t> args_; | |||||
| uint32_t args_size_; | |||||
| std::vector<uint8_t> sm_desc_; | |||||
| std::vector<uint8_t> flow_table_; | |||||
| std::vector<uint8_t> args_offset_; | |||||
| bool is_flowtable_; | |||||
| }; | |||||
| class TbeTaskInfo : public TaskInfo { | |||||
| public: | |||||
| TbeTaskInfo(const std::string &op_name, uint32_t stream_id, const std::string &stub_func, uint32_t block_dim, | |||||
| const std::vector<uint8_t> &args, uint32_t args_size, const std::vector<uint8_t> &sm_desc, void *binary, | |||||
| uint32_t binary_size, const std::vector<uint8_t> &meta_data, const std::vector<void *> &input_data_addrs, | |||||
| const std::vector<void *> &output_data_addrs, const std::vector<void *> &workspace_addrs, bool dump_flag) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::TBE, dump_flag), | |||||
| stub_func_(stub_func), | |||||
| block_dim_(block_dim), | |||||
| args_(args), | |||||
| args_size_(args_size), | |||||
| sm_desc_(sm_desc), | |||||
| binary_(binary), | |||||
| binary_size_(binary_size), | |||||
| meta_data_(meta_data), | |||||
| input_data_addrs_(input_data_addrs), | |||||
| output_data_addrs_(output_data_addrs), | |||||
| workspace_addrs_(workspace_addrs) {} | |||||
| ~TbeTaskInfo() override {} | |||||
| const std::string &stub_func() const { return stub_func_; } | |||||
| uint32_t block_dim() const { return block_dim_; } | |||||
| const std::vector<uint8_t> &args() const { return args_; } | |||||
| uint32_t args_size() const { return args_size_; } | |||||
| const std::vector<uint8_t> &sm_desc() const { return sm_desc_; } | |||||
| void *binary() const { return binary_; } | |||||
| uint32_t binary_size() const { return binary_size_; } | |||||
| const std::vector<uint8_t> &meta_data() const { return meta_data_; } | |||||
| const std::vector<void *> &input_data_addrs() const { return input_data_addrs_; } | |||||
| const std::vector<void *> &output_data_addrs() const { return output_data_addrs_; } | |||||
| const std::vector<void *> &workspace_addrs() const { return workspace_addrs_; } | |||||
| void SetBinary(void *binary, uint32_t binary_size) { | |||||
| binary_ = binary; | |||||
| binary_size_ = binary_size; | |||||
| } | |||||
| private: | |||||
| std::string stub_func_; | |||||
| uint32_t block_dim_; | |||||
| std::vector<uint8_t> args_; | |||||
| uint32_t args_size_; | |||||
| std::vector<uint8_t> sm_desc_; | |||||
| void *binary_; | |||||
| uint32_t binary_size_; | |||||
| std::vector<uint8_t> meta_data_; | |||||
| std::vector<void *> input_data_addrs_; | |||||
| std::vector<void *> output_data_addrs_; | |||||
| std::vector<void *> workspace_addrs_; | |||||
| }; | |||||
| class AicpuTaskInfo : public TaskInfo { | |||||
| public: | |||||
| AicpuTaskInfo(const std::string &op_name, uint32_t stream_id, const string &so_name, const std::string &kernel_name, | |||||
| const std::string &node_def, const std::string &ext_info, const std::vector<void *> &input_data_addrs, | |||||
| const std::vector<void *> &output_data_addrs, bool dump_flag) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::AICPU, dump_flag), | |||||
| so_name_(so_name), | |||||
| kernel_name_(kernel_name), | |||||
| node_def_(node_def), | |||||
| ext_info_(ext_info), | |||||
| input_data_addrs_(input_data_addrs), | |||||
| output_data_addrs_(output_data_addrs) {} | |||||
| ~AicpuTaskInfo() override {} | |||||
| const std::string &so_name() const { return so_name_; } | |||||
| const std::string &kernel_name() const { return kernel_name_; } | |||||
| const std::string &node_def() const { return node_def_; } | |||||
| const std::vector<void *> &input_data_addrs() const { return input_data_addrs_; } | |||||
| const std::vector<void *> &output_data_addrs() const { return output_data_addrs_; } | |||||
| const std::string &ext_info() const { return ext_info_; } | |||||
| private: | |||||
| std::string so_name_; | |||||
| std::string kernel_name_; | |||||
| std::string node_def_; | |||||
| std::string ext_info_; | |||||
| std::vector<void *> input_data_addrs_; | |||||
| std::vector<void *> output_data_addrs_; | |||||
| }; | |||||
| class LabelSetTaskInfo : public TaskInfo { | |||||
| public: | |||||
| LabelSetTaskInfo(const std::string &op_name, uint32_t stream_id, uint32_t label_id) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::LABEL_SET, false), label_id_(label_id) {} | |||||
| ~LabelSetTaskInfo() override {} | |||||
| uint32_t label_id() const { return label_id_; } | |||||
| private: | |||||
| uint32_t label_id_; | |||||
| }; | |||||
| class LabelGotoTaskInfo : public TaskInfo { | |||||
| public: | |||||
| LabelGotoTaskInfo(const std::string &op_name, uint32_t stream_id, uint32_t label_id) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::LABEL_GOTO, false), label_id_(label_id) {} | |||||
| ~LabelGotoTaskInfo() override {} | |||||
| uint32_t label_id() const { return label_id_; } | |||||
| private: | |||||
| uint32_t label_id_; | |||||
| }; | |||||
| class LabelSwitchTaskInfo : public TaskInfo { | |||||
| public: | |||||
| LabelSwitchTaskInfo(const std::string &op_name, uint32_t stream_id, uint32_t label_size, | |||||
| const std::vector<uint32_t> &label_list, void *cond) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::LABEL_SWITCH, false), | |||||
| label_size_(label_size), | |||||
| label_list_(label_list), | |||||
| cond_(cond) {} | |||||
| ~LabelSwitchTaskInfo() override {} | |||||
| uint32_t label_size() const { return label_size_; } | |||||
| const std::vector<uint32_t> &label_list() const { return label_list_; } | |||||
| void *cond() const { return cond_; } | |||||
| private: | |||||
| uint32_t label_size_; | |||||
| std::vector<uint32_t> label_list_; | |||||
| void *cond_; | |||||
| }; | |||||
| class EventTaskInfo : public TaskInfo { | |||||
| public: | |||||
| uint32_t event_id() const { return event_id_; } | |||||
| protected: | |||||
| EventTaskInfo(const std::string &op_name, uint32_t stream_id, TaskInfoType type, uint32_t event_id) | |||||
| : TaskInfo(op_name, stream_id, type, false), event_id_(event_id) {} | |||||
| ~EventTaskInfo() override {} | |||||
| uint32_t event_id_; | |||||
| }; | |||||
| class EventRecordTaskInfo : public EventTaskInfo { | |||||
| public: | |||||
| EventRecordTaskInfo(const std::string &op_name, uint32_t stream_id, uint32_t event_id) | |||||
| : EventTaskInfo(op_name, stream_id, TaskInfoType::EVENT_RECORD, event_id) {} | |||||
| ~EventRecordTaskInfo() override {} | |||||
| }; | |||||
| class EventWaitTaskInfo : public EventTaskInfo { | |||||
| public: | |||||
| EventWaitTaskInfo(const std::string &op_name, uint32_t stream_id, uint32_t event_id) | |||||
| : EventTaskInfo(op_name, stream_id, TaskInfoType::EVENT_WAIT, event_id) {} | |||||
| ~EventWaitTaskInfo() override {} | |||||
| }; | |||||
| class FusionStartTaskInfo : public TaskInfo { | |||||
| public: | |||||
| explicit FusionStartTaskInfo(const std::string &op_name, uint32_t stream_id) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::FUSION_START, false) {} | |||||
| ~FusionStartTaskInfo() override {} | |||||
| }; | |||||
| class FusionEndTaskInfo : public TaskInfo { | |||||
| public: | |||||
| explicit FusionEndTaskInfo(const std::string &op_name, uint32_t stream_id) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::FUSION_END, false) {} | |||||
| ~FusionEndTaskInfo() override {} | |||||
| }; | |||||
| class HcclTaskInfo : public TaskInfo { | |||||
| public: | |||||
| HcclTaskInfo(const std::string &op_name, uint32_t stream_id, const std::string hccl_type, void *input_data_addr, | |||||
| void *output_data_addr, int64_t workspace_size, int64_t hccl_stream_num, | |||||
| const std::vector<uint8_t> &private_def, void *ops_kernel_store, int32_t count, int64_t root_id, | |||||
| int64_t op_type, int64_t data_type, const std::string &group, bool dump_flag) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::HCCL, dump_flag), | |||||
| hccl_type_(hccl_type), | |||||
| input_data_addr_(input_data_addr), | |||||
| output_data_addr_(output_data_addr), | |||||
| workspace_size_(workspace_size), | |||||
| hccl_stream_num_(hccl_stream_num), | |||||
| private_def_(private_def), | |||||
| ops_kernel_store_(ops_kernel_store), | |||||
| count_(count), | |||||
| root_id_(root_id), | |||||
| op_type_(op_type), | |||||
| data_type_(data_type), | |||||
| group_(group) {} | |||||
| ~HcclTaskInfo() override {} | |||||
| const std::string &hccl_type() const { return hccl_type_; } | |||||
| void *input_data_addr() const { return input_data_addr_; } | |||||
| void *output_data_addr() const { return output_data_addr_; } | |||||
| int64_t workspace_size() const { return workspace_size_; } | |||||
| int64_t hccl_stream_num() const { return hccl_stream_num_; } | |||||
| const std::vector<uint8_t> &private_def() const { return private_def_; } | |||||
| void *ops_kernel_store() const { return ops_kernel_store_; } | |||||
| int32_t count() const { return count_; } | |||||
| int64_t root_id() const { return root_id_; } | |||||
| int64_t op_type() const { return op_type_; } | |||||
| int64_t data_type() const { return data_type_; } | |||||
| const std::string &group() const { return group_; } | |||||
| private: | |||||
| std::string hccl_type_; | |||||
| void *input_data_addr_; | |||||
| void *output_data_addr_; | |||||
| int64_t workspace_size_; | |||||
| int64_t hccl_stream_num_; | |||||
| std::vector<uint8_t> private_def_; | |||||
| void *ops_kernel_store_; | |||||
| int32_t count_; | |||||
| int64_t root_id_; | |||||
| int64_t op_type_; | |||||
| int64_t data_type_; | |||||
| std::string group_; | |||||
| }; | |||||
| class ProfilerTraceTaskInfo : public TaskInfo { | |||||
| public: | |||||
| ProfilerTraceTaskInfo(const std::string &op_name, uint32_t stream_id, uint64_t log_id, bool notify, uint32_t flat) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::PROFILER_TRACE, false), | |||||
| log_id_(log_id), | |||||
| notify_(notify), | |||||
| flat_(flat) {} | |||||
| ~ProfilerTraceTaskInfo() override {} | |||||
| uint64_t log_id() const { return log_id_; } | |||||
| bool notify() const { return notify_; } | |||||
| uint32_t flat() const { return flat_; } | |||||
| private: | |||||
| uint64_t log_id_; | |||||
| bool notify_; | |||||
| uint32_t flat_; | |||||
| }; | |||||
| class MemcpyAsyncTaskInfo : public TaskInfo { | |||||
| public: | |||||
| MemcpyAsyncTaskInfo(const std::string &op_name, uint32_t stream_id, void *dst, uint64_t dst_max, void *src, | |||||
| uint64_t count, uint32_t kind, bool dump_flag) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::MEMCPY_ASYNC, dump_flag), | |||||
| dst_(dst), | |||||
| dst_max_(dst_max), | |||||
| src_(src), | |||||
| count_(count), | |||||
| kind_(kind) {} | |||||
| ~MemcpyAsyncTaskInfo() override {} | |||||
| void *dst() const { return dst_; } | |||||
| uint64_t dst_max() const { return dst_max_; } | |||||
| void *src() const { return src_; } | |||||
| uint64_t count() const { return count_; } | |||||
| uint32_t kind() const { return kind_; } | |||||
| private: | |||||
| void *dst_; | |||||
| uint64_t dst_max_; | |||||
| void *src_; | |||||
| uint64_t count_; | |||||
| int32_t kind_; | |||||
| }; | |||||
| class StreamSwitchTaskInfo : public TaskInfo { | |||||
| public: | |||||
| StreamSwitchTaskInfo(const std::string &op_name, uint32_t stream_id, int64_t true_stream_id, void *input_addr, | |||||
| void *value_addr, int64_t cond, int64_t data_type) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::STREAM_SWITCH, false), | |||||
| true_stream_id_(true_stream_id), | |||||
| input_addr_(input_addr), | |||||
| value_addr_(value_addr), | |||||
| cond_(cond), | |||||
| data_type_(data_type) {} | |||||
| ~StreamSwitchTaskInfo() override {} | |||||
| int64_t true_stream_id() const { return true_stream_id_; } | |||||
| void *input_addr() const { return input_addr_; } | |||||
| void *value_addr() const { return value_addr_; } | |||||
| int64_t cond() const { return cond_; } | |||||
| int64_t data_type() const { return data_type_; } | |||||
| private: | |||||
| int64_t true_stream_id_; | |||||
| void *input_addr_; | |||||
| void *value_addr_; | |||||
| int64_t cond_; | |||||
| int64_t data_type_; | |||||
| }; | |||||
| class StreamActiveTaskInfo : public TaskInfo { | |||||
| public: | |||||
| StreamActiveTaskInfo(const std::string &op_name, uint32_t stream_id, uint32_t active_stream_id) | |||||
| : TaskInfo(op_name, stream_id, TaskInfoType::STREAM_ACTIVE, false), active_stream_id_(active_stream_id) {} | |||||
| ~StreamActiveTaskInfo() override {} | |||||
| uint32_t active_stream_id() const { return active_stream_id_; } | |||||
| private: | |||||
| uint32_t active_stream_id_; | |||||
| }; | |||||
| } // namespace model_runner | |||||
| } // namespace ge | |||||
| #endif // INC_FRAMEWORK_GE_RUNTIME_TASK_INFO_H_ | |||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -21,26 +21,31 @@ | |||||
| #include <memory> | #include <memory> | ||||
| #include <string> | #include <string> | ||||
| #include <vector> | #include <vector> | ||||
| #include "ge/ge_ir_build.h" | |||||
| #include "common/ge_inner_error_codes.h" | |||||
| #include "common/ge_types.h" | |||||
| #include "external/ge/ge_ir_build.h" | |||||
| #include "framework/common/ge_inner_error_codes.h" | |||||
| #include "framework/common/ge_types.h" | |||||
| #include "graph/ge_tensor.h" | #include "graph/ge_tensor.h" | ||||
| #include "graph/graph.h" | #include "graph/graph.h" | ||||
| #include "graph/op_desc.h" | #include "graph/op_desc.h" | ||||
| #include "graph/detail/attributes_holder.h" | #include "graph/detail/attributes_holder.h" | ||||
| #include "omg/omg_inner_types.h" | |||||
| #include "framework/omg/omg_inner_types.h" | |||||
| namespace ge { | namespace ge { | ||||
| const std::string kAttrSupportDynamicShape = "support_dynamicshape"; | |||||
| class GeRootModel; | class GeRootModel; | ||||
| class GE_FUNC_VISIBILITY GeGenerator { | class GE_FUNC_VISIBILITY GeGenerator { | ||||
| public: | public: | ||||
| using InOutTensorRef = std::pair<const std::vector<ge::GeTensor> &, const std::vector<ge::GeTensor> &>; | |||||
| static GeGenerator &GetInstance() { | static GeGenerator &GetInstance() { | ||||
| static GeGenerator Instance; | static GeGenerator Instance; | ||||
| return Instance; | return Instance; | ||||
| } | } | ||||
| GeGenerator() = default; | GeGenerator() = default; | ||||
| ~GeGenerator() { (void)Finalize(); } | |||||
| ~GeGenerator() { | |||||
| (void)Finalize(); | |||||
| } | |||||
| GeGenerator(const GeGenerator &) = delete; | GeGenerator(const GeGenerator &) = delete; | ||||
| @@ -54,7 +59,7 @@ class GE_FUNC_VISIBILITY GeGenerator { | |||||
| Status GenerateOfflineModel(const Graph &graph, const std::string &file_name_prefix, | Status GenerateOfflineModel(const Graph &graph, const std::string &file_name_prefix, | ||||
| const std::vector<GeTensor> &inputs = std::vector<GeTensor>()); | const std::vector<GeTensor> &inputs = std::vector<GeTensor>()); | ||||
| Status GenerateOnlineModel(const Graph &graph, const vector<GeTensor> &inputs, ge::ModelBufferData &model); | |||||
| Status GenerateOnlineModel(const Graph &graph, const std::vector<GeTensor> &inputs, ge::ModelBufferData &model); | |||||
| Status GenerateInfershapeGraph(const Graph &graph); | Status GenerateInfershapeGraph(const Graph &graph); | ||||
| @@ -81,10 +86,16 @@ class GE_FUNC_VISIBILITY GeGenerator { | |||||
| /// @param [in] compile_flag: op build flag, accurate build is 0, fuzz build is 1 | /// @param [in] compile_flag: op build flag, accurate build is 0, fuzz build is 1 | ||||
| /// @param [out] model_buff: model buff of op. | /// @param [out] model_buff: model buff of op. | ||||
| /// @return SUCCESS or FAILED | /// @return SUCCESS or FAILED | ||||
| Status BuildSingleOpModel(OpDescPtr &op_desc, const vector<GeTensor> &inputs, const vector<GeTensor> &outputs, | |||||
| OpEngineType engine_type, ModelBufferData &model_buff); | |||||
| Status BuildSingleOpModel(OpDescPtr &op_desc, const vector<GeTensor> &inputs, const vector<GeTensor> &outputs, | |||||
| OpEngineType engine_type, int32_t compile_flag, ModelBufferData &model_buff); | |||||
| Status BuildSingleOpModel(OpDescPtr &op_desc, const std::vector<GeTensor> &inputs, | |||||
| const std::vector<GeTensor> &outputs, OpEngineType engine_type, | |||||
| ModelBufferData &model_buff); | |||||
| Status BuildSingleOpModel(OpDescPtr &op_desc, const std::vector<GeTensor> &inputs, | |||||
| const std::vector<GeTensor> &outputs, OpEngineType engine_type, int32_t compile_flag, | |||||
| ModelBufferData &model_buff); | |||||
| Status BuildSingleOpModel(OpDescPtr &op_desc, const std::vector<GeTensor> &inputs, | |||||
| const std::vector<GeTensor> &outputs, OpEngineType engine_type, int32_t compile_flag, | |||||
| ModelBufferData &model_buff, GraphStage graph_stage, ComputeGraphPtr &compute_graph); | |||||
| /// | /// | ||||
| /// @ingroup ge | /// @ingroup ge | ||||
| /// @brief: Build single Op into model buff. | /// @brief: Build single Op into model buff. | ||||
| @@ -94,22 +105,33 @@ class GE_FUNC_VISIBILITY GeGenerator { | |||||
| /// @param [in] graph_name: graph name. | /// @param [in] graph_name: graph name. | ||||
| /// @param [out] graph: graph of single op. | /// @param [out] graph: graph of single op. | ||||
| /// @return SUCCESS or FAILED | /// @return SUCCESS or FAILED | ||||
| Status BuildSingleOpGraph(OpDescPtr &op_desc, const vector<GeTensor> &inputs, const vector<GeTensor> &outputs, | |||||
| std::string graph_name, Graph &graph); | |||||
| Status BuildSingleOpGraph(const OpDescPtr &op_desc, const InOutTensorRef &inputs_outputs, std::string graph_name, | |||||
| Graph &graph, std::vector<std::pair<std::string, std::string>> &inputs_name_type) const; | |||||
| Status BuildOriginalGraphInfo(OpDescPtr &op_desc, const std::vector<GeTensor> &inputs, | |||||
| const std::vector<GeTensor> &outputs, const std::string &model_file_name, | |||||
| bool is_offline, int32_t compile_flag, GraphStage graph_stage, Graph &graph, | |||||
| ComputeGraphPtr &compute_graph, bool &fuzz_compile_flag, | |||||
| std::vector<std::pair<std::string, std::string>> &inputs_name_type); | |||||
| private: | private: | ||||
| Status GenerateModel(const Graph &graph, const string &file_name_prefix, const vector<GeTensor> &inputs, | |||||
| Status GenerateModel(const Graph &graph, const std::string &file_name_prefix, const std::vector<GeTensor> &inputs, | |||||
| ge::ModelBufferData &model, bool is_offline = true); | ge::ModelBufferData &model, bool is_offline = true); | ||||
| Status BuildSingleOp(OpDescPtr &op_desc, const vector<GeTensor> &inputs, const vector<GeTensor> &outputs, | |||||
| const string &model_file_name, OpEngineType engine_type, ModelBufferData &model_buff, | |||||
| bool is_offline = true, int32_t compile_flag = 0); | |||||
| Status BuildSingleOp(OpDescPtr &op_desc, const std::vector<GeTensor> &inputs, const std::vector<GeTensor> &outputs, | |||||
| const std::string &model_file_name, OpEngineType engine_type, ModelBufferData &model_buff, | |||||
| ComputeGraphPtr &comp_graph, bool is_offline = true, int32_t compile_flag = 0, | |||||
| GraphStage graph_stage = GraphStage::GRAPH_STAGE_RESERVED); | |||||
| bool CheckNoAicore(const ComputeGraphPtr &graph); | bool CheckNoAicore(const ComputeGraphPtr &graph); | ||||
| void RemoveConst(const vector<GeTensor> &inputs, vector<GeTensor> &outputs); | |||||
| Status CheckForSingleOp(OpDescPtr &op_desc, const vector<GeTensor> &inputs, const vector<GeTensor> &outputs); | |||||
| Status InferFormatForSingleOp(OpDescPtr &op_desc, Graph &graph); | |||||
| void RemoveConst(const std::vector<GeTensor> &inputs, std::vector<GeTensor> &outputs) const; | |||||
| Status CheckForSingleOp(const OpDescPtr &op_desc, const std::vector<GeTensor> &inputs, | |||||
| const std::vector<GeTensor> &outputs) const; | |||||
| Status InferFormatForSingleOp(const OpDescPtr &op_desc, const Graph &graph) const; | |||||
| using GeRootModelPtr = std::shared_ptr<ge::GeRootModel>; | using GeRootModelPtr = std::shared_ptr<ge::GeRootModel>; | ||||
| Status SetModelNameForDump(const GeRootModelPtr &ge_root_model); | Status SetModelNameForDump(const GeRootModelPtr &ge_root_model); | ||||
| Status CreateGeneralizedBuildAttrs(const GeRootModelPtr &ge_root_model, const std::vector<GeTensor> &inputs, | |||||
| const std::vector<GeTensor> &outputs, | |||||
| const std::vector<std::pair<std::string, std::string>> &inputs_name_type, | |||||
| std::vector<ge::NamedAttrs> &generalized_build_attrs) const; | |||||
| class Impl; | class Impl; | ||||
| @@ -1,187 +0,0 @@ | |||||
| /** | |||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_FRAMEWORK_GENERATOR_GENERATOR_API_H_ | |||||
| #define INC_FRAMEWORK_GENERATOR_GENERATOR_API_H_ | |||||
| #if defined(_MSC_VER) | |||||
| #ifdef FUNC_VISIBILITY | |||||
| #define GE_FUNC_VISIBILITY _declspec(dllexport) | |||||
| #else | |||||
| #define GE_FUNC_VISIBILITY | |||||
| #endif | |||||
| #else | |||||
| #ifdef FUNC_VISIBILITY | |||||
| #define GE_FUNC_VISIBILITY __attribute__((visibility("default"))) | |||||
| #else | |||||
| #define GE_FUNC_VISIBILITY | |||||
| #endif | |||||
| #endif | |||||
| #include <stdint.h> | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| typedef uint32_t Status_t; | |||||
| typedef void *OpAttr_t; | |||||
| typedef void *OpTensor_t; | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Generate offline model for the op. | |||||
| /// @param [in] op_type: type name of the op. | |||||
| /// @param [in] in_tensor: input description array (created by OpTensorCreate). | |||||
| /// @param [in] in_num: number of in_tensor. | |||||
| /// @param [in] out_tensor: output description array (created by OpTensorCreate). | |||||
| /// @param [in] out_num: number of out_tensor. | |||||
| /// @param [in] attr: the attributes of the op (created by OpAttrCreate). | |||||
| /// @param [in] om_file: file name for the om to save. | |||||
| /// @return 0 for success / others for fail | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern Status_t OpTaskGernerator(const char *op_type, const OpTensor_t *in_tensor, int in_num, | |||||
| const OpTensor_t *out_tensor, int out_num, const OpAttr_t attr, | |||||
| const char *om_file); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Create Tensor Description. | |||||
| /// @param [in] format: tensor format of the data. | |||||
| /// @param [in] datatype: tensor type of the data. | |||||
| /// @param [in] shape: tensor shape array. | |||||
| /// @param [in] num: number of shape. | |||||
| /// @return OpTensor_t for success / nullptr for failure | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern OpTensor_t OpTensorCreate(int format, int datatype, const int64_t *shape, int num); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Destroy Tensor Description. | |||||
| /// @param [in] OpTensor_t tensor: created by OpTensorCreate. | |||||
| /// @param [out] none | |||||
| /// @return 0 for success / others for failure. | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern Status_t OpTensorDestroy(OpTensor_t tensor); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Create an attribute holder. | |||||
| /// @param [in] none | |||||
| /// @param [out] none | |||||
| /// @return OpAttr_t for success / nullptr for failure. | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern OpAttr_t OpAttrCreate(); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Destroy Attribute holder. | |||||
| /// @param [in] OpAttr_t attr: created by OpAttrCreate. | |||||
| /// @param [out] none | |||||
| /// @return 0 for success / others for failure. | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern Status_t OpAttrDestroy(OpAttr_t attr); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Set a boolean attribute to the attribute holder. | |||||
| /// @param [in] attr: attribute holder (created by OpAttrCreate). | |||||
| /// @param [in] name: attribute name (can`t be nullptr, end with '\0'). | |||||
| /// @param [in] value: attributed value. | |||||
| /// @return 0 for success / others for failure. | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern Status_t SetAttrBool(OpAttr_t attr, const char *name, bool value); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Set an integer attribute to the attribute holder. | |||||
| /// @param [in] attr: attribute holder (created by OpAttrCreate). | |||||
| /// @param [in] name: attribute name (can`t be nullptr, end with '\0'). | |||||
| /// @param [in] value: attribute value. | |||||
| /// @return 0 for success / others for failure. | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern Status_t SetAttrInt(OpAttr_t attr, const char *name, int64_t value); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Set a float attribute to the attribute holder. | |||||
| /// @param [in] attr: attribute holder (created by OpAttrCreate). | |||||
| /// @param [in] name: attribute name (can`t be nullptr, end with '\0'). | |||||
| /// @param [in] value: attribute value. | |||||
| /// @return 0 for success / others for failure. | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern Status_t SetAttrFloat(OpAttr_t attr, const char *name, float value); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Set a string attribute to the attribute holder. | |||||
| /// @param [in] attr: attribute holder (created by OpAttrCreate). | |||||
| /// @param [in] name: attribute name (can`t be nullptr, end with '\0'). | |||||
| /// @param [in] value: attribute value (can`t be nullptr, end with '\0'). | |||||
| /// @return 0 for success / others for failure. | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern Status_t SetAttrString(OpAttr_t attr, const char *name, const char *value); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Set a boolean array attribute to the attribute holder. | |||||
| /// @param [in] attr: attribute holder (created by OpAttrCreate). | |||||
| /// @param [in] name: attribute name (can`t be nullptr, end with '\0'). | |||||
| /// @param [in] value: attribute value array. | |||||
| /// @param [in] num: number of value array. | |||||
| /// @return 0 for success / others for failure. | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern Status_t SetAttrBoolList(OpAttr_t attr, const char *name, const bool *value, int num); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Set an integer array attribute to the attribute holder. | |||||
| /// @param [in] attr: attribute holder (created by OpAttrCreate). | |||||
| /// @param [in] name: attribute name (can`t be nullptr, end with '\0'). | |||||
| /// @param [in] value: attribute value array. | |||||
| /// @param [in] num: number of value array. | |||||
| /// @return 0 for success / others for failure. | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern Status_t SetAttrIntList(OpAttr_t attr, const char *name, const int64_t *value, int num); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Set a float array attribute to the attribute holder. | |||||
| /// @param [in] attr: attribute holder (created by OpAttrCreate). | |||||
| /// @param [in] name: attribute name (can`t be nullptr, end with '\0'). | |||||
| /// @param [in] value: attribute value array. | |||||
| /// @param [in] num: number of value array. | |||||
| /// @return 0 for success / others for failure. | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern Status_t SetAttrFloatList(OpAttr_t attr, const char *name, const float *value, int num); | |||||
| /// | |||||
| /// @ingroup ge | |||||
| /// @brief Set a string array attribute to the attribute holder. | |||||
| /// @param [in] attr: attribute holder (created by OpAttrCreate). | |||||
| /// @param [in] name: attribute name (can`t be nullptr, end with '\0'). | |||||
| /// @param [in] value: attribute value array (each value can`t be nullptr, end with '\0'). | |||||
| /// @param [in] num: number of value array. | |||||
| /// @return 0 for success / others for failure. | |||||
| /// | |||||
| GE_FUNC_VISIBILITY extern Status_t SetAttrStringList(OpAttr_t attr, const char *name, const char **value, int num); | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif // INC_FRAMEWORK_GENERATOR_GENERATOR_API_H_ | |||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -17,11 +17,7 @@ | |||||
| #ifndef INC_FRAMEWORK_MEMORY_MEMORY_API_H_ | #ifndef INC_FRAMEWORK_MEMORY_MEMORY_API_H_ | ||||
| #define INC_FRAMEWORK_MEMORY_MEMORY_API_H_ | #define INC_FRAMEWORK_MEMORY_MEMORY_API_H_ | ||||
| #include <string> | |||||
| #include <vector> | |||||
| #include "ge/ge_api_error_codes.h" | |||||
| #include "graph//types.h" | |||||
| #include "external/ge/ge_api_error_codes.h" | |||||
| #include "runtime/mem.h" | #include "runtime/mem.h" | ||||
| namespace ge { | namespace ge { | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -19,7 +19,7 @@ | |||||
| #include <utility> | #include <utility> | ||||
| #include "common/ge_inner_error_codes.h" | |||||
| #include "framework/common/ge_inner_error_codes.h" | |||||
| #include "graph/node.h" | #include "graph/node.h" | ||||
| namespace ge { | namespace ge { | ||||
| @@ -33,7 +33,7 @@ class GE_FUNC_VISIBILITY MemoryAssigner { | |||||
| MemoryAssigner &operator=(const MemoryAssigner &) = delete; | MemoryAssigner &operator=(const MemoryAssigner &) = delete; | ||||
| Status AssignMemory(bool is_loop_graph, map<uint64_t, size_t> &mem_offset, size_t &zero_copy_mem_size); | |||||
| Status AssignMemory(std::map<uint64_t, size_t> &mem_offset, size_t &zero_copy_mem_size); | |||||
| private: | private: | ||||
| ge::ComputeGraphPtr compute_graph_; | ge::ComputeGraphPtr compute_graph_; | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -18,7 +18,7 @@ | |||||
| #define INC_FRAMEWORK_OMG_GE_INIT_H_ | #define INC_FRAMEWORK_OMG_GE_INIT_H_ | ||||
| #include <map> | #include <map> | ||||
| #include <string> | #include <string> | ||||
| #include "common/ge_inner_error_codes.h" | |||||
| #include "framework/common/ge_inner_error_codes.h" | |||||
| namespace ge { | namespace ge { | ||||
| class GE_FUNC_VISIBILITY GEInit { | class GE_FUNC_VISIBILITY GEInit { | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -17,10 +17,12 @@ | |||||
| #ifndef INC_FRAMEWORK_OMG_OMG_H_ | #ifndef INC_FRAMEWORK_OMG_OMG_H_ | ||||
| #define INC_FRAMEWORK_OMG_OMG_H_ | #define INC_FRAMEWORK_OMG_OMG_H_ | ||||
| #include <google/protobuf/message.h> | |||||
| #include <string> | #include <string> | ||||
| #include <unordered_map> | #include <unordered_map> | ||||
| #include <vector> | #include <vector> | ||||
| #include <google/protobuf/message.h> | |||||
| #include "external/ge/ge_api_types.h" | |||||
| #include "framework/omg/omg_inner_types.h" | #include "framework/omg/omg_inner_types.h" | ||||
| #include "framework/omg/parser/parser_inner_ctx.h" | #include "framework/omg/parser/parser_inner_ctx.h" | ||||
| #include "proto/ge_ir.pb.h" | #include "proto/ge_ir.pb.h" | ||||
| @@ -31,20 +33,14 @@ | |||||
| #include "graph/model.h" | #include "graph/model.h" | ||||
| #include "runtime/kernel.h" | #include "runtime/kernel.h" | ||||
| using domi::Status; | |||||
| using std::pair; | |||||
| using std::string; | |||||
| using std::unordered_map; | |||||
| using std::vector; | |||||
| namespace ge { | namespace ge { | ||||
| /** | /** | ||||
| * @ingroup domi_omg | * @ingroup domi_omg | ||||
| * @brief init omg context | * @brief init omg context | ||||
| * @return void | * @return void | ||||
| */ | */ | ||||
| GE_FUNC_VISIBILITY Status InitDomiOmgContext(const string &input_shape, const string &input_format, | |||||
| const string &net_format, bool is_dynamic_input); | |||||
| GE_FUNC_VISIBILITY domi::Status InitDomiOmgContext(const std::string &input_shape, const std::string &input_format, | |||||
| const std::string &net_format, bool is_dynamic_input); | |||||
| /** | /** | ||||
| * @ingroup domi_omg | * @ingroup domi_omg | ||||
| @@ -61,10 +57,10 @@ GE_FUNC_VISIBILITY Status InitDomiOmgContext(const string &input_shape, const st | |||||
| * @param [in] atc_params multiply atc params | * @param [in] atc_params multiply atc params | ||||
| * @return Status result code | * @return Status result code | ||||
| */ | */ | ||||
| GE_FUNC_VISIBILITY Status ParseGraph(ge::Graph &graph, const std::map<string, string> &atc_params, | |||||
| const char *model_file, const char *weights_file, domi::FrameworkType type, | |||||
| const char *op_conf = nullptr, const char *target = nullptr, | |||||
| RunMode run_mode = GEN_OM_MODEL, bool is_dynamic_input = false); | |||||
| GE_FUNC_VISIBILITY domi::Status ParseGraph(ge::Graph &graph, const std::map<std::string, std::string> &atc_params, | |||||
| const char *model_file, const char *weights_file, domi::FrameworkType type, | |||||
| const char *op_conf = nullptr, const char *target = nullptr, | |||||
| RunMode run_mode = RunMode::GEN_OM_MODEL, bool is_dynamic_input = false); | |||||
| /** | /** | ||||
| * @ingroup domi_omg | * @ingroup domi_omg | ||||
| @@ -74,9 +70,9 @@ GE_FUNC_VISIBILITY Status ParseGraph(ge::Graph &graph, const std::map<string, st | |||||
| * @param [key] encrypted key | * @param [key] encrypted key | ||||
| * @return Status result code | * @return Status result code | ||||
| */ | */ | ||||
| GE_FUNC_VISIBILITY Status ConvertOm(const char *model_file, const char *json_file, bool is_covert_to_json); | |||||
| GE_FUNC_VISIBILITY domi::Status ConvertOm(const char *model_file, const char *json_file, bool is_covert_to_json); | |||||
| GE_FUNC_VISIBILITY Status ConvertPbtxtToJson(const char *model_file, const char *json_file); | |||||
| GE_FUNC_VISIBILITY domi::Status ConvertPbtxtToJson(const char *model_file, const char *json_file); | |||||
| /** | /** | ||||
| * @ingroup domi_omg | * @ingroup domi_omg | ||||
| * @brief convert the model file in protobuf format into a JSON file. | * @brief convert the model file in protobuf format into a JSON file. | ||||
| @@ -86,23 +82,24 @@ GE_FUNC_VISIBILITY Status ConvertPbtxtToJson(const char *model_file, const char | |||||
| * @param [key] encrypted key | * @param [key] encrypted key | ||||
| * @return Status result code | * @return Status result code | ||||
| */ | */ | ||||
| GE_FUNC_VISIBILITY Status ConvertFwkModelToJson(domi::FrameworkType framework, const char *model_file, | |||||
| const char *json_file); | |||||
| GE_FUNC_VISIBILITY domi::Status ConvertFwkModelToJson(const domi::FrameworkType framework, const char *model_file, | |||||
| const char *json_file); | |||||
| GE_FUNC_VISIBILITY void GetGroupName(ge::proto::ModelDef &model); | |||||
| GE_FUNC_VISIBILITY void GetGroupName(ge::proto::ModelDef &model_def); | |||||
| GE_FUNC_VISIBILITY void FindParserSo(const string &path, vector<string> &fileList, string &caffe_parser_path); | |||||
| GE_FUNC_VISIBILITY void FindParserSo(const std::string &path, std::vector<std::string> &file_list, | |||||
| std::string &caffe_parser_path); | |||||
| GE_FUNC_VISIBILITY Status DumpInfershapeJson(const ge::Graph &graph, const char *json_file); | |||||
| GE_FUNC_VISIBILITY domi::Status DumpInfershapeJson(const ge::Graph &graph, const char *json_file); | |||||
| GE_FUNC_VISIBILITY Status SetOutputNodeInfo(ge::Graph &graph, const std::string &output_type, | |||||
| const std::string &output_format); | |||||
| GE_FUNC_VISIBILITY domi::Status SetOutputNodeInfo(ge::Graph &graph, const std::string &output_type, | |||||
| const std::string &output); | |||||
| GE_FUNC_VISIBILITY Status GetOutputLeaf(ge::NodePtr node, | |||||
| std::vector<std::pair<ge::NodePtr, int32_t>> &output_nodes_info); | |||||
| GE_FUNC_VISIBILITY domi::Status GetOutputLeaf(ge::NodePtr node, | |||||
| std::vector<std::pair<ge::NodePtr, int32_t>> &output_nodes_info); | |||||
| GE_FUNC_VISIBILITY void GetOutputNodesNameAndIndex(std::vector<std::pair<ge::NodePtr, int32_t>> &output_nodes_info, | |||||
| std::vector<std::string> &output_nodes_name); | |||||
| GE_FUNC_VISIBILITY void CreateOutputNodesInfo(std::vector<std::pair<ge::NodePtr, int32_t>> &output_nodes_info, | |||||
| std::vector<std::string> &output_nodes_name); | |||||
| GE_FUNC_VISIBILITY void UpdateOmgCtxWithParserCtx(); | GE_FUNC_VISIBILITY void UpdateOmgCtxWithParserCtx(); | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -31,12 +31,7 @@ | |||||
| using domi::DOMI_TENSOR_ND; | using domi::DOMI_TENSOR_ND; | ||||
| using domi::DOMI_TENSOR_RESERVED; | using domi::DOMI_TENSOR_RESERVED; | ||||
| using domi::domiTensorFormat_t; | using domi::domiTensorFormat_t; | ||||
| using domi::FRAMEWORK_RESERVED; | |||||
| using domi::FrameworkType; | |||||
| using std::map; | |||||
| using std::string; | |||||
| using std::unordered_map; | using std::unordered_map; | ||||
| using std::vector; | |||||
| namespace ge { | namespace ge { | ||||
| /** | /** | ||||
| @@ -51,34 +46,13 @@ enum RunMode { | |||||
| DISPLAY_OM_INFO = 6 // display model info | DISPLAY_OM_INFO = 6 // display model info | ||||
| }; | }; | ||||
| /// | |||||
| /// @ingroup domi_omg | |||||
| /// @brief high-precision mode | |||||
| /// | |||||
| enum HighPrecisionMode { | |||||
| // the FP16 high-precision function is disabled in common mode | |||||
| HIGH_PRECISION_DEFAULT = 0, | |||||
| // high-precision mode, enabling FP16 high-precision mode (Convolution/FullConnect/AvgPooling are involved) | |||||
| HIGH_PRECISION_FP16 = 1 | |||||
| }; | |||||
| /// | |||||
| /// @ingroup domi_omg | |||||
| /// @brief description buffer data | |||||
| /// | |||||
| struct OMGBufferData { | |||||
| void *data; | |||||
| uint32_t length; | |||||
| }; | |||||
| struct OmgContext { | struct OmgContext { | ||||
| OmgContext() { format = DOMI_TENSOR_ND; } | |||||
| domiTensorFormat_t format; | |||||
| OmgContext() : format(domi::DOMI_TENSOR_ND) {} | |||||
| domi::domiTensorFormat_t format; | |||||
| // format of the input specified by the command line | // format of the input specified by the command line | ||||
| std::unordered_map<std::string, domiTensorFormat_t> input_nodes_format_map; | |||||
| std::vector<domiTensorFormat_t> output_formats; | |||||
| std::unordered_map<std::string, domi::domiTensorFormat_t> input_nodes_format_map; | |||||
| std::vector<domi::domiTensorFormat_t> output_formats; | |||||
| // user-designate input dims | // user-designate input dims | ||||
| std::vector<std::pair<std::string, std::vector<int64_t>>> user_input_dims; | std::vector<std::pair<std::string, std::vector<int64_t>>> user_input_dims; | ||||
| @@ -96,18 +70,18 @@ struct OmgContext { | |||||
| // default out nodes (this is used for determing the orders) | // default out nodes (this is used for determing the orders) | ||||
| std::vector<std::pair<std::string, int32_t>> default_out_nodes; | std::vector<std::pair<std::string, int32_t>> default_out_nodes; | ||||
| // save the output node of the network, value = topName, | // save the output node of the network, value = topName, | ||||
| // topName indicates the output name of the operator. | |||||
| std::vector<std::string> user_out_nodes_top_vec; | |||||
| // tensorName indicates the output name of the operator. | |||||
| std::vector<std::string> user_out_tensors; | |||||
| // net out nodes (where user_out_nodes or leaf nodes) | // net out nodes (where user_out_nodes or leaf nodes) | ||||
| std::vector<std::string> net_out_nodes; | std::vector<std::string> net_out_nodes; | ||||
| // net out nodes top names(only caffe has top) | |||||
| std::vector<std::string> out_top_names; | |||||
| // net data nodes top names(only caffe has top) | |||||
| std::vector<std::string> data_top_names; | |||||
| // net out nodes tensor names(caffe or onnx) | |||||
| std::vector<std::string> out_tensor_names; | |||||
| // net data nodes tensor names(caffe or onnx) | |||||
| std::vector<std::string> data_tensor_names; | |||||
| // preferential format used by the entire network | // preferential format used by the entire network | ||||
| domiTensorFormat_t net_format = DOMI_TENSOR_RESERVED; | |||||
| domi::domiTensorFormat_t net_format = domi::DOMI_TENSOR_RESERVED; | |||||
| domi::FrameworkType type = domi::FRAMEWORK_RESERVED; | domi::FrameworkType type = domi::FRAMEWORK_RESERVED; | ||||
| RunMode run_mode = ONLY_PRE_CHECK; | |||||
| RunMode run_mode = RunMode::ONLY_PRE_CHECK; | |||||
| bool train_flag = false; | bool train_flag = false; | ||||
| std::string output_type; | std::string output_type; | ||||
| @@ -118,14 +92,13 @@ struct OmgContext { | |||||
| std::string dynamic_image_size; | std::string dynamic_image_size; | ||||
| std::string dynamic_dims; | std::string dynamic_dims; | ||||
| std::string dynamic_node_type; | std::string dynamic_node_type; | ||||
| std::vector<std::vector<int64_t>> user_real_input_dims; | |||||
| std::vector<int64_t> cur_dynamic_dims; | |||||
| bool need_multi_batch = false; | bool need_multi_batch = false; | ||||
| std::vector<NodePtr> data_nodes; | std::vector<NodePtr> data_nodes; | ||||
| std::vector<NodePtr> getnext_nosink_nodes; | std::vector<NodePtr> getnext_nosink_nodes; | ||||
| bool fuzz_compile_flag = false; | bool fuzz_compile_flag = false; | ||||
| std::string atc_cmdline; | std::string atc_cmdline; | ||||
| bool user_attr_index_valid = false; | bool user_attr_index_valid = false; | ||||
| bool is_online_model = false; | |||||
| }; | }; | ||||
| } // namespace ge | } // namespace ge | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -25,8 +25,6 @@ | |||||
| #include "graph/ge_tensor.h" | #include "graph/ge_tensor.h" | ||||
| #include "graph/graph.h" | #include "graph/graph.h" | ||||
| #include "graph/op_desc.h" | #include "graph/op_desc.h" | ||||
| #include "graph/operator.h" | |||||
| #include "graph/range_vistor.h" | |||||
| #include "graph/utils/attr_utils.h" | #include "graph/utils/attr_utils.h" | ||||
| #include "graph/utils/graph_utils.h" | #include "graph/utils/graph_utils.h" | ||||
| #include "graph/utils/op_desc_utils.h" | #include "graph/utils/op_desc_utils.h" | ||||
| @@ -36,7 +34,7 @@ using Status = domi::Status; | |||||
| namespace domi { | namespace domi { | ||||
| using GetGraphCallback = std::function<std::unique_ptr<google::protobuf::Message>( | using GetGraphCallback = std::function<std::unique_ptr<google::protobuf::Message>( | ||||
| const google::protobuf::Message *root_proto, const std::string &graph)>; | |||||
| const google::protobuf::Message *root_proto, const std::string &graph)>; | |||||
| using GetGraphCallbackV2 = std::function<std::string(const std::string &subgraph_name)>; | using GetGraphCallbackV2 = std::function<std::string(const std::string &subgraph_name)>; | ||||
| @@ -109,7 +107,11 @@ class GE_FUNC_VISIBILITY ModelParser { | |||||
| * @return SUCCESS | * @return SUCCESS | ||||
| * @return Others failed | * @return Others failed | ||||
| */ | */ | ||||
| virtual Status ToJson(const char *model_file, const char *json_file) { return domi::SUCCESS; } | |||||
| virtual Status ToJson(const char *model_file, const char *json_file) { | |||||
| (void)model_file; | |||||
| (void)json_file; | |||||
| return SUCCESS; | |||||
| } | |||||
| /* | /* | ||||
| * @ingroup domi_omg | * @ingroup domi_omg | ||||
| @@ -129,7 +131,11 @@ class GE_FUNC_VISIBILITY ModelParser { | |||||
| * @return SUCCESS | * @return SUCCESS | ||||
| * @return Others failed | * @return Others failed | ||||
| */ | */ | ||||
| virtual Status ParseProto(const std::string &serialized_proto, ge::ComputeGraphPtr &graph) { return UNSUPPORTED; } | |||||
| virtual Status ParseProto(const std::string &serialized_proto, ge::ComputeGraphPtr &graph) { | |||||
| (void)serialized_proto; | |||||
| (void)graph; | |||||
| return UNSUPPORTED; | |||||
| } | |||||
| /** | /** | ||||
| * @ingroup domi_omg | * @ingroup domi_omg | ||||
| @@ -142,8 +148,22 @@ class GE_FUNC_VISIBILITY ModelParser { | |||||
| */ | */ | ||||
| virtual Status ParseProtoWithSubgraph(const std::string &serialized_proto, GetGraphCallbackV2 callback, | virtual Status ParseProtoWithSubgraph(const std::string &serialized_proto, GetGraphCallbackV2 callback, | ||||
| ge::ComputeGraphPtr &graph) { | ge::ComputeGraphPtr &graph) { | ||||
| (void)serialized_proto; | |||||
| (void)callback; | |||||
| (void)graph; | |||||
| return UNSUPPORTED; | return UNSUPPORTED; | ||||
| } | } | ||||
| virtual bool HasError() { | |||||
| return false; | |||||
| } | |||||
| virtual Status Save(const std::string &file) { | |||||
| (void)file; | |||||
| return SUCCESS; | |||||
| } | |||||
| virtual void Clear(){}; | |||||
| }; | }; | ||||
| } // namespace domi | } // namespace domi | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -19,10 +19,8 @@ | |||||
| #include <google/protobuf/text_format.h> | #include <google/protobuf/text_format.h> | ||||
| #include "framework/omg/parser/parser_types.h" | #include "framework/omg/parser/parser_types.h" | ||||
| #include "omg/omg_inner_types.h" | |||||
| #include "framework/omg/omg_inner_types.h" | |||||
| #include "proto/om.pb.h" | #include "proto/om.pb.h" | ||||
| #include "graph/ge_tensor.h" | |||||
| #include "graph/op_desc.h" | |||||
| #include "graph/utils/op_desc_utils.h" | #include "graph/utils/op_desc_utils.h" | ||||
| using google::protobuf::Message; | using google::protobuf::Message; | ||||
| @@ -50,7 +48,7 @@ class GE_FUNC_VISIBILITY OpParser { | |||||
| * @return SUCCESS | * @return SUCCESS | ||||
| * @return FAILED | * @return FAILED | ||||
| */ | */ | ||||
| virtual Status ParseParams(const Message *op_src, ge::OpDescPtr &op_desc) = 0; | |||||
| virtual domi::Status ParseParams(const google::protobuf::Message *op_src, ge::OpDescPtr &op_desc) = 0; | |||||
| /** | /** | ||||
| * @ingroup domi_omg | * @ingroup domi_omg | ||||
| @@ -60,7 +58,7 @@ class GE_FUNC_VISIBILITY OpParser { | |||||
| * @return SUCCESS | * @return SUCCESS | ||||
| * @return FAILED | * @return FAILED | ||||
| */ | */ | ||||
| virtual Status ParseParams(const Message *op_src, ge::Operator &op_dest) = 0; | |||||
| virtual domi::Status ParseParams(const google::protobuf::Message *op_src, ge::Operator &op_dest) = 0; | |||||
| /** | /** | ||||
| * @ingroup domi_omg | * @ingroup domi_omg | ||||
| @@ -70,7 +68,7 @@ class GE_FUNC_VISIBILITY OpParser { | |||||
| * @return SUCCESS | * @return SUCCESS | ||||
| * @return FAILED | * @return FAILED | ||||
| */ | */ | ||||
| virtual Status ParseWeights(const Message *op_src, ge::NodePtr &node) = 0; | |||||
| virtual domi::Status ParseWeights(const google::protobuf::Message *op_src, ge::NodePtr &node) = 0; | |||||
| /** | /** | ||||
| * @ingroup domi_omg | * @ingroup domi_omg | ||||
| @@ -80,7 +78,7 @@ class GE_FUNC_VISIBILITY OpParser { | |||||
| * @return SUCCESS | * @return SUCCESS | ||||
| * @return FAILED | * @return FAILED | ||||
| */ | */ | ||||
| virtual Status GetFormat(const Message *op_src, domi::domiTensorFormat_t &format) { | |||||
| virtual domi::Status GetFormat(const google::protobuf::Message *op_src, domi::domiTensorFormat_t &format) { | |||||
| (void)op_src; | (void)op_src; | ||||
| // Indicates that the op does not provide a value for format | // Indicates that the op does not provide a value for format | ||||
| format = domi::DOMI_TENSOR_RESERVED; | format = domi::DOMI_TENSOR_RESERVED; | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -17,15 +17,14 @@ | |||||
| #ifndef INC_FRAMEWORK_OMG_PARSER_PARSER_API_H_ | #ifndef INC_FRAMEWORK_OMG_PARSER_PARSER_API_H_ | ||||
| #define INC_FRAMEWORK_OMG_PARSER_PARSER_API_H_ | #define INC_FRAMEWORK_OMG_PARSER_PARSER_API_H_ | ||||
| #include <iostream> | |||||
| #include <map> | #include <map> | ||||
| #include <string> | #include <string> | ||||
| #include "ge/ge_api_error_codes.h" | |||||
| #include "external/ge/ge_api_error_codes.h" | |||||
| namespace ge { | namespace ge { | ||||
| // Initialize parser | // Initialize parser | ||||
| GE_FUNC_VISIBILITY Status ParserInitialize(const std::map<std::string, std::string>& options); | |||||
| GE_FUNC_VISIBILITY Status ParserInitialize(const std::map<std::string, std::string> &options); | |||||
| // Finalize parser, release all resources | // Finalize parser, release all resources | ||||
| GE_FUNC_VISIBILITY Status ParserFinalize(); | GE_FUNC_VISIBILITY Status ParserFinalize(); | ||||
| } // namespace ge | } // namespace ge | ||||
| #endif // INC_FRAMEWORK_OMG_PARSER_PARSER_API_H_ | |||||
| #endif // INC_FRAMEWORK_OMG_PARSER_PARSER_API_H_ | |||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -23,14 +23,13 @@ | |||||
| #include <string> | #include <string> | ||||
| #include "framework/omg/omg_inner_types.h" | #include "framework/omg/omg_inner_types.h" | ||||
| #include "framework/omg/parser/parser_types.h" | #include "framework/omg/parser/parser_types.h" | ||||
| using Status = domi::Status; | |||||
| #include "external/register/register.h" | |||||
| namespace domi { | namespace domi { | ||||
| class WeightsParser; | class WeightsParser; | ||||
| class ModelParser; | class ModelParser; | ||||
| typedef std::shared_ptr<ModelParser> (*MODEL_PARSER_CREATOR_FUN)(void); | |||||
| using MODEL_PARSER_CREATOR_FUN = std::shared_ptr<ModelParser> (*)(void); | |||||
| // Create modelparser for different frameworks | // Create modelparser for different frameworks | ||||
| class GE_FUNC_VISIBILITY ModelParserFactory { | class GE_FUNC_VISIBILITY ModelParserFactory { | ||||
| @@ -63,7 +62,7 @@ class GE_FUNC_VISIBILITY ModelParserFactory { | |||||
| class GE_FUNC_VISIBILITY ModelParserRegisterar { | class GE_FUNC_VISIBILITY ModelParserRegisterar { | ||||
| public: | public: | ||||
| ModelParserRegisterar(const domi::FrameworkType type, MODEL_PARSER_CREATOR_FUN fun) { | |||||
| ModelParserRegisterar(const domi::FrameworkType type, MODEL_PARSER_CREATOR_FUN const fun) noexcept { | |||||
| ModelParserFactory::Instance()->RegisterCreator(type, fun); | ModelParserFactory::Instance()->RegisterCreator(type, fun); | ||||
| } | } | ||||
| ~ModelParserRegisterar() {} | ~ModelParserRegisterar() {} | ||||
| @@ -82,7 +81,7 @@ class GE_FUNC_VISIBILITY ModelParserRegisterar { | |||||
| } \ | } \ | ||||
| ModelParserRegisterar g_##type##_Model_Parser_Creator(type, Creator_##type##_Model_Parser) | ModelParserRegisterar g_##type##_Model_Parser_Creator(type, Creator_##type##_Model_Parser) | ||||
| typedef std::shared_ptr<WeightsParser> (*WEIGHTS_PARSER_CREATOR_FUN)(void); | |||||
| using WEIGHTS_PARSER_CREATOR_FUN = std::shared_ptr<WeightsParser> (*)(void); | |||||
| // Create weightsparser for different frameworks | // Create weightsparser for different frameworks | ||||
| class GE_FUNC_VISIBILITY WeightsParserFactory { | class GE_FUNC_VISIBILITY WeightsParserFactory { | ||||
| @@ -115,7 +114,7 @@ class GE_FUNC_VISIBILITY WeightsParserFactory { | |||||
| class GE_FUNC_VISIBILITY WeightsParserRegisterar { | class GE_FUNC_VISIBILITY WeightsParserRegisterar { | ||||
| public: | public: | ||||
| WeightsParserRegisterar(const domi::FrameworkType type, WEIGHTS_PARSER_CREATOR_FUN fun) { | |||||
| WeightsParserRegisterar(const domi::FrameworkType type, WEIGHTS_PARSER_CREATOR_FUN const fun) noexcept { | |||||
| WeightsParserFactory::Instance()->RegisterCreator(type, fun); | WeightsParserFactory::Instance()->RegisterCreator(type, fun); | ||||
| } | } | ||||
| ~WeightsParserRegisterar() {} | ~WeightsParserRegisterar() {} | ||||
| @@ -133,6 +132,12 @@ class GE_FUNC_VISIBILITY WeightsParserRegisterar { | |||||
| return std::shared_ptr<WeightsParser>(ptr); \ | return std::shared_ptr<WeightsParser>(ptr); \ | ||||
| } \ | } \ | ||||
| WeightsParserRegisterar g_##type##_Weights_Parser_Creator(type, Creator_##type##_Weights_Parser) | WeightsParserRegisterar g_##type##_Weights_Parser_Creator(type, Creator_##type##_Weights_Parser) | ||||
| }; // namespace domi | |||||
| class GE_FUNC_VISIBILITY OpRegTbeParserFactory { | |||||
| public: | |||||
| static OpRegTbeParserFactory *Instance(); | |||||
| void Finalize(const domi::OpRegistrationData ®_data); | |||||
| }; | |||||
| } // namespace domi | |||||
| #endif // INC_FRAMEWORK_OMG_PARSER_PARSER_FACTORY_H_ | #endif // INC_FRAMEWORK_OMG_PARSER_PARSER_FACTORY_H_ | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -21,7 +21,6 @@ | |||||
| #include <memory> | #include <memory> | ||||
| #include <string> | #include <string> | ||||
| #include <unordered_map> | #include <unordered_map> | ||||
| #include <utility> | |||||
| #include <vector> | #include <vector> | ||||
| #include "external/register/register_fmk_types.h" | #include "external/register/register_fmk_types.h" | ||||
| #include "external/register/register_types.h" | #include "external/register/register_types.h" | ||||
| @@ -30,8 +29,8 @@ | |||||
| namespace ge { | namespace ge { | ||||
| struct ParserContext { | struct ParserContext { | ||||
| // format of the input specified by the command line | // format of the input specified by the command line | ||||
| std::unordered_map<std::string, domiTensorFormat_t> input_nodes_format_map; | |||||
| std::vector<domiTensorFormat_t> output_formats; | |||||
| std::unordered_map<std::string, domi::domiTensorFormat_t> input_nodes_format_map; | |||||
| std::vector<domi::domiTensorFormat_t> output_formats; | |||||
| // user-designate input dims | // user-designate input dims | ||||
| std::vector<std::pair<std::string, std::vector<int64_t>>> user_input_dims; | std::vector<std::pair<std::string, std::vector<int64_t>>> user_input_dims; | ||||
| std::map<std::string, std::vector<int64_t>> input_dims; | std::map<std::string, std::vector<int64_t>> input_dims; | ||||
| @@ -46,20 +45,20 @@ struct ParserContext { | |||||
| // operator | // operator | ||||
| std::map<std::string, std::vector<int32_t>> out_nodes_map; | std::map<std::string, std::vector<int32_t>> out_nodes_map; | ||||
| // save the output node of the network, value = topName, | // save the output node of the network, value = topName, | ||||
| // topName indicates the output name of the operator. | |||||
| std::vector<std::string> user_out_nodes_top_vec; | |||||
| // tensorName indicates the output name of the operator. | |||||
| std::vector<std::string> user_out_tensors; | |||||
| // net out nodes (where user_out_nodes or leaf nodes) | // net out nodes (where user_out_nodes or leaf nodes) | ||||
| std::vector<std::string> net_out_nodes; | std::vector<std::string> net_out_nodes; | ||||
| // net data nodes top names(only caffe has top) | |||||
| std::vector<std::string> data_top_names; | |||||
| // net out nodes top names(only caffe has top) | |||||
| std::vector<std::string> out_top_names; | |||||
| // net out nodes tensor names(caffe or onnx) | |||||
| std::vector<std::string> out_tensor_names; | |||||
| // net data nodes tensor names(caffe or onnx) | |||||
| std::vector<std::string> data_tensor_names; | |||||
| // Whether to use dynamic batch size or dynamic image size | // Whether to use dynamic batch size or dynamic image size | ||||
| bool is_dynamic_input = false; | bool is_dynamic_input = false; | ||||
| bool train_flag = false; | bool train_flag = false; | ||||
| domi::domiTensorFormat_t format = domi::DOMI_TENSOR_ND; | domi::domiTensorFormat_t format = domi::DOMI_TENSOR_ND; | ||||
| domi::FrameworkType type = domi::FRAMEWORK_RESERVED; | domi::FrameworkType type = domi::FRAMEWORK_RESERVED; | ||||
| RunMode run_mode = GEN_OM_MODEL; | |||||
| RunMode run_mode = RunMode::GEN_OM_MODEL; | |||||
| // save caffe custom proto path, used by caffe parse | // save caffe custom proto path, used by caffe parse | ||||
| std::string custom_proto_path; | std::string custom_proto_path; | ||||
| // save caffe proto path, used by caffe parse | // save caffe proto path, used by caffe parse | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -17,7 +17,7 @@ | |||||
| #ifndef PARSER_COMMON_TYPES_H_ | #ifndef PARSER_COMMON_TYPES_H_ | ||||
| #define PARSER_COMMON_TYPES_H_ | #define PARSER_COMMON_TYPES_H_ | ||||
| #include <stdint.h> | |||||
| #include <cstdint> | |||||
| #include <string> | #include <string> | ||||
| #include "register/register_types.h" | #include "register/register_types.h" | ||||
| @@ -133,6 +133,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *_IF; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *STATELESSIF; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *STATELESSIF; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *IF; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *IF; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *CASE; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *CASE; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *STATELESSCASE; | |||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *_WHILE; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *_WHILE; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *WHILE; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *WHILE; | ||||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *STATELESSWHILE; | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const char *STATELESSWHILE; | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -17,13 +17,12 @@ | |||||
| #ifndef INC_FRAMEWORK_OMG_PARSER_WEIGHTS_PARSER_H_ | #ifndef INC_FRAMEWORK_OMG_PARSER_WEIGHTS_PARSER_H_ | ||||
| #define INC_FRAMEWORK_OMG_PARSER_WEIGHTS_PARSER_H_ | #define INC_FRAMEWORK_OMG_PARSER_WEIGHTS_PARSER_H_ | ||||
| #include "external/register/register_error_codes.h" | |||||
| #include "graph/graph.h" | #include "graph/graph.h" | ||||
| #include "graph/attr_value.h" | #include "graph/attr_value.h" | ||||
| #include "graph/compute_graph.h" | #include "graph/compute_graph.h" | ||||
| #include "graph/ge_tensor.h" | #include "graph/ge_tensor.h" | ||||
| #include "graph/op_desc.h" | #include "graph/op_desc.h" | ||||
| #include "graph/operator.h" | |||||
| #include "graph/range_vistor.h" | |||||
| #include "graph/utils/attr_utils.h" | #include "graph/utils/attr_utils.h" | ||||
| #include "graph/utils/op_desc_utils.h" | #include "graph/utils/op_desc_utils.h" | ||||
| #include "graph/utils/tensor_utils.h" | #include "graph/utils/tensor_utils.h" | ||||
| @@ -68,6 +67,17 @@ class GE_FUNC_VISIBILITY WeightsParser { | |||||
| * @author | * @author | ||||
| */ | */ | ||||
| virtual Status ParseFromMemory(const char *input, uint32_t lengt, ge::ComputeGraphPtr &graph) = 0; | virtual Status ParseFromMemory(const char *input, uint32_t lengt, ge::ComputeGraphPtr &graph) = 0; | ||||
| virtual bool HasError() { | |||||
| return false; | |||||
| } | |||||
| virtual Status Save(const std::string &file) { | |||||
| (void)file; | |||||
| return SUCCESS; | |||||
| } | |||||
| virtual void Clear() {} | |||||
| }; | }; | ||||
| } // namespace domi | } // namespace domi | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -18,12 +18,9 @@ | |||||
| #define INC_FRAMEWORK_OMG_VERSION_H_ | #define INC_FRAMEWORK_OMG_VERSION_H_ | ||||
| #include <memory> | #include <memory> | ||||
| #include <set> | |||||
| #include <string> | |||||
| #include <vector> | |||||
| #include "common/debug/log.h" | |||||
| #include "common/string_util.h" | |||||
| #include "framework/common/debug/log.h" | |||||
| #include "framework/common/string_util.h" | |||||
| #include "framework/common/debug/ge_log.h" | #include "framework/common/debug/ge_log.h" | ||||
| namespace ge { | namespace ge { | ||||
| @@ -33,8 +30,8 @@ class GE_FUNC_VISIBILITY PlatformVersionManager { | |||||
| ~PlatformVersionManager() = delete; | ~PlatformVersionManager() = delete; | ||||
| static Status GetPlatformVersion(std::string &ver) { | static Status GetPlatformVersion(std::string &ver) { | ||||
| ver = "1.11.z"; | ver = "1.11.z"; | ||||
| std::vector<std::string> version_splits = StringUtils::Split(ver, '.'); | |||||
| GE_IF_BOOL_EXEC(version_splits.size() < 3, GELOGW("Read platform version error!"); return FAILED;); | |||||
| const std::vector<std::string> version_splits = StringUtils::Split(ver, '.'); | |||||
| GE_IF_BOOL_EXEC(version_splits.size() < 3U, GELOGW("Read platform version error!"); return FAILED;); | |||||
| GELOGI("Read current platform version: %s.", ver.c_str()); | GELOGI("Read current platform version: %s.", ver.c_str()); | ||||
| return SUCCESS; | return SUCCESS; | ||||
| @@ -0,0 +1,128 @@ | |||||
| /** | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved. | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_FRAMEWORK_PNE_MODEL_H_ | |||||
| #define INC_FRAMEWORK_PNE_MODEL_H_ | |||||
| #include <map> | |||||
| #include <string> | |||||
| #include <vector> | |||||
| #include "graph/compute_graph.h" | |||||
| #include "framework/common/debug/log.h" | |||||
| #include "framework/common/ge_inner_error_codes.h" | |||||
| #include "framework/common/ge_types.h" | |||||
| #include "framework/engine/dnnengine.h" | |||||
| #include "external/ge/ge_ir_build.h" | |||||
| namespace ge { | |||||
| const std::string PNE_ID_NPU = "NPU"; | |||||
| const std::string PNE_ID_CPU = "HOST_CPU"; | |||||
| struct ModelRelation; | |||||
| class PneModel { | |||||
| public: | |||||
| PneModel() = default; | |||||
| explicit PneModel(const ComputeGraphPtr &root_graph) : root_graph_(root_graph){}; | |||||
| virtual ~PneModel() = default; | |||||
| PneModel(const PneModel &other) = delete; | |||||
| PneModel &operator=(const PneModel &other) = delete; | |||||
| public: | |||||
| inline Status AddSubModel(const shared_ptr<PneModel> &submodel, std::string type = "") { | |||||
| if (submodel == nullptr) { | |||||
| GELOGE(INTERNAL_ERROR, "submodel is nullptr, type = %s", type.c_str()); | |||||
| return INTERNAL_ERROR; | |||||
| } | |||||
| submodel->SetModelType(type); | |||||
| if (!submodels_.emplace(submodel->GetModelName(), submodel).second) { | |||||
| GELOGE(INTERNAL_ERROR, "submodel already exist, name = %s, type = %s", submodel->GetModelName().c_str(), | |||||
| type.c_str()); | |||||
| return INTERNAL_ERROR; | |||||
| } | |||||
| return SUCCESS; | |||||
| } | |||||
| inline const std::shared_ptr<PneModel> GetSubmodel(const std::string &name) const { | |||||
| const auto &it = submodels_.find(name); | |||||
| if (it == submodels_.end()) { | |||||
| return nullptr; | |||||
| } | |||||
| return it->second; | |||||
| } | |||||
| inline const std::map<std::string, std::shared_ptr<PneModel>> &GetSubmodels() const { | |||||
| return submodels_; | |||||
| } | |||||
| inline void SetModelType(const std::string &type) { | |||||
| model_type_ = type; | |||||
| } | |||||
| inline const std::string &GetModelType() const { | |||||
| return model_type_; | |||||
| } | |||||
| inline void SetModelName(const std::string &model_name) { | |||||
| model_name_ = model_name; | |||||
| } | |||||
| inline const std::string &GetModelName() const { | |||||
| return model_name_; | |||||
| } | |||||
| inline void SetRootGraph(const ComputeGraphPtr graph) { | |||||
| root_graph_ = graph; | |||||
| } | |||||
| inline const ComputeGraphPtr &GetRootGraph() const { | |||||
| return root_graph_; | |||||
| } | |||||
| inline void SetModelRelation(std::shared_ptr<ModelRelation> model_relation) { | |||||
| model_relation_ = std::move(model_relation); | |||||
| } | |||||
| inline const std::shared_ptr<ModelRelation> GetModelRelation() const { | |||||
| return model_relation_; | |||||
| } | |||||
| public: | |||||
| virtual Status SerializeModel(ModelBufferData &model_buff) = 0; | |||||
| virtual Status UnSerializeModel(const ModelBufferData &model_buff) = 0; | |||||
| virtual void SetModelId(const uint32_t model_id) { | |||||
| model_id_ = model_id; | |||||
| } | |||||
| virtual uint32_t GetModelId() const { | |||||
| return model_id_; | |||||
| } | |||||
| private: | |||||
| std::map<std::string, std::shared_ptr<PneModel>> submodels_; | |||||
| std::shared_ptr<ModelRelation> model_relation_; | |||||
| ComputeGraphPtr root_graph_ = nullptr; | |||||
| std::string model_name_; | |||||
| std::string model_type_; | |||||
| uint32_t model_id_ = INVALID_MODEL_ID; | |||||
| }; | |||||
| using PneModelPtr = std::shared_ptr<PneModel>; | |||||
| } // namespace ge | |||||
| #endif // INC_FRAMEWORK_PNE_MODEL_H_ | |||||
| @@ -0,0 +1,67 @@ | |||||
| /** | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved. | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef INC_FRAMEWORK_PROCESS_NODE_ENGINE_H_ | |||||
| #define INC_FRAMEWORK_PROCESS_NODE_ENGINE_H_ | |||||
| #include <map> | |||||
| #include <string> | |||||
| #include <vector> | |||||
| #include "framework/common/ge_inner_error_codes.h" | |||||
| #include "framework/common/ge_types.h" | |||||
| #include "graph/manager/graph_manager_utils.h" | |||||
| #include "framework/pne/pne_model.h" | |||||
| namespace ge { | |||||
| class ProcessNodeEngineImpl { | |||||
| public: | |||||
| virtual Status OptimizeGraph(const std::vector<GeTensor> &inputs, ComputeGraphPtr &compute_graph) = 0; | |||||
| virtual Status BuildGraph(ComputeGraphPtr &compute_graph, PneModelPtr &model) = 0; | |||||
| }; | |||||
| using ProcessNodeEngineImplPtr = std::shared_ptr<ProcessNodeEngineImpl>; | |||||
| class ProcessNodeEngine { | |||||
| public: | |||||
| ProcessNodeEngine() = default; | |||||
| virtual ~ProcessNodeEngine() = default; | |||||
| ProcessNodeEngine(const ProcessNodeEngine &other) = delete; | |||||
| ProcessNodeEngine &operator=(const ProcessNodeEngine &other) = delete; | |||||
| public: | |||||
| virtual Status Initialize(const std::map<std::string, std::string> &options) = 0; | |||||
| virtual Status Finalize() = 0; | |||||
| virtual Status OptimizeGraph(const std::vector<GeTensor> &inputs, ComputeGraphPtr &compute_graph) = 0; | |||||
| virtual Status BuildGraph(ComputeGraphPtr &compute_graph, PneModelPtr &model) = 0; | |||||
| virtual const std::string &GetEngineName(const ge::NodePtr &node_ptr = nullptr) const = 0; | |||||
| virtual void SetImpl(ProcessNodeEngineImplPtr impl) = 0; | |||||
| protected: | |||||
| std::string engine_id_; | |||||
| ProcessNodeEngineImplPtr impl_ = nullptr; | |||||
| }; | |||||
| using ProcessNodeEnginePtr = std::shared_ptr<ProcessNodeEngine>; | |||||
| } // namespace ge | |||||
| #endif // INC_FRAMEWORK_PROCESS_NODE_ENGINE_H_ | |||||
| @@ -0,0 +1,27 @@ | |||||
| /** | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved. | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef AIR_CXX_INC_FRAMEWORK_RUNTIME_GERT_API_H_ | |||||
| #define AIR_CXX_INC_FRAMEWORK_RUNTIME_GERT_API_H_ | |||||
| #include "model_v2_executor.h" | |||||
| #include "common/ge_types.h" | |||||
| namespace gert { | |||||
| std::unique_ptr<ModelV2Executor> LoadExecutorFromFile(const char *file_path, ge::graphStatus &error_code); | |||||
| std::unique_ptr<ModelV2Executor> LoadExecutorFromModelData(const ge::ModelData &model_data, | |||||
| ge::graphStatus &error_code); | |||||
| } // namespace gert | |||||
| #endif // AIR_CXX_INC_FRAMEWORK_RUNTIME_GERT_API_H_ | |||||
| @@ -0,0 +1,94 @@ | |||||
| /** | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved. | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef AIR_CXX_INC_FRAMEWORK_RUNTIME_MODEL_DESC_H_ | |||||
| #define AIR_CXX_INC_FRAMEWORK_RUNTIME_MODEL_DESC_H_ | |||||
| #include "common/ge_types.h" | |||||
| #include "exe_graph/runtime/shape.h" | |||||
| #include "exe_graph/runtime/continuous_vector.h" | |||||
| #include "exe_graph/runtime/storage_format.h" | |||||
| #include "exe_graph/runtime/storage_shape.h" | |||||
| namespace gert { | |||||
| class ShapeRange { | |||||
| public: | |||||
| const Shape &GetMin() const; | |||||
| const Shape &GetMax() const; | |||||
| Shape &MutableMin(); | |||||
| Shape &MutableMax(); | |||||
| private: | |||||
| Shape min_; | |||||
| Shape max_; | |||||
| }; | |||||
| class ModelIoDesc { | |||||
| public: | |||||
| const char *GetName() const; | |||||
| int32_t GetDataType() const; | |||||
| ge::Format GetStorageFormat() const; | |||||
| ge::Format GetOriginFormat() const; | |||||
| int64_t GetSize() const; | |||||
| const Shape &GetStorageShape() const; | |||||
| const Shape &GetOriginShape() const; | |||||
| const ShapeRange &GetOriginShapeRange() const; | |||||
| const ShapeRange &GetStorageShapeRange() const; | |||||
| void SetName(const char *name); | |||||
| void SetDataType(int32_t data_type); | |||||
| void SetStorageFormat(ge::Format format); | |||||
| void SetOriginFormat(ge::Format format); | |||||
| Shape &MutableStorageShape(); | |||||
| Shape &MutableOriginShape(); | |||||
| ShapeRange &MutableOriginShapeRange(); | |||||
| ShapeRange &MutableStorageShapeRange(); | |||||
| private: | |||||
| const char *name_; | |||||
| int32_t data_type_; | |||||
| StorageFormat format_; | |||||
| StorageShape shape_; | |||||
| ShapeRange storage_shape_range_; | |||||
| ShapeRange origin_shape_range_; | |||||
| }; | |||||
| class ModelDesc { | |||||
| public: | |||||
| static size_t CalcSize(size_t input_num, size_t output_num); | |||||
| const ModelIoDesc *GetInputDesc(size_t index) const; | |||||
| const ModelIoDesc *GetAllInputsDesc(size_t &input_num) const; | |||||
| const ModelIoDesc *GetOutputDesc(size_t index) const; | |||||
| const ModelIoDesc *GetAllOutputsDesc(size_t &output_num) const; | |||||
| ModelIoDesc *MutableInputDesc(size_t index); | |||||
| ModelIoDesc *MutableOutputDesc(size_t index); | |||||
| ModelIoDesc *AllMutableIoDesc(size_t &input_num, size_t &output_num); | |||||
| void SetInputNum(size_t input_num); | |||||
| void SetOutputNum(size_t output_num); | |||||
| ge::graphStatus GetDynamicBatchInfo(std::vector<std::vector<int64_t>> &batch_info, int32_t &dynamic_type) const; | |||||
| ge::graphStatus GetUserDesignateShapeOrder(std::vector<std::string> &user_designate_shape_order) const; | |||||
| ge::graphStatus GetModelAttrs(std::vector<std::string> &attrs) const; | |||||
| private: | |||||
| size_t input_num_; | |||||
| size_t output_num_; | |||||
| ContinuousVector model_io_descs_; | |||||
| }; | |||||
| } // namespace gert | |||||
| #endif // AIR_CXX_INC_FRAMEWORK_RUNTIME_MODEL_DESC_H_ | |||||
| @@ -0,0 +1,142 @@ | |||||
| /** | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved. | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| #ifndef AIR_CXX_RUNTIME_V2_CORE_MODEL_V_2_EXECUTOR_H_ | |||||
| #define AIR_CXX_RUNTIME_V2_CORE_MODEL_V_2_EXECUTOR_H_ | |||||
| #include <memory> | |||||
| #include "graph/compute_graph.h" | |||||
| #include "graph/ge_error_codes.h" | |||||
| #include "model_desc.h" | |||||
| #include "runtime/stream.h" | |||||
| #include "exe_graph/runtime/tensor.h" | |||||
| namespace gert { | |||||
| enum SubExeGraphType { kInitExeGraph, kMainExeGraph, kDeInitExeGraph, kSubExeGraphTypeEnd }; | |||||
| static constexpr char *kSubExeGraphTypeStrs[kSubExeGraphTypeEnd] = {(char *)"Init", (char *)"Main", (char *)"DeInit"}; | |||||
| inline const char *GetSubExeGraphTypeStr(SubExeGraphType type) { | |||||
| return kSubExeGraphTypeStrs[type]; | |||||
| } | |||||
| class ResourceGuard { | |||||
| public: | |||||
| void *ResetExecutionData(std::unique_ptr<uint8_t[]> execution_data); | |||||
| void ResetAnyValue(std::unique_ptr<uint8_t[]> any_values, size_t count); | |||||
| void PushNode(void *node); | |||||
| void PushWatcher(void *watcher); | |||||
| void *ResetNodesArray(std::unique_ptr<uint8_t[]> nodes_array); | |||||
| void *ResetStartNodesArray(std::unique_ptr<uint8_t[]> start_nodes_array); | |||||
| void *ResetNodesIndgreeArray(std::unique_ptr<uint8_t[]> nodes_indgree_array); | |||||
| void *ResetNodesWaitIndgreeArray(std::unique_ptr<uint8_t[]> nodes_indgree_array); | |||||
| void *ResetInputsArray(std::unique_ptr<uint8_t[]> inputs_array); | |||||
| void *ResetOutputsArray(std::unique_ptr<uint8_t[]> outputs_array); | |||||
| void *ResetWatchersArray(std::unique_ptr<uint8_t[]> watchers_array); | |||||
| void *ResetReadyQueue(void *ready_queue); | |||||
| void *ResetBuffer(std::unique_ptr<uint8_t[]> buffer); | |||||
| void *ResetComputeNodeInfo(std::unique_ptr<uint8_t[]> compute_node_info); | |||||
| void *ResetKernelExtendInfo(std::unique_ptr<uint8_t[]> kernel_extend_info); | |||||
| void *ResetModelDesc(std::unique_ptr<uint8_t[]> model_desc); | |||||
| ~ResourceGuard(); | |||||
| private: | |||||
| std::unique_ptr<uint8_t[]> execution_data_holder_; | |||||
| size_t any_values_num_; | |||||
| std::unique_ptr<uint8_t[]> any_values_guard_; | |||||
| std::vector<std::unique_ptr<void, decltype(&free)>> nodes_guarder_; | |||||
| std::vector<std::unique_ptr<void, decltype(&free)>> watchers_guarder_; | |||||
| std::unique_ptr<uint8_t[]> continuous_buffer_guarder_; | |||||
| std::unique_ptr<uint8_t[]> buffer_guarder_; | |||||
| std::unique_ptr<uint8_t[]> compute_node_info_guarder_; | |||||
| std::unique_ptr<uint8_t[]> kernel_extend_info_guarder_; | |||||
| std::unique_ptr<uint8_t[]> model_desc_guarder_; | |||||
| std::unique_ptr<uint8_t[]> nodes_array_guarder_; | |||||
| std::unique_ptr<uint8_t[]> start_nodes_array_guarder_; | |||||
| std::unique_ptr<uint8_t[]> nodes_indgree_array_guarder_; | |||||
| std::unique_ptr<uint8_t[]> nodes_wait_indgree_array_guarder_; | |||||
| std::unique_ptr<uint8_t[]> inputs_array_guarder_; | |||||
| std::unique_ptr<uint8_t[]> outputs_array_guarder_; | |||||
| std::unique_ptr<uint8_t[]> watchers_array_guarder_; | |||||
| std::unique_ptr<void, decltype(&free)> ready_queue_guarder_{nullptr, nullptr}; | |||||
| }; | |||||
| struct ModelExecuteArg { | |||||
| rtStream_t stream; | |||||
| }; | |||||
| static_assert(std::is_standard_layout<ModelExecuteArg>::value, "The class ModelExecuteArg must be a POD"); | |||||
| class ExeGraphExecutor { | |||||
| public: | |||||
| // todo unload时释放anyvalue资源 | |||||
| ge::graphStatus Load() { | |||||
| return ge::GRAPH_SUCCESS; | |||||
| } | |||||
| ge::graphStatus UnLoad() { | |||||
| return ge::GRAPH_SUCCESS; | |||||
| } | |||||
| /** | |||||
| * 设置图执行的输入/输出,需要注意的是,使用者需要自己保证inputs/outputs刷新完全!!! | |||||
| */ | |||||
| ge::graphStatus SpecifyInputs(void **inputs, size_t start, size_t num); | |||||
| ge::graphStatus SpecifyOutputs(void **outputs, size_t num); | |||||
| ge::graphStatus Execute(); | |||||
| const void *GetExecutionData() const { | |||||
| return execution_data_; | |||||
| } | |||||
| ResourceGuard &GetResourceGuard(); | |||||
| void *SetExecutionData(std::unique_ptr<uint8_t[]> execution_data); | |||||
| private: | |||||
| friend class ModelV2ExecutorTestHelper; | |||||
| void *execution_data_; | |||||
| ResourceGuard resource_guard_; | |||||
| }; | |||||
| class ModelV2Executor { | |||||
| public: | |||||
| static std::unique_ptr<ModelV2Executor> Create(const ge::ComputeGraphPtr &root_graph); | |||||
| ge::graphStatus Load(); | |||||
| ge::graphStatus Execute(const ModelExecuteArg &arg, Tensor **inputs, size_t input_num, Tensor **outputs, | |||||
| size_t output_num); | |||||
| ge::graphStatus ExecuteSync(Tensor **inputs, size_t input_num, Tensor **outputs, size_t output_num); | |||||
| ge::graphStatus UnLoad(); | |||||
| const ModelDesc &GetModelDesc() const; | |||||
| void SetModelDesc(ModelDesc *model_desc); | |||||
| ModelV2Executor(const ModelV2Executor &) = delete; | |||||
| ModelV2Executor(ModelV2Executor &&) = delete; | |||||
| ModelV2Executor &operator=(const ModelV2Executor &) = delete; | |||||
| ModelV2Executor &operator=(ModelV2Executor &&) = delete; | |||||
| private: | |||||
| friend class ModelV2ExecutorBuilder; | |||||
| friend class ModelV2ExecutorTestHelper; | |||||
| ModelV2Executor() = default; | |||||
| private: | |||||
| std::array<ExeGraphExecutor, kSubExeGraphTypeEnd> graphs_; | |||||
| ResourceGuard resource_guard_; | |||||
| ModelDesc *model_desc_ = nullptr; | |||||
| rtStream_t default_stream_ = nullptr; | |||||
| }; | |||||
| } // namespace gert | |||||
| #endif // AIR_CXX_RUNTIME_V2_CORE_MODEL_V_2_EXECUTOR_H_ | |||||
| @@ -1 +1 @@ | |||||
| Subproject commit a725349b65aef2940555af2ddb7b9461fbe0d5fd | |||||
| Subproject commit e4d1efc47349f13af1bcdb53ba408118779fc27e | |||||
| @@ -0,0 +1,107 @@ | |||||
| #!/bin/bash | |||||
| # Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| # | |||||
| # Licensed 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. | |||||
| # ============================================================================ | |||||
| set -e | |||||
| CLANG_FORMAT=$(which clang-format) || (echo "Please install 'clang-format' tool first"; exit 1) | |||||
| version=$("${CLANG_FORMAT}" --version | sed -n "s/.*\ \([0-9]*\)\.[0-9]*\.[0-9]*.*/\1/p") | |||||
| if [[ "${version}" -lt "8" ]]; then | |||||
| echo "clang-format's version must be at least 8.0.0" | |||||
| exit 1 | |||||
| fi | |||||
| CURRENT_PATH=$(pwd) | |||||
| SCRIPTS_PATH=$(dirname "$0") | |||||
| echo "CURRENT_PATH=${CURRENT_PATH}" | |||||
| echo "SCRIPTS_PATH=${SCRIPTS_PATH}" | |||||
| # print usage message | |||||
| function usage() | |||||
| { | |||||
| echo "Format the specified source files to conform the code style." | |||||
| echo "Usage:" | |||||
| echo "bash $0 [-a] [-c] [-l] [-h]" | |||||
| echo "e.g. $0 -c" | |||||
| echo "" | |||||
| echo "Options:" | |||||
| echo " -a format of all files" | |||||
| echo " -c format of the files changed compared to last commit, default case" | |||||
| echo " -l format of the files changed in last commit" | |||||
| echo " -h Print usage" | |||||
| } | |||||
| # check and set options | |||||
| function checkopts() | |||||
| { | |||||
| # init variable | |||||
| mode="changed" # default format changed files | |||||
| # Process the options | |||||
| while getopts 'aclh' opt | |||||
| do | |||||
| case "${opt}" in | |||||
| a) | |||||
| mode="all" | |||||
| ;; | |||||
| c) | |||||
| mode="changed" | |||||
| ;; | |||||
| l) | |||||
| mode="lastcommit" | |||||
| ;; | |||||
| h) | |||||
| usage | |||||
| exit 0 | |||||
| ;; | |||||
| *) | |||||
| echo "Unknown option ${opt}!" | |||||
| usage | |||||
| exit 1 | |||||
| esac | |||||
| done | |||||
| } | |||||
| # init variable | |||||
| # check options | |||||
| checkopts "$@" | |||||
| # switch to project root path, which contains clang-format config file '.clang-format' | |||||
| cd "${SCRIPTS_PATH}/.." || exit 1 | |||||
| FMT_FILE_LIST='__format_files_list__' | |||||
| if [[ "X${mode}" == "Xall" ]]; then | |||||
| find src -type f -name "*" | grep "\.h$\|\.cc$" > "${FMT_FILE_LIST}" || true | |||||
| find inc -type f -name "*" | grep "\.h$\|\.cc$" >> "${FMT_FILE_LIST}" || true | |||||
| elif [[ "X${mode}" == "Xchanged" ]]; then | |||||
| # --diff-filter=ACMRTUXB will ignore deleted files in commit | |||||
| git diff --diff-filter=ACMRTUXB --name-only | grep "^inc\|^src" | grep "\.h$\|\.cc$" >> "${FMT_FILE_LIST}" || true | |||||
| else # "X${mode}" == "Xlastcommit" | |||||
| git diff --diff-filter=ACMRTUXB --name-only HEAD~ HEAD | grep "^inc\|^src" | grep "\.h$\|\.cc$" > "${FMT_FILE_LIST}" || true | |||||
| fi | |||||
| while read line; do | |||||
| if [ -f "${line}" ]; then | |||||
| ${CLANG_FORMAT} -i "${line}" | |||||
| fi | |||||
| done < "${FMT_FILE_LIST}" | |||||
| rm "${FMT_FILE_LIST}" | |||||
| cd "${CURRENT_PATH}" || exit 1 | |||||
| echo "Specified cpp source files have been format successfully." | |||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved. | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -17,6 +17,7 @@ | |||||
| #ifndef AICPU_OP_TYPE_LIST_H_ | #ifndef AICPU_OP_TYPE_LIST_H_ | ||||
| #define AICPU_OP_TYPE_LIST_H_ | #define AICPU_OP_TYPE_LIST_H_ | ||||
| extern "C" { | |||||
| enum OpKernelType { | enum OpKernelType { | ||||
| TF_KERNEL, | TF_KERNEL, | ||||
| CPU_KERNEL | CPU_KERNEL | ||||
| @@ -29,19 +30,13 @@ enum ReturnCode { | |||||
| }; | }; | ||||
| #pragma pack(push, 1) | #pragma pack(push, 1) | ||||
| //One byte alignment | |||||
| // One byte alignment | |||||
| struct SysOpInfo { | struct SysOpInfo { | ||||
| uint64_t opLen; | uint64_t opLen; | ||||
| uint64_t opType; | uint64_t opType; | ||||
| OpKernelType kernelsType; | OpKernelType kernelsType; | ||||
| }; | }; | ||||
| struct OpParamInfo { | |||||
| uint64_t num; | |||||
| uint64_t dtypeList; | |||||
| uint64_t formatList; | |||||
| }; | |||||
| struct SysOpCheckInfo { | struct SysOpCheckInfo { | ||||
| uint64_t opListNum; | uint64_t opListNum; | ||||
| uint64_t offSetLen; | uint64_t offSetLen; | ||||
| @@ -57,4 +52,6 @@ struct SysOpCheckResp { | |||||
| uint64_t opParamInfoList; | uint64_t opParamInfoList; | ||||
| }; | }; | ||||
| #pragma pack(pop) | #pragma pack(pop) | ||||
| } | |||||
| #endif // AICPU_OP_TYPE_LIST_H_ | #endif // AICPU_OP_TYPE_LIST_H_ | ||||
| @@ -14,13 +14,15 @@ | |||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #ifndef AICPU_TASK_STRUCT_H_ | |||||
| #define AICPU_TASK_STRUCT_H_ | |||||
| #ifndef AICPU_TASK_STRUCT_H | |||||
| #define AICPU_TASK_STRUCT_H | |||||
| #include <cstdint> | #include <cstdint> | ||||
| namespace aicpu { | namespace aicpu { | ||||
| using char_t = char; | |||||
| #pragma pack(push, 1) | #pragma pack(push, 1) | ||||
| struct AicpuParamHead | struct AicpuParamHead | ||||
| { | { | ||||
| @@ -29,9 +31,76 @@ struct AicpuParamHead | |||||
| uint32_t extInfoLength; // extInfo struct Length | uint32_t extInfoLength; // extInfo struct Length | ||||
| uint64_t extInfoAddr; // extInfo address | uint64_t extInfoAddr; // extInfo address | ||||
| }; | }; | ||||
| enum class AicpuConfigMsgType { | |||||
| AICPU_CONFIG_MSG_TYPE_BUF_FREE = 0, /* free buf */ | |||||
| AICPU_CONFIG_MSG_TYPE_BUF_RESET = 1, /* reset buf */ | |||||
| AICPU_CONFIG_MSG_TYPE_BUF_SET_ADDR = 2, /* set buf addr to aicpu */ | |||||
| }; | |||||
| enum class AicpuErrMsgType { | |||||
| ERR_MSG_TYPE_NULL = 0, | |||||
| ERR_MSG_TYPE_AICORE = 1, | |||||
| ERR_MSG_TYPE_AICPU = 2, | |||||
| }; | |||||
| enum class AicpuExtInfoMsgType { | |||||
| EXT_MODEL_ID_MSG_TYPE = 0, | |||||
| }; | |||||
| struct AicpuConfigMsg { | |||||
| uint8_t msgType; | |||||
| uint8_t reserved1; | |||||
| uint16_t bufLen; | |||||
| uint32_t offset; | |||||
| uint64_t bufAddr; | |||||
| uint32_t tsId; | |||||
| uint32_t reserved2; | |||||
| }; | |||||
| struct AicpuModelIdInfo { | |||||
| uint32_t modelId; | |||||
| uint32_t extendModelId; | |||||
| uint32_t extendInfo[13]; | |||||
| }; | |||||
| // 64 bytes | |||||
| struct AicpuExtendInfo { | |||||
| uint8_t msgType; | |||||
| uint8_t version; | |||||
| uint8_t reserved[2]; | |||||
| union { | |||||
| AicpuModelIdInfo modelIdMap; | |||||
| }; | |||||
| }; | |||||
| struct AicoreErrMsgInfo { | |||||
| uint8_t errType; | |||||
| uint8_t version; | |||||
| uint8_t reserved1[2]; /* reserved1, 4 byte alignment */ | |||||
| uint32_t errorCode; | |||||
| uint32_t modelId; | |||||
| uint32_t taskId; | |||||
| uint32_t streamId; | |||||
| uint64_t transactionId; | |||||
| uint8_t reserved2[228]; /* the total byte is 256, reserved2 len = 256 - other lens */ | |||||
| }; | |||||
| struct AicpuErrMsgInfo { | |||||
| uint8_t errType; | |||||
| uint8_t version; | |||||
| uint8_t reserved1[2]; /* reserved1, 4 byte alignment */ | |||||
| uint32_t errorCode; | |||||
| uint32_t modelId; | |||||
| uint32_t streamId; | |||||
| uint64_t transactionId; | |||||
| char_t opName[64]; /* op name str */ | |||||
| char_t errDesc[128]; /* err msg desc info */ | |||||
| uint8_t reserved2[40]; /* the total byte is 256, reserved2 len = 256 - other lens */ | |||||
| }; | |||||
| #pragma pack(pop) | #pragma pack(pop) | ||||
| } // namespace aicpu | } // namespace aicpu | ||||
| #endif // AICPU_TASK_STRUCT_H_ | |||||
| #endif // AICPU_TASK_STRUCT_H | |||||
| @@ -21,7 +21,7 @@ | |||||
| namespace aicpu { | namespace aicpu { | ||||
| namespace FWKAdapter { | namespace FWKAdapter { | ||||
| using char_t = char; | |||||
| // API RETURN CODE | // API RETURN CODE | ||||
| enum FWKAdptAPIRetCode { | enum FWKAdptAPIRetCode { | ||||
| FWK_ADPT_SUCCESS = 0, // success | FWK_ADPT_SUCCESS = 0, // success | ||||
| @@ -63,6 +63,8 @@ enum FWKTaskExtInfoType { | |||||
| FWK_ADPT_EXT_BITMAP, | FWK_ADPT_EXT_BITMAP, | ||||
| FWK_ADPT_EXT_TOPIC_TYPE, | FWK_ADPT_EXT_TOPIC_TYPE, | ||||
| FWK_ADPT_EXT_ASYNCWAIT, | FWK_ADPT_EXT_ASYNCWAIT, | ||||
| FWK_ADPT_EXT_UNKNOWN_SHAPE_INPUT_INDEX, | |||||
| FWK_ADPT_EXT_UNKNOWN_SHAPE_OUTPUT_INDEX, | |||||
| FWK_ADPT_EXT_INVALID | FWK_ADPT_EXT_INVALID | ||||
| }; | }; | ||||
| @@ -113,7 +115,7 @@ struct StrFWKKernel { | |||||
| typedef StrFWKKernel FWKOperateParam; | typedef StrFWKKernel FWKOperateParam; | ||||
| // Extent info ShapeAndType | // Extent info ShapeAndType | ||||
| const uint32_t kMaxShapeDims = 8; | |||||
| const uint32_t kMaxShapeDims = 8U; | |||||
| #pragma pack(push, 1) | #pragma pack(push, 1) | ||||
| struct ShapeAndType { | struct ShapeAndType { | ||||
| int32_t type; | int32_t type; | ||||
| @@ -122,13 +124,13 @@ struct ShapeAndType { | |||||
| #pragma pack(pop) | #pragma pack(pop) | ||||
| // Extend info structure for extInfoAddr | // Extend info structure for extInfoAddr | ||||
| const uint32_t kExtInfoHeadSize = 8; | |||||
| const uint32_t kExtInfoHeadSize = 8U; | |||||
| #pragma pack(push, 1) | #pragma pack(push, 1) | ||||
| struct ExtInfo { | struct ExtInfo { | ||||
| int32_t infoType; // extend type | int32_t infoType; // extend type | ||||
| uint32_t infoLen; // length for infoMsg | uint32_t infoLen; // length for infoMsg | ||||
| char infoMsg[0]; // extend value | |||||
| char_t infoMsg[0]; // extend value | |||||
| }; | }; | ||||
| #pragma pack(pop) | #pragma pack(pop) | ||||
| @@ -143,9 +145,9 @@ struct ResultSummary { | |||||
| #pragma pack(push, 1) | #pragma pack(push, 1) | ||||
| struct AsyncWait { | struct AsyncWait { | ||||
| uint8_t waitType; // wait type, FWK_ADPT_WAIT_TYPE_EVENT: event wait | |||||
| uint32_t waitId; // wait id, GE refresh | |||||
| uint32_t timeOut; // reserved | |||||
| uint8_t waitType; // wait type, FWk_ADPT_WAIT_TPYE_EVENT: event wait | |||||
| uint32_t waitId; // wait id, GE refresh | |||||
| uint32_t timeOut; // reserved | |||||
| uint64_t reserved; | uint64_t reserved; | ||||
| }; | }; | ||||
| #pragma pack(pop) | #pragma pack(pop) | ||||
| @@ -27,15 +27,16 @@ namespace cce { | |||||
| #define CC_FUSION_OP_MAX 32 | #define CC_FUSION_OP_MAX 32 | ||||
| typedef enum tagccKernelType { | typedef enum tagccKernelType { | ||||
| CCE_AI_CORE = 0, /* cce aicore */ | |||||
| CCE_AI_CPU = 1, /* cce aicpu */ | |||||
| TE = 2, /* te operator*/ | |||||
| CUSTOMIZED = 3, /* customized operator */ | |||||
| TE_AI_CORE = 4, /* te aicore operator*/ | |||||
| TE_AI_CPU = 5, /* te aicpu operator */ | |||||
| AI_CPU = 6, /* aicpu */ | |||||
| CUST_AI_CPU = 7, /* custom aicpu*/ | |||||
| INVALID = 8, /* unknown kernel type */ | |||||
| CCE_AI_CORE = 0, /* cce aicore */ | |||||
| CCE_AI_CPU = 1, /* cce aicpu */ | |||||
| TE = 2, /* te operator*/ | |||||
| CUSTOMIZED = 3, /* customized operator */ | |||||
| TE_AI_CORE = 4, /* te aicore operator*/ | |||||
| TE_AI_CPU = 5, /* te aicpu operator */ | |||||
| AI_CPU = 6, /* aicpu */ | |||||
| CUST_AI_CPU = 7, /* custom aicpu*/ | |||||
| HOST_CPU = 8, /* host cpu */ | |||||
| INVALID = 10000 /* unknown kernel type */ | |||||
| } ccKernelType; | } ccKernelType; | ||||
| typedef struct tagOpContext { | typedef struct tagOpContext { | ||||
| @@ -0,0 +1,52 @@ | |||||
| /** | |||||
| * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. | |||||
| * | |||||
| * This program is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||||
| * | |||||
| * Description:interface. | |||||
| * Create: 2021-12-21 | |||||
| */ | |||||
| #ifndef AICPU_TYPE_DEF_H | |||||
| #define AICPU_TYPE_DEF_H | |||||
| #include <cstdint> | |||||
| #include <cstddef> | |||||
| #ifndef char_t | |||||
| typedef char char_t; | |||||
| #endif | |||||
| #ifndef float32_t | |||||
| typedef float float32_t; | |||||
| #endif | |||||
| #ifndef float64_t | |||||
| typedef double float64_t; | |||||
| #endif | |||||
| inline uint64_t PtrToValue(const void *ptr) | |||||
| { | |||||
| return static_cast<const uint64_t>(reinterpret_cast<const uintptr_t>(ptr)); | |||||
| } | |||||
| inline void *ValueToPtr(const uint64_t value) | |||||
| { | |||||
| return reinterpret_cast<void *>(static_cast<const uintptr_t>(value)); | |||||
| } | |||||
| template<typename TI, typename TO> | |||||
| inline TO *PtrToPtr(TI *ptr) | |||||
| { | |||||
| return reinterpret_cast<TO *>(ptr); | |||||
| } | |||||
| template<typename T> | |||||
| inline T *PtrAdd(T * const ptr, const size_t maxIdx, const size_t idx) | |||||
| { | |||||
| if ((ptr != nullptr) && (idx < maxIdx)) { | |||||
| return reinterpret_cast<T *>(ptr + idx); | |||||
| } | |||||
| return nullptr; | |||||
| } | |||||
| #endif // AICPU_TYPE_DEF_H | |||||
| @@ -39,6 +39,7 @@ static const int32_t ACL_ERROR_RT_INVALID_MEMORY_TYPE = 107016; // invali | |||||
| static const int32_t ACL_ERROR_RT_INVALID_HANDLE = 107017; // invalid handle | static const int32_t ACL_ERROR_RT_INVALID_HANDLE = 107017; // invalid handle | ||||
| static const int32_t ACL_ERROR_RT_INVALID_MALLOC_TYPE = 107018; // invalid malloc type | static const int32_t ACL_ERROR_RT_INVALID_MALLOC_TYPE = 107018; // invalid malloc type | ||||
| static const int32_t ACL_ERROR_RT_WAIT_TIMEOUT = 107019; // wait timeout | static const int32_t ACL_ERROR_RT_WAIT_TIMEOUT = 107019; // wait timeout | ||||
| static const int32_t ACL_ERROR_RT_TASK_TIMEOUT = 107020; // task timeout | |||||
| static const int32_t ACL_ERROR_RT_FEATURE_NOT_SUPPORT = 207000; // feature not support | static const int32_t ACL_ERROR_RT_FEATURE_NOT_SUPPORT = 207000; // feature not support | ||||
| static const int32_t ACL_ERROR_RT_MEMORY_ALLOCATION = 207001; // memory allocation error | static const int32_t ACL_ERROR_RT_MEMORY_ALLOCATION = 207001; // memory allocation error | ||||
| @@ -52,6 +53,12 @@ static const int32_t ACL_ERROR_RT_NO_STREAM_RESOURCE = 207008; // no str | |||||
| static const int32_t ACL_ERROR_RT_NO_NOTIFY_RESOURCE = 207009; // no notify resource | static const int32_t ACL_ERROR_RT_NO_NOTIFY_RESOURCE = 207009; // no notify resource | ||||
| static const int32_t ACL_ERROR_RT_NO_MODEL_RESOURCE = 207010; // no model resource | static const int32_t ACL_ERROR_RT_NO_MODEL_RESOURCE = 207010; // no model resource | ||||
| static const int32_t ACL_ERROR_RT_NO_CDQ_RESOURCE = 207011; // no cdq resource | static const int32_t ACL_ERROR_RT_NO_CDQ_RESOURCE = 207011; // no cdq resource | ||||
| static const int32_t ACL_ERROR_RT_OVER_LIMIT = 207012; // over limit | |||||
| static const int32_t ACL_ERROR_RT_QUEUE_EMPTY = 207013; // queue is empty | |||||
| static const int32_t ACL_ERROR_RT_QUEUE_FULL = 207014; // queue is full | |||||
| static const int32_t ACL_ERROR_RT_REPEATED_INIT = 207015; // repeated init | |||||
| static const int32_t ACL_ERROR_RT_AIVEC_OVER_FLOW = 207016; // aivec over flow | |||||
| static const int32_t ACL_ERROR_RT_OVER_FLOW = 207017; // common over flow | |||||
| static const int32_t ACL_ERROR_RT_INTERNAL_ERROR = 507000; // runtime internal error | static const int32_t ACL_ERROR_RT_INTERNAL_ERROR = 507000; // runtime internal error | ||||
| static const int32_t ACL_ERROR_RT_TS_ERROR = 507001; // ts internel error | static const int32_t ACL_ERROR_RT_TS_ERROR = 507001; // ts internel error | ||||
| @@ -91,6 +98,14 @@ static const int32_t ACL_ERROR_RT_VECTOR_CORE_TIMEOUT = 507034; // vector | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_EXCEPTION = 507035; // vector core exception | static const int32_t ACL_ERROR_RT_VECTOR_CORE_EXCEPTION = 507035; // vector core exception | ||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_TRAP_EXCEPTION = 507036; // vector core trap exception | static const int32_t ACL_ERROR_RT_VECTOR_CORE_TRAP_EXCEPTION = 507036; // vector core trap exception | ||||
| static const int32_t ACL_ERROR_RT_CDQ_BATCH_ABNORMAL = 507037; // cdq alloc batch abnormal | static const int32_t ACL_ERROR_RT_CDQ_BATCH_ABNORMAL = 507037; // cdq alloc batch abnormal | ||||
| static const int32_t ACL_ERROR_RT_DIE_MODE_CHANGE_ERROR = 507038; // can not change die mode | |||||
| static const int32_t ACL_ERROR_RT_DIE_SET_ERROR = 507039; // single die mode can not set die | |||||
| static const int32_t ACL_ERROR_RT_INVALID_DIEID = 507040; // invalid die id | |||||
| static const int32_t ACL_ERROR_RT_DIE_MODE_NOT_SET = 507041; // die mode not set | |||||
| static const int32_t ACL_ERROR_RT_AICORE_TRAP_READ_OVERFLOW = 507042; // aic trap read overflow | |||||
| static const int32_t ACL_ERROR_RT_AICORE_TRAP_WRITE_OVERFLOW = 507043; // aic trap write overflow | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_TRAP_READ_OVERFLOW = 507044; // aiv trap read overflow | |||||
| static const int32_t ACL_ERROR_RT_VECTOR_CORE_TRAP_WRITE_OVERFLOW = 507045; // aiv trap write overflow | |||||
| static const int32_t ACL_ERROR_RT_DRV_INTERNAL_ERROR = 507899; // drv internal error | static const int32_t ACL_ERROR_RT_DRV_INTERNAL_ERROR = 507899; // drv internal error | ||||
| static const int32_t ACL_ERROR_RT_AICPU_INTERNAL_ERROR = 507900; // aicpu internal error | static const int32_t ACL_ERROR_RT_AICPU_INTERNAL_ERROR = 507900; // aicpu internal error | ||||
| @@ -99,5 +114,4 @@ static const int32_t ACL_ERROR_RT_SOCKET_CLOSE = 507901; // hdc di | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| } | } | ||||
| #endif | #endif | ||||
| #endif // __INC_EXTERNEL_RT_ERROR_CODES_H__ | #endif // __INC_EXTERNEL_RT_ERROR_CODES_H__ | ||||
| @@ -86,6 +86,47 @@ enum OriginalGraphShapeType { | |||||
| SHAPE_RESERVED /**< reserved */ | SHAPE_RESERVED /**< reserved */ | ||||
| }; | }; | ||||
| enum HcclEventType { | |||||
| HCCL_EVENT_SEND_COMPLETION = 0, | |||||
| HCCL_EVENT_RECV_REQUEST, | |||||
| HCCL_EVENT_RECV_COMPLETION, | |||||
| HCCL_EVENT_CONGESTION_RELIEF, | |||||
| HCCL_EVENT_RESERVED /**< reserved */ | |||||
| }; | |||||
| const u32 TAG_MAX_LEN = 127; // 最大的tag 长度 | |||||
| using TagAttr = struct TagAttrDef { | |||||
| char name[TAG_MAX_LEN + 1]; // tag标识 | |||||
| // tag标识的接收数据,调用者是否会主动调用接收接口,0 = 否, 1 = 会(预留,暂不支持)。 | |||||
| // 对于activeRecv = 0,当接收侧收到数据或者发送请求时,主动通知调用者。 | |||||
| uint32_t activeRecv; | |||||
| uint32_t sendCredit; // 配置该tag允许inflight的send个数 | |||||
| uint32_t eventId; | |||||
| }; | |||||
| using HcclEventMsg = struct HcclEventMsgDef { | |||||
| HcclComm comm; | |||||
| u32 peerRank; | |||||
| u32 tag; | |||||
| // 0:HCCL_SEND_COMPLETION; 1:HCCL_RECV_COMPLETION; 2:HCCL_RECV_REQUEST; 3:HCCL_CONGESTION_RELIEF | |||||
| u32 hcclEventType; | |||||
| union { | |||||
| struct { | |||||
| u32 reserver; | |||||
| } sendCompletionItem; | |||||
| struct { | |||||
| u32 reserver; | |||||
| } recvRequestItem; | |||||
| struct { | |||||
| u32 reserver; | |||||
| } recvCompletionItem; | |||||
| struct CongestionReliefItem { | |||||
| u32 reserver; | |||||
| } congestionReliefItem; | |||||
| } desc; | |||||
| }; | |||||
| /** | /** | ||||
| * @brief stream handle. | * @brief stream handle. | ||||
| */ | */ | ||||
| @@ -124,29 +165,54 @@ struct HcomRemoteAccessAddrInfo { | |||||
| }; | }; | ||||
| struct HcomAllToAllVParams { | struct HcomAllToAllVParams { | ||||
| void *sendbuf; | |||||
| void *sendcounts; | |||||
| void *sdispls; | |||||
| HcclDataType sendtype; | |||||
| void *recvbuf; | |||||
| void *recvcounts; | |||||
| void *rdispls; | |||||
| HcclDataType recvtype; | |||||
| const char *group; | |||||
| void *sendbuf; // device mem | |||||
| void *sendcounts; // device mem; Type: uint_64 | |||||
| void *sdispls; // device mem; Type: uint_64 | |||||
| HcclDataType sendtype; | |||||
| void *recvbuf; // device mem | |||||
| void *recvcounts; // device mem; Type: uint_64 | |||||
| void *rdispls; // device mem; Type: uint_64 | |||||
| HcclDataType recvtype; | |||||
| const char *group; // not used now | |||||
| }; | }; | ||||
| struct HcomGatherAllToAllVParams { | struct HcomGatherAllToAllVParams { | ||||
| void *addrInfo; | |||||
| void *addrInfoCountPerRank; | |||||
| void *recvbuf; | |||||
| void *recvcounts; | |||||
| void *rdispls; | |||||
| void *gatheredbuf; | |||||
| s32 addrLength; | |||||
| HcclDataType recvtype; | |||||
| const char *group; | |||||
| void *addrInfo; // device mem; contains host VA[uint_64]: [addr, length, addr, length, addr, length, ...] | |||||
| void *addrInfoCountPerRank; // device mem; length: ranksize; contains addrInfoCounts for every rank | |||||
| void *recvbuf; // device mem | |||||
| void *recvcounts; // device mem; Type: uint_64 | |||||
| void *rdispls; // device mem; Type: uint_64 | |||||
| void *gatheredbuf; // device mem | |||||
| s32 addrLength; | |||||
| HcclDataType recvtype; | |||||
| const char *group; // not used now | |||||
| }; | }; | ||||
| typedef enum workMode { | |||||
| HCCL_MODE_NORMAL = 0, // 不支持任何Probe any,仅支持精确的probe | |||||
| HCCL_MODE_ANY = 1 // 仅支持ANY_SOURCE + ANY_TAG的probe | |||||
| } WorkMode; | |||||
| typedef struct tagCommAttr { | |||||
| WorkMode mode; // 通信域内的probe工作模式 | |||||
| uint32_t deviceId = 0; | |||||
| } CommAttr; | |||||
| typedef void* HcclMessage; | |||||
| typedef void* HcclRequest; | |||||
| typedef struct { | |||||
| int srcRank; // 接收/探测到的msg/信封的发送端rank_id,MPI标准定义,调用者可以访问 | |||||
| int tag; // 接收/探测到的msg/信封的tag,MPI标准定义,调用者可以访问 | |||||
| int error; // 接收/探测的错误码0:no error,others:传输过程出错,MPI标准定义,调用者可以访问 | |||||
| int cancelled; // 指定实现,不建议调用者访问 | |||||
| int count; // 接收/探测到的payload大小,指定实现,不建议调用者访问 | |||||
| } HcclStatus; | |||||
| #define HCCL_REQUEST_NULL NULL | |||||
| #define HCCL_TAG_ANY (1 << 30) | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| } | } | ||||
| #endif // __cplusplus | #endif // __cplusplus | ||||
| @@ -1,101 +0,0 @@ | |||||
| /** | |||||
| * Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
| * | |||||
| * Licensed 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. | |||||
| */ | |||||
| /** | |||||
| * @file hccl_types.h | |||||
| * @brief HCCL data type definition | |||||
| * | |||||
| */ | |||||
| #ifndef HCCL_TYPES_H_ | |||||
| #define HCCL_TYPES_H_ | |||||
| #include <stdint.h> | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif // __cplusplus | |||||
| /** | |||||
| * @brief HCCL functions return value definition | |||||
| */ | |||||
| typedef enum { | |||||
| HCCL_SUCCESS = 0, /**< success */ | |||||
| HCCL_E_PARA = 1, /**< parameter error */ | |||||
| HCCL_E_PTR = 2, /**< empty pointer */ | |||||
| HCCL_E_MEMORY = 3, /**< memory error */ | |||||
| HCCL_E_INTERNAL = 4, /**< internal error */ | |||||
| HCCL_E_NOT_SUPPORT = 5, /**< not support feature */ | |||||
| HCCL_E_NOT_FOUND = 6, /**< not found specific resource */ | |||||
| HCCL_E_UNAVAIL = 7, /**< resource unavailable */ | |||||
| HCCL_E_SYSCALL = 8, /**< call system interface error */ | |||||
| HCCL_E_TIMEOUT = 9, /**< timeout */ | |||||
| HCCL_E_OPEN_FILE_FAILURE = 10, /**< open file fail */ | |||||
| HCCL_E_TCP_CONNECT = 11, /**< tcp connect fail */ | |||||
| HCCL_E_ROCE_CONNECT = 12, /**< roce connect fail */ | |||||
| HCCL_E_TCP_TRANSFER = 13, /**< tcp transfer fail */ | |||||
| HCCL_E_ROCE_TRANSFER = 14, /**< roce transfer fail */ | |||||
| HCCL_E_RUNTIME = 15, /**< call runtime api fail */ | |||||
| HCCL_E_DRV = 16, /**< call driver api fail */ | |||||
| HCCL_E_PROFILING = 17, /**< call profiling api fail */ | |||||
| HCCL_E_CCE = 18, /**< call cce api fail */ | |||||
| HCCL_E_NETWORK = 19, /**< call network api fail */ | |||||
| HCCL_E_RESERVED /**< reserved */ | |||||
| } HcclResult; | |||||
| /** | |||||
| * @brief handle to HCCL communicator | |||||
| */ | |||||
| typedef void *HcclComm; | |||||
| /** | |||||
| * @brief HCCL Reduction opperation | |||||
| */ | |||||
| typedef enum { | |||||
| HCCL_REDUCE_SUM = 0, /**< sum */ | |||||
| HCCL_REDUCE_PROD = 1, /**< prod */ | |||||
| HCCL_REDUCE_MAX = 2, /**< max */ | |||||
| HCCL_REDUCE_MIN = 3, /**< min */ | |||||
| HCCL_REDUCE_RESERVED /**< reserved */ | |||||
| } HcclReduceOp; | |||||
| /** | |||||
| * @brief HCCL data type | |||||
| */ | |||||
| typedef enum { | |||||
| HCCL_DATA_TYPE_INT8 = 0, /**< int8 */ | |||||
| HCCL_DATA_TYPE_INT16 = 1, /**< int16 */ | |||||
| HCCL_DATA_TYPE_INT32 = 2, /**< int32 */ | |||||
| HCCL_DATA_TYPE_FP16 = 3, /**< fp16 */ | |||||
| HCCL_DATA_TYPE_FP32 = 4, /**< fp32 */ | |||||
| HCCL_DATA_TYPE_INT64 = 5, /**< int64 */ | |||||
| HCCL_DATA_TYPE_UINT64 = 6, /**< uint64 */ | |||||
| HCCL_DATA_TYPE_RESERVED /**< reserved */ | |||||
| } HcclDataType; | |||||
| const uint32_t HCCL_ROOT_INFO_BYTES = 4108; // 4108: root info length | |||||
| /** | |||||
| * @brief HCCL root info | |||||
| */ | |||||
| typedef struct HcclRootInfoDef { | |||||
| char internal[HCCL_ROOT_INFO_BYTES]; | |||||
| } HcclRootInfo; | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif // __cplusplus | |||||
| #endif // HCCL_TYPES_H_ | |||||
| @@ -126,58 +126,6 @@ extern HcclResult HcomSetGradFusionByIndex(const char *group, u32 segmentNum, co | |||||
| * @return HcclResult | * @return HcclResult | ||||
| */ | */ | ||||
| extern HcclResult HcomSetGradFusionBySize(const char *group, u32 segmentNum, const float *sizeList); | extern HcclResult HcomSetGradFusionBySize(const char *group, u32 segmentNum, const float *sizeList); | ||||
| /** | |||||
| * @brief Initialize hcom executor. | |||||
| * | |||||
| * @param void | |||||
| * @return HcclResult | |||||
| */ | |||||
| HcclResult HcomExecInitialize(); | |||||
| /** | |||||
| * @brief Finalize hcom executor. | |||||
| * | |||||
| * @param void | |||||
| * @return HcclResult | |||||
| */ | |||||
| HcclResult HcomExecFinalize(); | |||||
| /** | |||||
| * @brief Put collective communication operation into hcom executor. | |||||
| * | |||||
| * @param opInfo information about collective communication operation. | |||||
| * @param callback callback after collective communication operation. | |||||
| * @return HcclResult | |||||
| */ | |||||
| HcclResult HcomExecEnqueueOperation(HcomOperation opInfo, std::function<void(HcclResult status)> callback); | |||||
| /** | |||||
| * @brief Put remote access operation into hcom executor. | |||||
| * | |||||
| * @param remoteAccessType operation type (read or write). | |||||
| * @param addrInfos address information about collective communication operation. | |||||
| * @param callback callback after collective communication operation. | |||||
| * @return HcclResult | |||||
| */ | |||||
| HcclResult HcomExecEnqueueRemoteAccess(const std::string& remoteAccessType, | |||||
| const std::vector<HcomRemoteAccessAddrInfo>& addrInfos, | |||||
| std::function<void(HcclResult status)> callback); | |||||
| HcclResult HcomExecEnqueueAllToAllV(HcomAllToAllVParams params, std::function<void(HcclResult status)> callback); | |||||
| HcclResult HcomExecEnqueueGatherAllToAllV(HcomGatherAllToAllVParams params, | |||||
| std::function<void(HcclResult status)> callback); | |||||
| /** | |||||
| * @brief Register memories and init resources for remote access. | |||||
| * | |||||
| * @param addrList memory addresses for remote access. | |||||
| * @param count number of remote memory addresses. | |||||
| * @return HcclResult | |||||
| */ | |||||
| extern HcclResult HcomRegRemoteAccessMem(const MemRegisterAddr* addrList, u32 count); | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| } | } | ||||
| #endif // __cplusplus | #endif // __cplusplus | ||||