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!") | |||
| endif() | |||
| endif() | |||
| set(METADEF_DIR ${CMAKE_CURRENT_LIST_DIR}/metadef) | |||
| set(PARSER_DIR ${CMAKE_CURRENT_LIST_DIR}/parser) | |||
| set(GE_DEPEND_DIR ${CMAKE_CURRENT_LIST_DIR}/..) | |||
| @@ -158,6 +157,7 @@ else () | |||
| elseif(ENABLE_MS_TESTCASES) | |||
| include(cmake/external_libs/protobuf_static.cmake) | |||
| include(cmake/external_libs/protoc.cmake) | |||
| include(cmake/external_libs/json.cmake) | |||
| include(cmake/external_libs/securec.cmake) | |||
| include(cmake/FindModule.cmake) | |||
| include(cmake/intf_pub_linux.cmake) | |||
| @@ -175,5 +175,4 @@ else () | |||
| endif() | |||
| add_subdirectory(ge) | |||
| endif () | |||
| @@ -9,10 +9,6 @@ if (GE_PB_PKG) | |||
| set(REQ_URL "${GE_PB_PKG}/libs/ge_nlohmann_json/include.zip") | |||
| set(MD5 "0dc903888211db3a0f170304cd9f3a89") | |||
| 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() | |||
| set(REQ_URL "https://github.com/nlohmann/json/releases/download/v3.6.1/include.zip") | |||
| set(MD5 "0dc903888211db3a0f170304cd9f3a89") | |||
| @@ -34,7 +34,6 @@ void GeModel::Init() { | |||
| } | |||
| GeModel::GeModel() { | |||
| attrs_.InitDefault(); | |||
| 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::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 { | |||
| @@ -17,24 +17,26 @@ | |||
| #ifndef GE_MODEL_GE_MODEL_H_ | |||
| #define GE_MODEL_GE_MODEL_H_ | |||
| #include <securec.h> | |||
| #include <map> | |||
| #include <memory> | |||
| #include <string> | |||
| #include "securec.h" | |||
| #include "runtime/rt.h" | |||
| #include "common/tbe_kernel_store.h" | |||
| #include "common/cust_aicpu_kernel_store.h" | |||
| #include "framework/common/debug/log.h" | |||
| #include "framework/common/fmk_error_codes.h" | |||
| #include "framework/common/ge_types.h" | |||
| #include "graph/buffer.h" | |||
| #include "external/graph/graph.h" | |||
| #include "proto/task.pb.h" | |||
| namespace ge { | |||
| const uint32_t INVALID_MODEL_ID = 0xFFFFFFFFUL; | |||
| class GeModel : public AttrHolder { | |||
| public: | |||
| GeModel(); | |||
| ~GeModel() = default; | |||
| ~GeModel() override = default; | |||
| GeModel(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 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 SetVersion(uint32_t version); | |||
| void SetVersion(const uint32_t 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::GetAllAttrs; | |||
| 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_; } | |||
| 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: | |||
| ConstProtoAttrMapHelper GetAttrMap() const override; | |||
| ConstProtoAttrMap &GetAttrMap() const override; | |||
| private: | |||
| void Init(); | |||
| ProtoAttrMapHelper attrs_; /*lint !e148*/ | |||
| ProtoAttrMap attrs_; /*lint !e148*/ | |||
| Graph graph_; | |||
| std::shared_ptr<domi::ModelTaskDef> task_; /*lint !e148*/ | |||
| @@ -91,9 +93,9 @@ class GeModel : public AttrHolder { | |||
| Buffer weights_buffer_; /*lint !e148*/ | |||
| std::string name_; | |||
| uint32_t version_ = {0}; | |||
| uint32_t version_ = {0U}; | |||
| std::string platform_version_; | |||
| uint8_t platform_type_ = {0}; | |||
| uint8_t platform_type_ = {0U}; | |||
| uint32_t model_id_ = INVALID_MODEL_ID; | |||
| 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_set_task.cc" | |||
| "task/label_switch_task.cc" | |||
| "task/label_manager.cc" | |||
| ) | |||
| 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() { | |||
| // Ops kernel info store | |||
| @@ -80,11 +72,7 @@ bool HcclTask::Distribute() { | |||
| SetSecondaryStream(); | |||
| 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."); | |||
| @@ -16,33 +16,46 @@ | |||
| #include "ge_runtime/task/label_goto_task.h" | |||
| #include "ge_runtime/task/task_factory.h" | |||
| #include "framework/common/util.h" | |||
| namespace ge { | |||
| namespace model_runner { | |||
| 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) { | |||
| GELOGW("task_info_ is null!"); | |||
| return; | |||
| } | |||
| auto stream_list = model_context.stream_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 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("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."); | |||
| return; | |||
| } | |||
| 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() { | |||
| 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() { | |||
| @@ -94,21 +107,34 @@ bool LabelGotoTask::CheckParamValid() { | |||
| return false; | |||
| } | |||
| if (label_ == nullptr) { | |||
| GELOGE(PARAM_INVALID, "label is null!"); | |||
| if (label_info_ == nullptr) { | |||
| GELOGE(PARAM_INVALID, "label info is null!"); | |||
| 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; | |||
| } | |||
| GELOGI("DistributeTask end."); | |||
| return true; | |||
| } | |||
| @@ -18,7 +18,11 @@ | |||
| #define GE_GE_RUNTIME_TASK_LABEL_GOTO_TASK_H_ | |||
| #include <memory> | |||
| #include <vector> | |||
| #include <map> | |||
| #include <mutex> | |||
| #include "ge_runtime/task/task.h" | |||
| #include "ge_runtime/task/label_manager.h" | |||
| namespace ge { | |||
| namespace model_runner { | |||
| @@ -31,13 +35,13 @@ class LabelGotoTask : public TaskRepeater<LabelGotoTaskInfo> { | |||
| bool Distribute() override; | |||
| private: | |||
| bool CheckParamValid(); | |||
| 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 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), | |||
| task_info_(task_info), | |||
| stream_(nullptr), | |||
| all_label_resource_(), | |||
| label_info_(nullptr) { | |||
| if (task_info_ == nullptr) { | |||
| GELOGW("task_info_ is null!"); | |||
| 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(); | |||
| uint32_t stream_id = task_info->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; | |||
| } | |||
| 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() { | |||
| GELOGI("LabelSwitchTask Distribute start."); | |||
| if (!CheckParamValid()) { | |||
| @@ -117,8 +115,8 @@ bool LabelSwitchTask::CheckParamValid() { | |||
| 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; | |||
| } | |||
| @@ -126,6 +124,5 @@ bool LabelSwitchTask::CheckParamValid() { | |||
| } | |||
| REGISTER_TASK(TaskInfoType::LABEL_SWITCH, LabelSwitchTask, LabelSwitchTaskInfo); | |||
| } // namespace model_runner | |||
| } // namespace ge | |||
| @@ -19,6 +19,7 @@ | |||
| #include <memory> | |||
| #include "ge_runtime/task/task.h" | |||
| #include "ge_runtime/task/label_manager.h" | |||
| namespace ge { | |||
| namespace model_runner { | |||
| @@ -35,8 +36,9 @@ class LabelSwitchTask : public TaskRepeater<LabelSwitchTaskInfo> { | |||
| std::shared_ptr<LabelSwitchTaskInfo> task_info_; | |||
| 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 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -57,22 +57,22 @@ class GE_FUNC_VISIBILITY Session { | |||
| /// | |||
| /// @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 | |||
| /// | |||
| Status AddGraph(uint32_t graphId, const Graph &graph); | |||
| Status AddGraph(uint32_t graph_id, const Graph &graph); | |||
| /// | |||
| /// @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] graph the graph | |||
| /// @param [in] options graph options | |||
| /// @return Status result of function | |||
| /// | |||
| 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 | |||
| @@ -82,7 +82,7 @@ class GE_FUNC_VISIBILITY Session { | |||
| /// @param [in] options graph options | |||
| /// @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 | |||
| @@ -106,10 +106,10 @@ class GE_FUNC_VISIBILITY Session { | |||
| /// | |||
| /// @ingroup ge_graph | |||
| /// @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 | |||
| /// | |||
| Status RemoveGraph(uint32_t graphId); | |||
| Status RemoveGraph(uint32_t graph_id); | |||
| /// | |||
| /// @ingroup ge_graph | |||
| @@ -119,7 +119,7 @@ class GE_FUNC_VISIBILITY Session { | |||
| /// @param [out] outputs output data | |||
| /// @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 | |||
| @@ -140,9 +140,9 @@ class GE_FUNC_VISIBILITY Session { | |||
| /// @param [in] inputs: input data | |||
| /// @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 | |||
| @@ -154,7 +154,7 @@ class GE_FUNC_VISIBILITY Session { | |||
| /// Please ensure that the implementation of the function is trusted. | |||
| /// @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 | |||
| @@ -189,7 +189,7 @@ class GE_FUNC_VISIBILITY Session { | |||
| Status RegisterCallBackFunc(const char *key, const session::pCallBackFunc &callback); | |||
| bool IsGraphNeedRebuild(uint32_t graphId); | |||
| bool IsGraphNeedRebuild(uint32_t graph_id); | |||
| private: | |||
| 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -20,14 +20,27 @@ | |||
| #include <map> | |||
| #include <string> | |||
| #include "ge_error_codes.h" | |||
| #include "ge_api_types.h" | |||
| namespace ge { | |||
| #ifdef __GNUC__ | |||
| #define ATTRIBUTED_DEPRECATED(replacement) __attribute__((deprecated("Please use " #replacement " instead."))) | |||
| #else | |||
| #define ATTRIBUTED_DEPRECATED(replacement) __declspec(deprecated("Please use " #replacement " instead.")) | |||
| #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 { | |||
| public: | |||
| static StatusFactory *Instance() { | |||
| @@ -35,7 +48,7 @@ class GE_FUNC_VISIBILITY StatusFactory { | |||
| return &instance; | |||
| } | |||
| void RegisterErrorNo(uint32_t err, const std::string &desc) { | |||
| void RegisterErrorNo(const uint32_t err, const std::string &desc) { | |||
| // Avoid repeated addition | |||
| if (err_desc_.find(err) != err_desc_.end()) { | |||
| return; | |||
| @@ -43,19 +56,19 @@ class GE_FUNC_VISIBILITY StatusFactory { | |||
| 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) { | |||
| return; | |||
| } | |||
| std::string error_desc = desc; | |||
| const std::string error_desc = desc; | |||
| if (err_desc_.find(err) != err_desc_.end()) { | |||
| return; | |||
| } | |||
| 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()) { | |||
| return ""; | |||
| } | |||
| @@ -72,61 +85,18 @@ class GE_FUNC_VISIBILITY StatusFactory { | |||
| class GE_FUNC_VISIBILITY ErrorNoRegisterar { | |||
| 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() {} | |||
| }; | |||
| // 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 | |||
| 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 | |||
| @@ -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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -24,96 +24,111 @@ | |||
| #include <functional> | |||
| #include <memory> | |||
| #include "graph/tensor.h" | |||
| #include "graph/types.h" | |||
| namespace ge { | |||
| // 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 | |||
| 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 | |||
| 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 | |||
| 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 | |||
| 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, | |||
| // 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 | |||
| 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 { | |||
| 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 | |||
| // Configure stream num by Session constructor options param, | |||
| // 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"; | |||
| // 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 | |||
| 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"; | |||
| // 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 | |||
| 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, | |||
| // 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" | |||
| 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" | |||
| 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 | |||
| const std::string AICORE_NUM = "ge.aicoreNum"; | |||
| @@ -262,38 +284,51 @@ const std::string ENABLE_SMALL_CHANNEL = "ge.enableSmallChannel"; | |||
| // Configure Compress Weight flag | |||
| 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 | |||
| 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 | |||
| const std::string SAVE_ORIGINAL_MODEL = "ge.saveOriginalModel"; | |||
| // Save original model file name | |||
| 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 | |||
| // 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 | |||
| // 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 | |||
| // 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 | |||
| // 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. | |||
| // 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 | |||
| 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"; | |||
| // 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 | |||
| // normal: no need to compile, used saved .o files directly | |||
| // high: need to recompile, high execute 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 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 | |||
| enum GraphRunMode { PREDICTION = 0, TRAIN }; | |||
| @@ -345,7 +391,7 @@ struct OutputTensorInfo { | |||
| std::vector<int64_t> dims; // shape description | |||
| std::unique_ptr<uint8_t[]> data; // tensor data | |||
| 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) | |||
| : 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 | |||
| 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 | |||
| #ifdef __GNUC__ | |||
| @@ -437,19 +488,23 @@ const std::set<std::string> ir_builder_suppported_options = {INPUT_FORMAT, | |||
| OP_BANK_PATH, | |||
| OP_BANK_UPDATE, | |||
| PERFORMANCE_MODE, | |||
| MODIFY_MIXLIST}; | |||
| SHAPE_GENERALIZED_BUILD_MODE, | |||
| MODIFY_MIXLIST, | |||
| CUSTOMIZE_DTYPES}; | |||
| // for interface: aclgrphParse | |||
| 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 | |||
| const std::set<std::string> global_options = {CORE_TYPE, | |||
| SOC_VERSION, | |||
| VIRTUAL_TYPE, | |||
| BUFFER_OPTIMIZE, | |||
| ENABLE_COMPRESS_WEIGHT, | |||
| COMPRESS_WEIGHT_CONF, | |||
| SPARSITY, | |||
| PRECISION_MODE, | |||
| TUNE_DEVICE_IDS, | |||
| EXEC_DISABLE_REUSED_MEMORY, | |||
| @@ -464,7 +519,8 @@ const std::set<std::string> global_options = {CORE_TYPE, | |||
| DEBUG_DIR, | |||
| OP_COMPILER_CACHE_DIR, | |||
| OP_COMPILER_CACHE_MODE, | |||
| MODIFY_MIXLIST}; | |||
| MODIFY_MIXLIST, | |||
| COMPRESSION_OPTIMIZE_CONF}; | |||
| #endif | |||
| } // namespace ir_option | |||
| } // 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -32,42 +32,44 @@ | |||
| #endif | |||
| #include <stddef.h> | |||
| #include <stdint.h> | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #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 | |||
| } // 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_ | |||
| #define INC_EXTERNAL_GE_IR_BUILD_H_ | |||
| @@ -36,14 +36,10 @@ | |||
| #include <memory> | |||
| #include "graph/graph.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 { | |||
| const int32_t IR_MAJOR_VERSION = 1; | |||
| const int32_t IR_MINOR_VERSION = 0; | |||
| const int32_t IR_PATCH_VERSION = 0; | |||
| struct ModelBufferData { | |||
| 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 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 | |||
| @@ -117,7 +113,8 @@ GE_FUNC_VISIBILITY graphStatus aclgrphSaveModel(const char *output_file, const M | |||
| * @retval GRAPH_SUCCESS The function is successfully executed. | |||
| * @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 | |||
| @@ -129,7 +126,7 @@ GE_FUNC_VISIBILITY graphStatus aclgrphGetIRVersion(int *major_version, int *mino | |||
| * @retval GRAPH_SUCCESS The function is successfully executed. | |||
| * @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 | |||
| @@ -153,7 +150,7 @@ GE_FUNC_VISIBILITY graphStatus aclgrphGenerateForOp(const AscendString &op_type, | |||
| * @param cfg_path [IN] the config file path | |||
| * @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 | |||
| #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"); | |||
| * 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -17,6 +17,7 @@ | |||
| #ifndef INC_FRAMEWORK_COMMON_DEBUG_GE_LOG_H_ | |||
| #define INC_FRAMEWORK_COMMON_DEBUG_GE_LOG_H_ | |||
| #include <cinttypes> | |||
| #include <cstdint> | |||
| #include "framework/common/ge_inner_error_codes.h" | |||
| @@ -33,7 +34,7 @@ | |||
| extern "C" { | |||
| #endif | |||
| #define GE_MODULE_NAME static_cast<int>(GE) | |||
| #define GE_MODULE_NAME static_cast<int32_t>(GE) | |||
| // trace status of log | |||
| enum TraceStatus { TRACE_INIT = 0, TRACE_RUNNING, TRACE_WAITING, TRACE_STOP }; | |||
| @@ -42,60 +43,79 @@ class GE_FUNC_VISIBILITY GeLog { | |||
| public: | |||
| static uint64_t GetTid() { | |||
| #ifdef __GNUC__ | |||
| uint64_t tid = static_cast<uint64_t>(syscall(__NR_gettid)); | |||
| const uint64_t tid = static_cast<uint64_t>(syscall(__NR_gettid)); | |||
| #else | |||
| uint64_t tid = static_cast<uint64_t>(GetCurrentThreadId()); | |||
| const uint64_t tid = static_cast<uint64_t>(GetCurrentThreadId()); | |||
| #endif | |||
| 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 | |||
| 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. | |||
| #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 | |||
| } | |||
| #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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -19,17 +19,14 @@ | |||
| #include <string> | |||
| #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 "ge/ge_api_error_codes.h" | |||
| #include "external/ge/ge_api_error_codes.h" | |||
| #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 | |||
| #include <android/log.h> | |||
| #if defined(BUILD_VERSION_PERF) | |||
| @@ -52,196 +49,116 @@ | |||
| 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 | |||
| #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 | |||
| #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 | |||
| #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 | |||
| #define GE_CHK_GRAPH_STATUS_RET(expr, ...) \ | |||
| do { \ | |||
| if ((expr) != ge::GRAPH_SUCCESS) { \ | |||
| 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 | |||
| #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 | |||
| #define GE_CHK_BOOL_RET_STATUS(expr, _status, ...) \ | |||
| do { \ | |||
| bool b = (expr); \ | |||
| const bool b = (expr); \ | |||
| if (!b) { \ | |||
| 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 | |||
| #define GE_CHK_BOOL_RET_STATUS_NOLOG(expr, _status, ...) \ | |||
| do { \ | |||
| bool b = (expr); \ | |||
| const bool b = (expr); \ | |||
| if (!b) { \ | |||
| return _status; \ | |||
| return (_status); \ | |||
| } \ | |||
| } while (0); | |||
| } while (false) | |||
| // If expr is not true, print the log and execute a custom statement | |||
| #define GE_CHK_BOOL_EXEC(expr, exec_expr, ...) \ | |||
| { \ | |||
| bool b = (expr); \ | |||
| const bool b = (expr); \ | |||
| if (!b) { \ | |||
| DOMI_LOGE(__VA_ARGS__); \ | |||
| GELOGE(ge::FAILED, __VA_ARGS__); \ | |||
| 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------------------------------- | |||
| // 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 | |||
| #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 | |||
| #define GE_CHK_RT_RET(expr) \ | |||
| do { \ | |||
| rtError_t _rt_ret = (expr); \ | |||
| const rtError_t _rt_ret = (expr); \ | |||
| if (_rt_ret != RT_ERROR_NONE) { \ | |||
| 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); \ | |||
| } \ | |||
| } while (0); | |||
| } while (false) | |||
| // If expr is true, execute exec_expr without printing logs | |||
| #define GE_IF_BOOL_EXEC(expr, exec_expr) \ | |||
| @@ -256,32 +173,32 @@ | |||
| try { \ | |||
| exec_expr0; \ | |||
| } catch (const std::bad_alloc &) { \ | |||
| DOMI_LOGE("Make shared failed"); \ | |||
| GELOGE(ge::FAILED, "Make shared failed"); \ | |||
| 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> | |||
| GE_FUNC_VISIBILITY std::string FmtToStr(const T &t) { | |||
| std::string fmt; | |||
| @@ -290,5 +207,5 @@ GE_FUNC_VISIBILITY std::string FmtToStr(const T &t) { | |||
| fmt = st.str(); | |||
| return fmt; | |||
| } | |||
| } // namespace ge | |||
| #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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -20,14 +20,18 @@ | |||
| #if defined(_MSC_VER) | |||
| #ifdef FUNC_VISIBILITY | |||
| #define GE_FUNC_VISIBILITY _declspec(dllexport) | |||
| #define GE_OBJECT_VISIBILITY | |||
| #else | |||
| #define GE_FUNC_VISIBILITY | |||
| #define GE_OBJECT_VISIBILITY | |||
| #endif | |||
| #else | |||
| #ifdef FUNC_VISIBILITY | |||
| #define GE_FUNC_VISIBILITY __attribute__((visibility("default"))) | |||
| #define GE_OBJECT_VISIBILITY | |||
| #else | |||
| #define GE_FUNC_VISIBILITY | |||
| #define GE_OBJECT_VISIBILITY __attribute__((visibility("hidden"))) | |||
| #endif | |||
| #endif | |||
| @@ -42,23 +46,23 @@ | |||
| #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 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 | |||
| #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 { | |||
| 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 { | |||
| public: | |||
| 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: | |||
| StatusFactory() {} | |||
| @@ -70,7 +74,9 @@ class GE_FUNC_VISIBILITY StatusFactory { | |||
| class GE_FUNC_VISIBILITY ErrorNoRegisterar { | |||
| 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() {} | |||
| }; | |||
| @@ -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"); | |||
| * 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"); | |||
| * 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -19,7 +19,7 @@ | |||
| #include <vector> | |||
| #include "common/ge_inner_error_codes.h" | |||
| #include "framework/common/ge_inner_error_codes.h" | |||
| #include "graph/tensor.h" | |||
| namespace ge { | |||
| @@ -33,7 +33,7 @@ class GE_FUNC_VISIBILITY GeFormatUtil { | |||
| /// @param [out] dst_shape destination shape | |||
| /// @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 | |||
| @@ -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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -22,17 +22,57 @@ | |||
| #include <string> | |||
| #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 { | |||
| // System ID | |||
| enum SystemIdType { SYSID_GE = 8 }; | |||
| enum class InnSystemIdType { SYSID_GE = 8 }; | |||
| // Runtime location | |||
| enum LogRuntime { | |||
| enum class InnLogRuntime { | |||
| RT_HOST = 0b01, | |||
| RT_DEVICE = 0b10, | |||
| }; | |||
| // Sub model | |||
| enum SubModuleId { | |||
| enum class InnSubModuleId { | |||
| COMMON_MODULE = 0, | |||
| CLIENT_MODULE = 1, | |||
| INIT_MODULE = 2, | |||
| @@ -47,13 +87,13 @@ enum SubModuleId { | |||
| }; | |||
| // Error code type | |||
| enum ErrorCodeType { | |||
| enum class InnErrorCodeType { | |||
| ERROR_CODE = 0b01, | |||
| EXCEPTION_CODE = 0b10, | |||
| }; | |||
| // Error level | |||
| enum ErrorLevel { | |||
| enum class InnErrorLevel { | |||
| COMMON_LEVEL = 0b000, | |||
| SUGGESTION_LEVEL = 0b001, | |||
| MINOR_LEVEL = 0b010, | |||
| @@ -61,33 +101,6 @@ enum ErrorLevel { | |||
| 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 | |||
| GE_ERRORNO_COMMON(MEMALLOC_FAILED, 0, "Failed to allocate memory!"); // 1343225856 | |||
| 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 | |||
| // 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, | |||
| "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 | |||
| 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 | |||
| // 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 | |||
| 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_SAVE_MODEL_FAILED, 5, "Graph manager save model failed."); | |||
| #define RT_ERROR_TO_GE_STATUS(RT_ERROR) static_cast<Status>(RT_ERROR) | |||
| } // namespace ge | |||
| #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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -17,31 +17,39 @@ | |||
| #ifndef INC_FRAMEWORK_COMMON_GE_TYPES_H_ | |||
| #define INC_FRAMEWORK_COMMON_GE_TYPES_H_ | |||
| #include <stdint.h> | |||
| #include <cstdint> | |||
| #include <string> | |||
| #include <vector> | |||
| #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/ge/ge_api_types.h" | |||
| namespace ge { | |||
| 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 { | |||
| CAFFE = 0, | |||
| MINDSPORE = 1, | |||
| 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 = { | |||
| {"0", "Caffe"}, {"1", "MindSpore"}, {"3", "TensorFlow"}, {"4", "Android_NN"}, {"5", "Onnx"}}; | |||
| {"0", "Caffe"}, {"1", "MindSpore"}, {"3", "TensorFlow"}, {"4", "Android_NN"}, {"5", "Onnx"}}; | |||
| enum OpEngineType { | |||
| 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 }; | |||
| 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 | |||
| const std::string kTaskTypeAicore = "AI_CORE"; | |||
| const std::string kTaskTypeAicpu = "AI_CPU"; | |||
| 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 | |||
| 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 | |||
| struct DataBuffer { | |||
| public: | |||
| void *data; // Data address | |||
| uint64_t length; // Data length | |||
| 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 timeout; // Processing timeout | |||
| 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 | |||
| 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 | |||
| @@ -113,10 +145,10 @@ struct Command { | |||
| // The definition of I/O shape description | |||
| 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<std::pair<int64_t, int64_t>> shape_ranges; | |||
| }; | |||
| @@ -186,14 +218,14 @@ struct AippConfigInfo { | |||
| int32_t mean_chn_1; | |||
| int32_t mean_chn_2; | |||
| 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; | |||
| uint32_t related_input_rank; | |||
| uint32_t max_src_image_size; | |||
| @@ -202,26 +234,42 @@ struct AippConfigInfo { | |||
| // The structure of offline Modeldata | |||
| struct ModelData { | |||
| 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 | |||
| std::string key; // Key path for encrypt model, Empty for unencrypt | |||
| 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 | |||
| struct ModelInfo { | |||
| uint32_t version = 0; | |||
| uint32_t version = 0U; | |||
| 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> 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 | |||
| class GE_FUNC_VISIBILITY ModelListener { | |||
| public: | |||
| virtual ~ModelListener() {} | |||
| ModelListener() = default; | |||
| ModelListener(const ModelListener &) = delete; | |||
| ModelListener &operator=(const ModelListener &) = delete; | |||
| /// | |||
| /// @brief Asynchronous callback interface | |||
| /// @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, | |||
| 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 | |||
| @@ -249,6 +309,7 @@ struct Options { | |||
| int32_t physical_device_id; | |||
| std::string profiling_mode; | |||
| std::string profiling_options; | |||
| int32_t graphExecTimeout; | |||
| }; | |||
| // Profiling info of task | |||
| @@ -268,13 +329,24 @@ struct TaskDescInfo { | |||
| std::vector<Format> output_format; | |||
| std::vector<std::vector<int64_t>> output_shape; | |||
| std::vector<DataType> output_data_type; | |||
| uint32_t context_id = 0xFFFFFFFFUL; | |||
| }; | |||
| struct OpDescInfo { | |||
| std::string op_name; | |||
| 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<std::vector<int64_t>> input_shape; | |||
| 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"); | |||
| * 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -20,11 +20,10 @@ | |||
| #include <memory> | |||
| #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_root_model.h" | |||
| #include "common/types.h" | |||
| #include "framework/common/types.h" | |||
| #include "graph/model.h" | |||
| namespace ge { | |||
| @@ -34,77 +33,71 @@ class GE_FUNC_VISIBILITY ModelHelper { | |||
| ~ModelHelper(); | |||
| 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 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(); | |||
| GeRootModelPtr GetGeRootModel(); | |||
| void SetSaveMode(bool val) { | |||
| void SetSaveMode(const bool val) { | |||
| is_offline_ = val; | |||
| } | |||
| bool GetSaveMode(void) const { | |||
| return is_offline_; | |||
| } | |||
| bool GetModelType() const { | |||
| 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: | |||
| bool is_assign_model_ = false; | |||
| bool is_offline_ = true; | |||
| bool is_unknown_shape_model_ = false; | |||
| 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_; | |||
| 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, | |||
| 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, | |||
| 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, | |||
| 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, | |||
| 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, | |||
| 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, | |||
| 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, | |||
| 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 | |||
| #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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -21,25 +21,20 @@ | |||
| #include <vector> | |||
| #include "external/ge/ge_ir_build.h" | |||
| #include "framework/common/fmk_types.h" | |||
| #include "framework/common/types.h" | |||
| #include "framework/common/ge_types.h" | |||
| using ProcParam = struct PROC_PARAM; | |||
| using std::string; | |||
| using std::vector; | |||
| namespace ge { | |||
| struct ModelPartition { | |||
| ModelPartitionType type; | |||
| uint8_t *data = 0; | |||
| uint32_t size = 0; | |||
| const uint8_t *data = nullptr; | |||
| uint32_t size = 0U; | |||
| }; | |||
| struct OmFileContext { | |||
| 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 { | |||
| @@ -53,57 +48,56 @@ struct SaveParam { | |||
| class GE_FUNC_VISIBILITY OmFileLoadHelper { | |||
| 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_; | |||
| vector<OmFileContext> model_contexts_; | |||
| std::vector<OmFileContext> model_contexts_; | |||
| 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}; | |||
| }; | |||
| class GE_FUNC_VISIBILITY OmFileSaveHelper { | |||
| 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(); | |||
| 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_; | |||
| 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 | |||
| #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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -17,107 +17,24 @@ | |||
| #ifndef INC_FRAMEWORK_COMMON_L2_CACHE_OPTIMIZE_H_ | |||
| #define INC_FRAMEWORK_COMMON_L2_CACHE_OPTIMIZE_H_ | |||
| #include <stdint.h> | |||
| #include <cstdint> | |||
| #include <algorithm> | |||
| #include <functional> | |||
| #include <string> | |||
| #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" | |||
| using std::vector; | |||
| namespace ge { | |||
| // 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 | |||
| #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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -34,141 +34,10 @@ | |||
| #include <google/protobuf/map.h> | |||
| #include <unordered_map> | |||
| #include <string> | |||
| #include "graph/debug/ge_attr_define.h" | |||
| #include "proto/om.pb.h" | |||
| using domi::AttrDef; | |||
| using domi::AttrDef_ListValue; | |||
| using domi::ModelDef; | |||
| using domi::NamedAttrs; | |||
| using domi::OpDef; | |||
| 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -20,10 +20,8 @@ | |||
| #include <memory> | |||
| #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/ge_tensor.h" | |||
| #include "graph/node.h" | |||
| @@ -31,18 +29,16 @@ | |||
| #include "proto/insert_op.pb.h" | |||
| namespace ge { | |||
| using domi::Status; | |||
| // Add Sub Mul | |||
| 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; | |||
| // Permute | |||
| GE_FUNC_VISIBILITY extern const int32_t PERMUTE_ORDER_NUM; | |||
| // 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; | |||
| @@ -55,8 +51,8 @@ GE_FUNC_VISIBILITY extern const uint32_t SWITCH_DATA_INPUT; | |||
| GE_FUNC_VISIBILITY extern const uint32_t SWITCH_PRED_INPUT; | |||
| // 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 | |||
| 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_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 { | |||
| 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 | |||
| /// @param [in] aipp_attr attr of operator | |||
| /// @param [out] aipp_params aipp parameters | |||
| /// @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> | |||
| 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> | |||
| 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> | |||
| 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 | |||
| #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"); | |||
| * 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_ | |||
| #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 { | |||
| // general | |||
| @@ -30,7 +30,7 @@ const uint32_t NORMAL_OUTPUT_NUM = 1; | |||
| const uint32_t NORMAL_WORKSPACE_NUM = 0; | |||
| const int32_t NORMAL_1D_DIM_NUM = 1; | |||
| 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 | |||
| @@ -111,8 +111,8 @@ const int32_t ROIPOOLING_DEFAULT_SAMPLING_RATIO = -1; | |||
| const int32_t DETECTIONOUTPUT_INPUT_SIZE = 3; | |||
| const int32_t DETECTIONOUTPUT_OUTPUT_SIZE = 2; | |||
| 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_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_2_DEFAULT_VALUE = 32; | |||
| 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_FILTER_THRESH_DEFAULT_VALUE = 0; | |||
| @@ -150,7 +150,7 @@ const int32_t PERMUTE_WORKSPACE_NUM = 1; | |||
| const int32_t PERMUTE_ORDER_NUM = 4; | |||
| // 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; | |||
| // 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_FOUR = 4; | |||
| 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 | |||
| 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; | |||
| // 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 | |||
| const uint32_t MAX_POOL_WITH_ARGMAX_OUTPUT_NUM = 2; | |||
| @@ -223,7 +223,7 @@ const int32_t ROIALIGN_DEFAULT_POOLED_W = 1; | |||
| // Correlation | |||
| const uint32_t CORRELATION_INPUT_NUM = 2; | |||
| const int CORRELATION_WORKSPACE_NUM = 1; | |||
| const int32_t CORRELATION_WORKSPACE_NUM = 1; | |||
| // Detectionpostprocess | |||
| 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_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 | |||
| 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -20,6 +20,8 @@ | |||
| #include <set> | |||
| #include <string> | |||
| #include "graph/types.h" | |||
| namespace ge { | |||
| class GE_FUNC_VISIBILITY OpTypeContainer { | |||
| public: | |||
| @@ -29,11 +31,12 @@ class GE_FUNC_VISIBILITY OpTypeContainer { | |||
| } | |||
| ~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) { | |||
| 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: | |||
| @@ -42,21 +45,14 @@ class GE_FUNC_VISIBILITY OpTypeContainer { | |||
| private: | |||
| 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) \ | |||
| 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) \ | |||
| 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_ | |||
| @@ -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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -17,39 +17,15 @@ | |||
| #ifndef 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" | |||
| 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 | |||
| /// @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_ | |||
| @@ -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"); | |||
| * 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -18,14 +18,15 @@ | |||
| #define INC_FRAMEWORK_COMMON_SCOPE_GUARD_H_ | |||
| #include <functional> | |||
| #include <iostream> | |||
| /// Usage: | |||
| /// Acquire Resource 1 | |||
| /// MAKE_GUARD([&] { Release Resource 1 }) | |||
| /// Acquire 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() | |||
| namespace ge { | |||
| @@ -42,13 +43,16 @@ class GE_FUNC_VISIBILITY ScopeGuard { | |||
| if (on_exit_scope_ != nullptr) { | |||
| try { | |||
| 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: | |||
| 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -39,24 +39,27 @@ | |||
| #include <sstream> | |||
| #include <string> | |||
| #include <vector> | |||
| #include "graph/types.h" | |||
| namespace ge { | |||
| class GE_FUNC_VISIBILITY StringUtils { | |||
| public: | |||
| static std::string &Ltrim(std::string &s) { | |||
| #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 | |||
| (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 | |||
| return s; | |||
| } | |||
| // lint -esym(551,*) | |||
| static std::string &Rtrim(std::string &s) { /*lint !e618*/ | |||
| static std::string &Rtrim(std::string &s) { /*lint !e618*/ | |||
| #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 | |||
| (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 | |||
| return s; | |||
| } | |||
| @@ -67,7 +70,9 @@ class GE_FUNC_VISIBILITY StringUtils { | |||
| /// @param [in] string to be trimmed | |||
| /// @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 | |||
| @@ -76,8 +81,8 @@ class GE_FUNC_VISIBILITY StringUtils { | |||
| /// @param [in] delim separator | |||
| /// @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()) { | |||
| elems.emplace_back(""); | |||
| @@ -91,8 +96,8 @@ class GE_FUNC_VISIBILITY StringUtils { | |||
| 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(""); | |||
| } | |||
| @@ -104,13 +109,13 @@ class GE_FUNC_VISIBILITY StringUtils { | |||
| /// @param [in] s path name | |||
| /// @return file name | |||
| /// | |||
| static std::string GetFileName(std::string &s) { | |||
| static std::string GetFileName(const std::string &s) { | |||
| if (s.empty()) { | |||
| 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 | |||
| @@ -122,12 +127,13 @@ class GE_FUNC_VISIBILITY StringUtils { | |||
| /// @return string after replacement | |||
| /// | |||
| 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 | |||
| 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); | |||
| } else { | |||
| break; | |||
| @@ -145,7 +151,7 @@ class GE_FUNC_VISIBILITY StringUtils { | |||
| /// @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) { | |||
| 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 | |||
| /// @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_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); | |||
| return ret > 0 ? buffer : ""; | |||
| return (ret > 0) ? buffer : ""; | |||
| } | |||
| }; | |||
| } // 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -21,9 +21,9 @@ | |||
| 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_NOT_INITIALIZED = 1, /**< not init */ | |||
| CC_STATUS_ALLOC_FAILED = 2, /**< alloc mem failed */ | |||
| @@ -33,10 +33,10 @@ typedef enum tagCcStatus { | |||
| CC_STATUS_RUNTIME_ERROR = 6, /**< runtime error */ | |||
| CC_STATUS_NOT_SUPPORTED = 7, /**< unsupport error */ | |||
| 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_CPU = 1, /* cce aicpu */ | |||
| TE = 2, /* te operator*/ | |||
| @@ -47,9 +47,9 @@ typedef enum tagccKernelType { | |||
| CUST_AI_CPU = 7, /* custom aicpu*/ | |||
| HOST_CPU = 8, /* host cpu */ | |||
| INVALID = 10000 /* unknown kernel type */ | |||
| } ccKernelType; | |||
| }; | |||
| typedef struct tagOpContext { | |||
| using ccOpContext = struct tagOpContext { | |||
| ccKernelType kernelType; | |||
| uint32_t opId; | |||
| uint32_t kernelFuncId; | |||
| @@ -66,7 +66,28 @@ typedef struct tagOpContext { | |||
| uint64_t genVariableBaseAddr; | |||
| uint64_t genVariableBaseSize; | |||
| 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_ | |||
| @@ -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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -17,28 +17,16 @@ | |||
| #ifndef INC_FRAMEWORK_COMMON_TYPES_H_ | |||
| #define INC_FRAMEWORK_COMMON_TYPES_H_ | |||
| #include <limits.h> | |||
| #include <stdint.h> | |||
| #include <algorithm> | |||
| #include <cstdint> | |||
| #include <map> | |||
| #include <memory> | |||
| #include <string> | |||
| #include <utility> | |||
| #include <vector> | |||
| #include "framework/common/fmk_error_codes.h" | |||
| #include "framework/common/fmk_types.h" | |||
| #include "framework/common/op_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 { | |||
| // dump | |||
| 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_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 | |||
| 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 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_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_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. | |||
| #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(AIPPDATA, "AippData"); | |||
| REGISTER_OPTYPE_DECLARE(QUEUE_DATA, "QueueData"); | |||
| REGISTER_OPTYPE_DECLARE(CONVOLUTION, "Convolution"); | |||
| REGISTER_OPTYPE_DECLARE(CORRELATION, "Correlation"); | |||
| REGISTER_OPTYPE_DECLARE(CORRELATIONV2, "Correlation_V2"); | |||
| @@ -134,6 +88,7 @@ REGISTER_OPTYPE_DECLARE(DROPOUTDOMASKV3, "DropOutDoMaskV3"); | |||
| REGISTER_OPTYPE_DECLARE(DROPOUTDOMASKV3D, "DropOutDoMaskV3D"); | |||
| REGISTER_OPTYPE_DECLARE(SOFTMAXV2WITHDROPOUTDOMASKV3D, "SoftmaxV2WithDropOutDoMaskV3D"); | |||
| REGISTER_OPTYPE_DECLARE(DROPOUTGENMASK, "DropOutGenMask"); | |||
| REGISTER_OPTYPE_DECLARE(AXPYWITHSOFTMAXANDDROPOUTDOMASK, "AxpyWithSoftmaxAndDropOutDoMask"); | |||
| REGISTER_OPTYPE_DECLARE(CONCAT, "Concat"); | |||
| REGISTER_OPTYPE_DECLARE(ROIPOOLING, "ROIPooling"); | |||
| REGISTER_OPTYPE_DECLARE(PROPOSAL, "Proposal"); | |||
| @@ -167,6 +122,10 @@ REGISTER_OPTYPE_DECLARE(SLICED, "SliceD"); | |||
| REGISTER_OPTYPE_DECLARE(FLOORDIV, "FloorDiv"); | |||
| REGISTER_OPTYPE_DECLARE(SQUEEZE, "Squeeze"); | |||
| 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(RANGE, "Range"); | |||
| REGISTER_OPTYPE_DECLARE(RPNPROPOSALS, "GenerateRpnProposals"); | |||
| @@ -203,6 +162,7 @@ REGISTER_OPTYPE_DECLARE(_IF, "_If"); | |||
| REGISTER_OPTYPE_DECLARE(STATELESSIF, "StatelessIf"); | |||
| REGISTER_OPTYPE_DECLARE(IF, "If"); | |||
| REGISTER_OPTYPE_DECLARE(CASE, "Case"); | |||
| REGISTER_OPTYPE_DECLARE(STATELESSCASE, "StatelessCase"); | |||
| REGISTER_OPTYPE_DECLARE(_WHILE, "_While"); | |||
| REGISTER_OPTYPE_DECLARE(WHILE, "While"); | |||
| REGISTER_OPTYPE_DECLARE(STATELESSWHILE, "StatelessWhile"); | |||
| @@ -339,10 +299,15 @@ REGISTER_OPTYPE_DECLARE(PLACEHOLDER, "PlaceHolder"); | |||
| REGISTER_OPTYPE_DECLARE(END, "End"); | |||
| REGISTER_OPTYPE_DECLARE(BASICLSTMCELL, "BasicLSTMCell"); | |||
| REGISTER_OPTYPE_DECLARE(GETNEXT, "GetNext"); | |||
| REGISTER_OPTYPE_DECLARE(ITERATOR, "Iterator"); | |||
| REGISTER_OPTYPE_DECLARE(ITERATORV2, "IteratorV2"); | |||
| REGISTER_OPTYPE_DECLARE(INITDATA, "InitData"); | |||
| REGISTER_OPTYPE_DECLARE(TRANSSHAPE, "TransShape") | |||
| REGISTER_OPTYPE_DECLARE(REFIDENTITY, "RefIdentity"); | |||
| REGISTER_OPTYPE_DECLARE(BITCAST, "Bitcast"); | |||
| REGISTER_OPTYPE_DECLARE(GATHERSHAPES, "GatherShapes"); | |||
| REGISTER_OPTYPE_DECLARE(FLATTENV2, "FlattenV2"); | |||
| REGISTER_OPTYPE_DECLARE(FILECONSTANT, "FileConstant"); | |||
| // ANN dedicated operator | |||
| REGISTER_OPTYPE_DECLARE(ANN_MEAN, "AnnMean"); | |||
| @@ -460,6 +425,7 @@ REGISTER_OPTYPE_DECLARE(MODELEXIT, "ModelExit"); | |||
| REGISTER_OPTYPE_DECLARE(SEND, "Send"); | |||
| REGISTER_OPTYPE_DECLARE(RECV, "Recv"); | |||
| REGISTER_OPTYPE_DECLARE(ENDOFSEQUENCE, "EndOfSequence"); | |||
| REGISTER_OPTYPE_DECLARE(STARTOFSEQUENCE, "StartOfSequence"); | |||
| REGISTER_OPTYPE_DECLARE(LABELSET, "LabelSet"); | |||
| REGISTER_OPTYPE_DECLARE(LABELGOTO, "LabelGoto"); | |||
| @@ -483,8 +449,6 @@ REGISTER_OPTYPE_DECLARE(ELU_GRAD, "EluGrad"); | |||
| REGISTER_OPTYPE_DECLARE(ADD_V2, "AddV2"); | |||
| REGISTER_OPTYPE_DECLARE(DATAFORMATDIMMAP, "DataFormatDimMap"); | |||
| REGISTER_OPTYPE_DECLARE(DATAFORMATVECPERMUTE, "DataFormatVecPermute"); | |||
| REGISTER_OPTYPE_DECLARE(BESSELI0e, "BesselI0e"); | |||
| REGISTER_OPTYPE_DECLARE(BESSELI1e, "BesselI1e"); | |||
| REGISTER_OPTYPE_DECLARE(DEQUANTIZE, "Dequantize"); | |||
| REGISTER_OPTYPE_DECLARE(APPLYADADELTA, "ApplyAdadelta"); | |||
| REGISTER_OPTYPE_DECLARE(APPLYADAGRAD, "ApplyAdagrad"); | |||
| @@ -538,29 +502,11 @@ REGISTER_OPTYPE_DECLARE(GETDYNAMICDIMS, "GetDynamicDims"); | |||
| // profiling training trace node | |||
| 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 | |||
| enum ModelEncryptType { | |||
| @@ -599,50 +545,22 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t MODEL_FIL | |||
| /// | |||
| /// @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 | |||
| /// | |||
| static constexpr uint32_t USER_DEFINE_INFO_LENGTH = 32; | |||
| constexpr uint32_t USER_DEFINE_INFO_LENGTH = 32U; | |||
| /// | |||
| /// @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 | |||
| /// | |||
| 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 | |||
| 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 | |||
| 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 | |||
| 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 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 | |||
| 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 | |||
| 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 | |||
| 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 | |||
| 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_H; | |||
| 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 | |||
| 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_W; | |||
| 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 | |||
| // Number of inputs of the Eltwise operator | |||
| FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const int ELTWISE_MIN_INPUT_SIZE; | |||
| // 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_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_COND; | |||
| 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 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 | |||
| 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 | |||
| 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 }; | |||
| @@ -882,24 +661,9 @@ struct ModelPartitionTable { | |||
| 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 | |||
| typedef enum tagDomiActivationMode { | |||
| DOMI_ACTIVATION_SIGMOID = 0, // sigmoid | |||
| @@ -919,190 +683,6 @@ typedef enum tagDomiActivationMode { | |||
| DOMI_ACTIVATION_RESERVED | |||
| } 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 }; | |||
| } // 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -14,33 +14,32 @@ | |||
| * 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 <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/scope_guard.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, ...) \ | |||
| { \ | |||
| bool b = (expr); \ | |||
| const bool b = (expr); \ | |||
| if (!b) { \ | |||
| exec_expr; \ | |||
| } \ | |||
| @@ -48,189 +47,244 @@ | |||
| // new ge marco | |||
| // 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. | |||
| #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, ...) \ | |||
| 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 | |||
| #define GE_RETURN_WITH_LOG_IF_TRUE(condition, ...) \ | |||
| do { \ | |||
| if (condition) { \ | |||
| DOMI_LOGE(__VA_ARGS__); \ | |||
| GELOGE(ge::FAILED, __VA_ARGS__); \ | |||
| return ge::FAILED; \ | |||
| } \ | |||
| } while (0) | |||
| } while (false) | |||
| // Check if the parameter is false. If yes, return FAILED and record the error log | |||
| #define GE_RETURN_WITH_LOG_IF_FALSE(condition, ...) \ | |||
| do { \ | |||
| bool _condition = (condition); \ | |||
| const bool _condition = (condition); \ | |||
| if (!_condition) { \ | |||
| DOMI_LOGE(__VA_ARGS__); \ | |||
| GELOGE(ge::FAILED, __VA_ARGS__); \ | |||
| return ge::FAILED; \ | |||
| } \ | |||
| } while (0) | |||
| } while (false) | |||
| // 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, ...) \ | |||
| do { \ | |||
| if (condition) { \ | |||
| DOMI_LOGE(__VA_ARGS__); \ | |||
| GELOGE(ge::FAILED, __VA_ARGS__); \ | |||
| return ge::PARAM_INVALID; \ | |||
| } \ | |||
| } while (0) | |||
| } while (false) | |||
| // 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, ...) \ | |||
| do { \ | |||
| bool _condition = (condition); \ | |||
| const bool _condition = (condition); \ | |||
| if (!_condition) { \ | |||
| DOMI_LOGE(__VA_ARGS__); \ | |||
| GELOGE(ge::FAILED, __VA_ARGS__); \ | |||
| return ge::PARAM_INVALID; \ | |||
| } \ | |||
| } while (0) | |||
| } while (false) | |||
| // 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 | |||
| #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 | |||
| #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 | |||
| #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 | |||
| #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 | |||
| #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 | |||
| #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 | |||
| #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) \ | |||
| 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) \ | |||
| 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) \ | |||
| do { \ | |||
| if (addr != nullptr) { \ | |||
| rtError_t error = rtFree(addr); \ | |||
| if ((addr) != nullptr) { \ | |||
| const rtError_t error = rtFree(addr); \ | |||
| if (error != RT_ERROR_NONE) { \ | |||
| GELOGE(RT_FAILED, "Call rtFree failed, error: %#x", error); \ | |||
| } \ | |||
| addr = nullptr; \ | |||
| (addr) = nullptr; \ | |||
| } \ | |||
| } while (0) | |||
| } while (false) | |||
| namespace ge { | |||
| /** | |||
| * @ingroup domi_common | |||
| * @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 | |||
| /// @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 | |||
| @@ -241,7 +295,8 @@ const int32_t DOMI_MAX_PATH_LEN = 256; | |||
| /// @return true success | |||
| /// @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 | |||
| @@ -251,17 +306,15 @@ GE_FUNC_VISIBILITY bool ReadProtoFromArray(const void *data, int size, Message * | |||
| /// @return true success | |||
| /// @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 | |||
| /// @brief: get length 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 | |||
| @@ -272,9 +325,7 @@ GE_FUNC_VISIBILITY extern long GetFileLength(const std::string &input_file); | |||
| /// @return false fail | |||
| /// @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 | |||
| @@ -283,7 +334,7 @@ GE_FUNC_VISIBILITY bool ReadBytesFromBinaryFile(const char *file_name, std::vect | |||
| /// @return 0 success | |||
| /// @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 | |||
| @@ -292,46 +343,6 @@ GE_FUNC_VISIBILITY extern int CreateDirectory(const std::string &directory_path) | |||
| /// | |||
| 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 | |||
| /// @brief Obtains the absolute time (timestamp) of the current system. | |||
| @@ -355,7 +366,7 @@ GE_FUNC_VISIBILITY uint32_t GetCurrentSecondTimestap(); | |||
| /// @param [in] b | |||
| /// @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 | |||
| @@ -363,7 +374,7 @@ GE_FUNC_VISIBILITY bool CheckInt64MulOverflow(int64_t a, int64_t b); | |||
| /// @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 | |||
| /// | |||
| GE_FUNC_VISIBILITY std::string RealPath(const char *path); | |||
| GE_FUNC_VISIBILITY std::string RealPath(const char_t *path); | |||
| /// | |||
| /// @ingroup domi_common | |||
| @@ -387,28 +398,12 @@ GE_FUNC_VISIBILITY bool CheckOutputPathValid(const std::string &file_path, const | |||
| /// | |||
| /// @ingroup domi_common | |||
| /// @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 | |||
| /// | |||
| 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 | |||
| #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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -21,16 +21,17 @@ | |||
| #include <string> | |||
| #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" | |||
| namespace ge { | |||
| enum PriorityEnum { | |||
| enum class PriorityEnum { | |||
| 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_10 = 10, | |||
| }; | |||
| @@ -38,19 +39,37 @@ enum PriorityEnum { | |||
| struct DNNEngineAttribute { | |||
| std::string engine_name; | |||
| std::vector<std::string> mem_type; | |||
| uint32_t compute_cost; | |||
| PriorityEnum compute_cost; | |||
| enum RuntimeType runtime_type; // HOST, DEVICE | |||
| // If engine input format must be specific, set this attribute, else set FORMAT_RESERVED | |||
| Format engine_input_format; | |||
| Format engine_output_format; | |||
| bool atomic_engine_flag; | |||
| }; | |||
| class GE_FUNC_VISIBILITY DNNEngine { | |||
| public: | |||
| DNNEngine() = default; | |||
| explicit DNNEngine(const DNNEngineAttribute &attrs) { | |||
| engine_attribute_ = attrs; | |||
| } | |||
| 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 | |||
| @@ -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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -22,42 +22,58 @@ | |||
| #include <vector> | |||
| #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/ge_tensor.h" | |||
| #include "runtime/base.h" | |||
| namespace ge { | |||
| class SingleOp; | |||
| class DynamicSingleOp; | |||
| class GeRootModel; | |||
| struct RunModelData { | |||
| uint32_t index; // Data index | |||
| 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 { | |||
| public: | |||
| GeExecutor(); | |||
| ~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 | |||
| 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 | |||
| @@ -68,7 +84,8 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [in] batch_size: batch size entered by user in dynamic multi-batch scenario | |||
| /// @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 | |||
| @@ -80,8 +97,8 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [in] image_width: image width entered by user in dynamic multi-resolution scenario | |||
| /// @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 | |||
| @@ -93,8 +110,8 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [in] dynamic_dims: array of dynamic dimensions | |||
| /// @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 | |||
| @@ -104,8 +121,8 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [out] cur_dynamic_dims: current dynamic dims | |||
| /// @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 | |||
| @@ -115,8 +132,8 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [out] dynamic_type | |||
| /// @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 | |||
| @@ -125,7 +142,7 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [out] batch_info | |||
| /// @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 | |||
| @@ -134,9 +151,9 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [out] user_designate_shape_order | |||
| /// @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 | |||
| @@ -148,22 +165,22 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [in] aippParms: kAippDynamicPara by user in dynamic aipp | |||
| /// @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 | |||
| @@ -173,7 +190,7 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @return SUCCESS | |||
| /// @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 | |||
| @@ -182,7 +199,7 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [out] ModelData &model_data: Offline model memory data | |||
| /// @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 | |||
| @@ -195,8 +212,8 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [out] uint32_t &model_id: Corresponding identification after model loading | |||
| /// @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 | |||
| @@ -207,9 +224,20 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [in] output_queue_ids: input queue ids create from user. | |||
| /// @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 | |||
| @@ -221,8 +249,17 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [out] domi::OutputData *output_data: Model output data | |||
| /// @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 | |||
| @@ -236,9 +273,9 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [out] std::vector<GeTensorDesc> &output_desc: description of model output data | |||
| /// @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 | |||
| @@ -248,7 +285,7 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [out] size_t &weight_size Weight memory space size | |||
| /// @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 | |||
| @@ -259,39 +296,45 @@ class GE_FUNC_VISIBILITY GeExecutor { | |||
| /// @param [out] size_t &weight_size Weight memory space size | |||
| /// @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: | |||
| static bool isInit_; | |||
| static std::atomic_bool is_inited_; | |||
| }; | |||
| } // 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -21,26 +21,31 @@ | |||
| #include <memory> | |||
| #include <string> | |||
| #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/graph.h" | |||
| #include "graph/op_desc.h" | |||
| #include "graph/detail/attributes_holder.h" | |||
| #include "omg/omg_inner_types.h" | |||
| #include "framework/omg/omg_inner_types.h" | |||
| namespace ge { | |||
| const std::string kAttrSupportDynamicShape = "support_dynamicshape"; | |||
| class GeRootModel; | |||
| class GE_FUNC_VISIBILITY GeGenerator { | |||
| public: | |||
| using InOutTensorRef = std::pair<const std::vector<ge::GeTensor> &, const std::vector<ge::GeTensor> &>; | |||
| static GeGenerator &GetInstance() { | |||
| static GeGenerator Instance; | |||
| return Instance; | |||
| } | |||
| GeGenerator() = default; | |||
| ~GeGenerator() { (void)Finalize(); } | |||
| ~GeGenerator() { | |||
| (void)Finalize(); | |||
| } | |||
| GeGenerator(const GeGenerator &) = delete; | |||
| @@ -54,7 +59,7 @@ class GE_FUNC_VISIBILITY GeGenerator { | |||
| Status GenerateOfflineModel(const Graph &graph, const std::string &file_name_prefix, | |||
| 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); | |||
| @@ -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 [out] model_buff: model buff of op. | |||
| /// @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 | |||
| /// @brief: Build single Op into model buff. | |||
| @@ -94,22 +105,33 @@ class GE_FUNC_VISIBILITY GeGenerator { | |||
| /// @param [in] graph_name: graph name. | |||
| /// @param [out] graph: graph of single op. | |||
| /// @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: | |||
| 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); | |||
| 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); | |||
| 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>; | |||
| 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; | |||
| @@ -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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -17,11 +17,7 @@ | |||
| #ifndef 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" | |||
| 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -19,7 +19,7 @@ | |||
| #include <utility> | |||
| #include "common/ge_inner_error_codes.h" | |||
| #include "framework/common/ge_inner_error_codes.h" | |||
| #include "graph/node.h" | |||
| namespace ge { | |||
| @@ -33,7 +33,7 @@ class GE_FUNC_VISIBILITY MemoryAssigner { | |||
| 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: | |||
| 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -18,7 +18,7 @@ | |||
| #define INC_FRAMEWORK_OMG_GE_INIT_H_ | |||
| #include <map> | |||
| #include <string> | |||
| #include "common/ge_inner_error_codes.h" | |||
| #include "framework/common/ge_inner_error_codes.h" | |||
| namespace ge { | |||
| 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"); | |||
| * 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -17,10 +17,12 @@ | |||
| #ifndef INC_FRAMEWORK_OMG_OMG_H_ | |||
| #define INC_FRAMEWORK_OMG_OMG_H_ | |||
| #include <google/protobuf/message.h> | |||
| #include <string> | |||
| #include <unordered_map> | |||
| #include <vector> | |||
| #include <google/protobuf/message.h> | |||
| #include "external/ge/ge_api_types.h" | |||
| #include "framework/omg/omg_inner_types.h" | |||
| #include "framework/omg/parser/parser_inner_ctx.h" | |||
| #include "proto/ge_ir.pb.h" | |||
| @@ -31,20 +33,14 @@ | |||
| #include "graph/model.h" | |||
| #include "runtime/kernel.h" | |||
| using domi::Status; | |||
| using std::pair; | |||
| using std::string; | |||
| using std::unordered_map; | |||
| using std::vector; | |||
| namespace ge { | |||
| /** | |||
| * @ingroup domi_omg | |||
| * @brief init omg context | |||
| * @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 | |||
| @@ -61,10 +57,10 @@ GE_FUNC_VISIBILITY Status InitDomiOmgContext(const string &input_shape, const st | |||
| * @param [in] atc_params multiply atc params | |||
| * @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 | |||
| @@ -74,9 +70,9 @@ GE_FUNC_VISIBILITY Status ParseGraph(ge::Graph &graph, const std::map<string, st | |||
| * @param [key] encrypted key | |||
| * @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 | |||
| * @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 | |||
| * @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(); | |||
| @@ -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"); | |||
| * 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_RESERVED; | |||
| using domi::domiTensorFormat_t; | |||
| using domi::FRAMEWORK_RESERVED; | |||
| using domi::FrameworkType; | |||
| using std::map; | |||
| using std::string; | |||
| using std::unordered_map; | |||
| using std::vector; | |||
| namespace ge { | |||
| /** | |||
| @@ -51,34 +46,13 @@ enum RunMode { | |||
| 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 { | |||
| 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 | |||
| 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 | |||
| 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) | |||
| std::vector<std::pair<std::string, int32_t>> default_out_nodes; | |||
| // 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) | |||
| 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 | |||
| domiTensorFormat_t net_format = DOMI_TENSOR_RESERVED; | |||
| domi::domiTensorFormat_t net_format = domi::DOMI_TENSOR_RESERVED; | |||
| domi::FrameworkType type = domi::FRAMEWORK_RESERVED; | |||
| RunMode run_mode = ONLY_PRE_CHECK; | |||
| RunMode run_mode = RunMode::ONLY_PRE_CHECK; | |||
| bool train_flag = false; | |||
| std::string output_type; | |||
| @@ -118,14 +92,13 @@ struct OmgContext { | |||
| std::string dynamic_image_size; | |||
| std::string dynamic_dims; | |||
| 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; | |||
| std::vector<NodePtr> data_nodes; | |||
| std::vector<NodePtr> getnext_nosink_nodes; | |||
| bool fuzz_compile_flag = false; | |||
| std::string atc_cmdline; | |||
| bool user_attr_index_valid = false; | |||
| bool is_online_model = false; | |||
| }; | |||
| } // 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"); | |||
| * 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -25,8 +25,6 @@ | |||
| #include "graph/ge_tensor.h" | |||
| #include "graph/graph.h" | |||
| #include "graph/op_desc.h" | |||
| #include "graph/operator.h" | |||
| #include "graph/range_vistor.h" | |||
| #include "graph/utils/attr_utils.h" | |||
| #include "graph/utils/graph_utils.h" | |||
| #include "graph/utils/op_desc_utils.h" | |||
| @@ -36,7 +34,7 @@ using Status = domi::Status; | |||
| namespace domi { | |||
| 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)>; | |||
| @@ -109,7 +107,11 @@ class GE_FUNC_VISIBILITY ModelParser { | |||
| * @return SUCCESS | |||
| * @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 | |||
| @@ -129,7 +131,11 @@ class GE_FUNC_VISIBILITY ModelParser { | |||
| * @return SUCCESS | |||
| * @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 | |||
| @@ -142,8 +148,22 @@ class GE_FUNC_VISIBILITY ModelParser { | |||
| */ | |||
| virtual Status ParseProtoWithSubgraph(const std::string &serialized_proto, GetGraphCallbackV2 callback, | |||
| ge::ComputeGraphPtr &graph) { | |||
| (void)serialized_proto; | |||
| (void)callback; | |||
| (void)graph; | |||
| return UNSUPPORTED; | |||
| } | |||
| virtual bool HasError() { | |||
| return false; | |||
| } | |||
| virtual Status Save(const std::string &file) { | |||
| (void)file; | |||
| return SUCCESS; | |||
| } | |||
| virtual void Clear(){}; | |||
| }; | |||
| } // 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -19,10 +19,8 @@ | |||
| #include <google/protobuf/text_format.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 "graph/ge_tensor.h" | |||
| #include "graph/op_desc.h" | |||
| #include "graph/utils/op_desc_utils.h" | |||
| using google::protobuf::Message; | |||
| @@ -50,7 +48,7 @@ class GE_FUNC_VISIBILITY OpParser { | |||
| * @return SUCCESS | |||
| * @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 | |||
| @@ -60,7 +58,7 @@ class GE_FUNC_VISIBILITY OpParser { | |||
| * @return SUCCESS | |||
| * @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 | |||
| @@ -70,7 +68,7 @@ class GE_FUNC_VISIBILITY OpParser { | |||
| * @return SUCCESS | |||
| * @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 | |||
| @@ -80,7 +78,7 @@ class GE_FUNC_VISIBILITY OpParser { | |||
| * @return SUCCESS | |||
| * @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; | |||
| // Indicates that the op does not provide a value for format | |||
| 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -17,15 +17,14 @@ | |||
| #ifndef INC_FRAMEWORK_OMG_PARSER_PARSER_API_H_ | |||
| #define INC_FRAMEWORK_OMG_PARSER_PARSER_API_H_ | |||
| #include <iostream> | |||
| #include <map> | |||
| #include <string> | |||
| #include "ge/ge_api_error_codes.h" | |||
| #include "external/ge/ge_api_error_codes.h" | |||
| namespace ge { | |||
| // 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 | |||
| GE_FUNC_VISIBILITY Status ParserFinalize(); | |||
| } // 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -23,14 +23,13 @@ | |||
| #include <string> | |||
| #include "framework/omg/omg_inner_types.h" | |||
| #include "framework/omg/parser/parser_types.h" | |||
| using Status = domi::Status; | |||
| #include "external/register/register.h" | |||
| namespace domi { | |||
| class WeightsParser; | |||
| 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 | |||
| class GE_FUNC_VISIBILITY ModelParserFactory { | |||
| @@ -63,7 +62,7 @@ class GE_FUNC_VISIBILITY ModelParserFactory { | |||
| class GE_FUNC_VISIBILITY ModelParserRegisterar { | |||
| 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); | |||
| } | |||
| ~ModelParserRegisterar() {} | |||
| @@ -82,7 +81,7 @@ class GE_FUNC_VISIBILITY ModelParserRegisterar { | |||
| } \ | |||
| 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 | |||
| class GE_FUNC_VISIBILITY WeightsParserFactory { | |||
| @@ -115,7 +114,7 @@ class GE_FUNC_VISIBILITY WeightsParserFactory { | |||
| class GE_FUNC_VISIBILITY WeightsParserRegisterar { | |||
| 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); | |||
| } | |||
| ~WeightsParserRegisterar() {} | |||
| @@ -133,6 +132,12 @@ class GE_FUNC_VISIBILITY WeightsParserRegisterar { | |||
| return std::shared_ptr<WeightsParser>(ptr); \ | |||
| } \ | |||
| 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_ | |||
| @@ -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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -21,7 +21,6 @@ | |||
| #include <memory> | |||
| #include <string> | |||
| #include <unordered_map> | |||
| #include <utility> | |||
| #include <vector> | |||
| #include "external/register/register_fmk_types.h" | |||
| #include "external/register/register_types.h" | |||
| @@ -30,8 +29,8 @@ | |||
| namespace ge { | |||
| struct ParserContext { | |||
| // 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 | |||
| std::vector<std::pair<std::string, std::vector<int64_t>>> user_input_dims; | |||
| std::map<std::string, std::vector<int64_t>> input_dims; | |||
| @@ -46,20 +45,20 @@ struct ParserContext { | |||
| // operator | |||
| std::map<std::string, std::vector<int32_t>> out_nodes_map; | |||
| // 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) | |||
| 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 | |||
| bool is_dynamic_input = false; | |||
| bool train_flag = false; | |||
| domi::domiTensorFormat_t format = domi::DOMI_TENSOR_ND; | |||
| 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 | |||
| std::string custom_proto_path; | |||
| // 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -17,7 +17,7 @@ | |||
| #ifndef PARSER_COMMON_TYPES_H_ | |||
| #define PARSER_COMMON_TYPES_H_ | |||
| #include <stdint.h> | |||
| #include <cstdint> | |||
| #include <string> | |||
| #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 *IF; | |||
| 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 *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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -17,13 +17,12 @@ | |||
| #ifndef 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/attr_value.h" | |||
| #include "graph/compute_graph.h" | |||
| #include "graph/ge_tensor.h" | |||
| #include "graph/op_desc.h" | |||
| #include "graph/operator.h" | |||
| #include "graph/range_vistor.h" | |||
| #include "graph/utils/attr_utils.h" | |||
| #include "graph/utils/op_desc_utils.h" | |||
| #include "graph/utils/tensor_utils.h" | |||
| @@ -68,6 +67,17 @@ class GE_FUNC_VISIBILITY WeightsParser { | |||
| * @author | |||
| */ | |||
| 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 | |||
| @@ -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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -18,12 +18,9 @@ | |||
| #define INC_FRAMEWORK_OMG_VERSION_H_ | |||
| #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" | |||
| namespace ge { | |||
| @@ -33,8 +30,8 @@ class GE_FUNC_VISIBILITY PlatformVersionManager { | |||
| ~PlatformVersionManager() = delete; | |||
| static Status GetPlatformVersion(std::string &ver) { | |||
| 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()); | |||
| 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"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -17,6 +17,7 @@ | |||
| #ifndef AICPU_OP_TYPE_LIST_H_ | |||
| #define AICPU_OP_TYPE_LIST_H_ | |||
| extern "C" { | |||
| enum OpKernelType { | |||
| TF_KERNEL, | |||
| CPU_KERNEL | |||
| @@ -29,19 +30,13 @@ enum ReturnCode { | |||
| }; | |||
| #pragma pack(push, 1) | |||
| //One byte alignment | |||
| // One byte alignment | |||
| struct SysOpInfo { | |||
| uint64_t opLen; | |||
| uint64_t opType; | |||
| OpKernelType kernelsType; | |||
| }; | |||
| struct OpParamInfo { | |||
| uint64_t num; | |||
| uint64_t dtypeList; | |||
| uint64_t formatList; | |||
| }; | |||
| struct SysOpCheckInfo { | |||
| uint64_t opListNum; | |||
| uint64_t offSetLen; | |||
| @@ -57,4 +52,6 @@ struct SysOpCheckResp { | |||
| uint64_t opParamInfoList; | |||
| }; | |||
| #pragma pack(pop) | |||
| } | |||
| #endif // AICPU_OP_TYPE_LIST_H_ | |||
| @@ -14,13 +14,15 @@ | |||
| * 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> | |||
| namespace aicpu { | |||
| using char_t = char; | |||
| #pragma pack(push, 1) | |||
| struct AicpuParamHead | |||
| { | |||
| @@ -29,9 +31,76 @@ struct AicpuParamHead | |||
| uint32_t extInfoLength; // extInfo struct Length | |||
| 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) | |||
| } // namespace aicpu | |||
| #endif // AICPU_TASK_STRUCT_H_ | |||
| #endif // AICPU_TASK_STRUCT_H | |||
| @@ -21,7 +21,7 @@ | |||
| namespace aicpu { | |||
| namespace FWKAdapter { | |||
| using char_t = char; | |||
| // API RETURN CODE | |||
| enum FWKAdptAPIRetCode { | |||
| FWK_ADPT_SUCCESS = 0, // success | |||
| @@ -63,6 +63,8 @@ enum FWKTaskExtInfoType { | |||
| FWK_ADPT_EXT_BITMAP, | |||
| FWK_ADPT_EXT_TOPIC_TYPE, | |||
| FWK_ADPT_EXT_ASYNCWAIT, | |||
| FWK_ADPT_EXT_UNKNOWN_SHAPE_INPUT_INDEX, | |||
| FWK_ADPT_EXT_UNKNOWN_SHAPE_OUTPUT_INDEX, | |||
| FWK_ADPT_EXT_INVALID | |||
| }; | |||
| @@ -113,7 +115,7 @@ struct StrFWKKernel { | |||
| typedef StrFWKKernel FWKOperateParam; | |||
| // Extent info ShapeAndType | |||
| const uint32_t kMaxShapeDims = 8; | |||
| const uint32_t kMaxShapeDims = 8U; | |||
| #pragma pack(push, 1) | |||
| struct ShapeAndType { | |||
| int32_t type; | |||
| @@ -122,13 +124,13 @@ struct ShapeAndType { | |||
| #pragma pack(pop) | |||
| // Extend info structure for extInfoAddr | |||
| const uint32_t kExtInfoHeadSize = 8; | |||
| const uint32_t kExtInfoHeadSize = 8U; | |||
| #pragma pack(push, 1) | |||
| struct ExtInfo { | |||
| int32_t infoType; // extend type | |||
| uint32_t infoLen; // length for infoMsg | |||
| char infoMsg[0]; // extend value | |||
| char_t infoMsg[0]; // extend value | |||
| }; | |||
| #pragma pack(pop) | |||
| @@ -143,9 +145,9 @@ struct ResultSummary { | |||
| #pragma pack(push, 1) | |||
| 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; | |||
| }; | |||
| #pragma pack(pop) | |||
| @@ -27,15 +27,16 @@ namespace cce { | |||
| #define CC_FUSION_OP_MAX 32 | |||
| 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; | |||
| 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_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 | |||
| @@ -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_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 | |||
| @@ -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_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 | |||
| @@ -99,5 +114,4 @@ static const int32_t ACL_ERROR_RT_SOCKET_CLOSE = 507901; // hdc di | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| #endif // __INC_EXTERNEL_RT_ERROR_CODES_H__ | |||
| @@ -86,6 +86,47 @@ enum OriginalGraphShapeType { | |||
| 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. | |||
| */ | |||
| @@ -124,29 +165,54 @@ struct HcomRemoteAccessAddrInfo { | |||
| }; | |||
| 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 { | |||
| 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 | |||
| } | |||
| #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 | |||
| */ | |||
| 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 | |||
| } | |||
| #endif // __cplusplus | |||