diff --git a/CMakeLists.txt b/CMakeLists.txt index 186ef4e6..947fb016 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,21 +76,17 @@ if (ENABLE_OPEN_SRC) find_module(runtime libruntime.so ${GE_LIB_PATH}) find_module(runtime_compile libruntime_compile.so ${GE_LIB_PATH}) find_module(resource libresource.so ${GE_LIB_PATH}) - find_module(error_manager liberror_manager.so ${GE_LIB_PATH}) find_module(ascend_hal_stub libascend_hal.so ${GE_LIB_PATH}) - find_module(error_manager_static liberror_manager.a ${GE_LIB_PATH}) find_module(msprofiler_fwk_ext libmsprofiler_fwk.a ${GE_LIB_PATH}) #find_module(ascendcl_static libascendcl.a ${GE_LIB_PATH}) elseif(ENABLE_GE_COV OR ENABLE_GE_UT) add_subdirectory(tests) else() - find_module(slog libslog.so ${ASCEND_ATC_DIR} ${ASCEND_DRIVER_COMMON_DIR}) + find_module(slog libalog.so ${ASCEND_ATC_DIR} ${ASCEND_DRIVER_COMMON_DIR}) find_module(static_mmpa libmmpa.a ${ASCEND_ATC_DIR} ${ASCEND_RUNTIME_DIR}) - find_module(error_manager liberror_manager.so ${ASCEND_ATC_DIR} ${ASCEND_RUNTIME_DIR}) if(PLATFORM STREQUAL "train") find_module(adump_server libadump_server.a ${ASCEND_RUNTIME_DIR}) find_module(runtime libruntime.so ${ASCEND_RUNTIME_DIR}) - find_module(error_manager liberror_manager.so ${ASCEND_RUNTIME_DIR}) find_module(msprofiler_fwk_ext libmsprofiler_fwk.a ${ASCEND_RUNTIME_DIR}) find_module(ascend_hal_stub libascend_hal.so ${ASCEND_DRIVER_DIR}/driver) if(PRODUCT STREQUAL "flr3") @@ -100,8 +96,6 @@ if (ENABLE_OPEN_SRC) find_module(adump_server libadump_server.a ${ASCEND_ACL_DIR}) find_module(runtime libruntime.so ${ASCEND_ACL_DIR}) find_module(runtime_compile libruntime_compile.so ${ASCEND_ATC_DIR}) - find_module(error_manager liberror_manager.so ${ASCEND_ATC_DIR}) - find_module(error_manager_static liberror_manager.a ${ASCEND_ACL_DIR}) find_module(msprofiler_ext libmsprofiler.a ${ASCEND_ACL_DIR}) if(PRODUCT STREQUAL "flr3") elseif(PRODUCT STREQUAL "flr1") @@ -114,11 +108,9 @@ if (ENABLE_OPEN_SRC) elseif(PLATFORM STREQUAL "all") find_module(adump_server libadump_server.a ${ASCEND_RUNTIME_DIR}) find_module(runtime libruntime.so ${ASCEND_RUNTIME_DIR}) - find_module(error_manager liberror_manager.so ${ASCEND_RUNTIME_DIR}) find_module(msprofiler_fwk_ext libmsprofiler_fwk.a ${ASCEND_RUNTIME_DIR}) find_module(ascend_hal_stub libascend_hal.so ${ASCEND_DRIVER_DIR}) find_module(runtime_compile libruntime_compile.so ${ASCEND_ATC_DIR}) - find_module(error_manager_static liberror_manager.a ${ASCEND_ACL_DIR}) find_module(msprofiler_ext libmsprofiler.a ${ASCEND_ACL_DIR}) else() message(STATUS "PLATFORM param is invalid, should be train or inference, you choose nothing!") @@ -144,7 +136,6 @@ elseif (ENABLE_D OR ENABLE_ACL) # common libraries find_module(slog libalog.so ${ASCEND_MS_RUNTIME_PATH} ${ATLAS_MS_RUNTIME_PATH}) - find_module(error_manager liberror_manager.so ${ASCEND_MS_RUNTIME_PATH} ${ATLAS_MS_RUNTIME_PATH}) find_module(static_mmpa libmmpa.a ${ASCEND_MS_RUNTIME_PATH} ${ATLAS_MS_RUNTIME_PATH}) if (ENABLE_D) @@ -164,7 +155,6 @@ elseif(ENABLE_MS_TESTCASES) # common libraries find_module(slog libalog.so ${ASCEND_MS_RUNTIME_PATH} ${ATLAS_MS_RUNTIME_PATH}) - find_module(error_manager liberror_manager.so ${ASCEND_MS_RUNTIME_PATH} ${ATLAS_MS_RUNTIME_PATH}) find_module(static_mmpa libmmpa.a ${ASCEND_MS_RUNTIME_PATH} ${ATLAS_MS_RUNTIME_PATH}) set(METADEF_DIR ${CMAKE_CURRENT_LIST_DIR}/metadef) diff --git a/build.sh b/build.sh index 7b6da560..3e2dcdec 100644 --- a/build.sh +++ b/build.sh @@ -76,8 +76,8 @@ checkopts() ENABLE_GE_ST="on" ;; t) - ENABLE_GE_UT="on" - ;; + ENABLE_GE_UT="on" + ;; c) ENABLE_GE_COV="on" ;; @@ -185,7 +185,7 @@ build_graphengine() # build all the target TARGET="ge_runner ge_compiler fwk_atc.bin atc_atc.bin opensrc_ascendcl ${TARGET}" fi - + make ${VERBOSE} ${TARGET} -j${THREAD_NUM} && make install if [ $? -ne 0 ] then @@ -214,13 +214,14 @@ if [[ "X$ENABLE_GE_UT" = "Xon" || "X$ENABLE_GE_COV" = "Xon" ]]; then cp ${BUILD_PATH}/tests/ut/ge/ut_libge_others_utest ${OUTPUT_PATH} cp ${BUILD_PATH}/tests/ut/ge/ut_libge_kernel_utest ${OUTPUT_PATH} - ${OUTPUT_PATH}/ut_libgraph && - ${OUTPUT_PATH}/ut_libge_multiparts_utest && - ${OUTPUT_PATH}/ut_libge_distinct_load_utest && - ${OUTPUT_PATH}/ut_libge_others_utest && - ${OUTPUT_PATH}/ut_libge_kernel_utest + RUN_TEST_CASE=${OUTPUT_PATH}/ut_libgraph && ${RUN_TEST_CASE} && + RUN_TEST_CASE=${OUTPUT_PATH}/ut_libge_multiparts_utest && ${RUN_TEST_CASE} && + RUN_TEST_CASE=${OUTPUT_PATH}/ut_libge_distinct_load_utest && ${RUN_TEST_CASE} && + RUN_TEST_CASE=${OUTPUT_PATH}/ut_libge_others_utest && ${RUN_TEST_CASE} && + RUN_TEST_CASE=${OUTPUT_PATH}/ut_libge_kernel_utest && ${RUN_TEST_CASE} if [[ "$?" -ne 0 ]]; then echo "!!! UT FAILED, PLEASE CHECK YOUR CHANGES !!!" + echo -e "\033[31m${RUN_TEST_CASE}\033[0m" exit 1; fi echo "Generating coverage statistics, please wait..." @@ -249,8 +250,8 @@ generate_package() NNENGINE_PATH="plugin/nnengine/ge_config" OPSKERNEL_PATH="plugin/opskernel" - ATC_LIB=("libc_sec.so" "libge_common.so" "libge_compiler.so" "libgraph.so" "libregister.so") - FWK_LIB=("libge_common.so" "libge_runner.so" "libgraph.so" "libregister.so") + ATC_LIB=("libc_sec.so" "libge_common.so" "libge_compiler.so" "libgraph.so" "libregister.so" "liberror_manager.so") + FWK_LIB=("libge_common.so" "libge_runner.so" "libgraph.so" "libregister.so" "liberror_manager.so") PLUGIN_OPSKERNEL=("libge_local_engine.so" "libge_local_opskernel_builder.so" "libhost_cpu_engine.so" "libhost_cpu_opskernel_builder.so" "optimizer_priority.pbtxt") PARSER_LIB=("lib_caffe_parser.so" "libfmk_onnx_parser.so" "libfmk_parser.so" "libparser_common.so") @@ -269,7 +270,7 @@ generate_package() mk_dir "${OUTPUT_PATH}/${FWK_BIN_PATH}" mk_dir "${OUTPUT_PATH}/${FWK_INCLUDE_PATH}" mk_dir "${OUTPUT_PATH}/${ATC_INCLUDE_PATH}" - + cd "${OUTPUT_PATH}" find ./ -name graphengine_lib.tar -exec rm {} \; diff --git a/cmake/external_libs/gtest.cmake b/cmake/external_libs/gtest.cmake index f2f50e7d..39888110 100755 --- a/cmake/external_libs/gtest.cmake +++ b/cmake/external_libs/gtest.cmake @@ -27,7 +27,7 @@ ExternalProject_Add(gtest_build URL ${REQ_URL} TLS_VERIFY OFF CONFIGURE_COMMAND ${CMAKE_COMMAND} -DCMAKE_CXX_FLAGS=${gtest_CXXFLAGS} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/gtest - -DBUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_MACOSX_RPATH=TRUE -Dgtest_disable_pthreads=ON + -DBUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_MACOSX_RPATH=TRUE BUILD_COMMAND $(MAKE) INSTALL_COMMAND $(MAKE) install EXCLUDE_FROM_ALL TRUE @@ -52,10 +52,27 @@ set_target_properties(gtest_main PROPERTIES target_include_directories(gtest INTERFACE ${GTEST_PKG_DIR}/include) target_include_directories(gtest_main INTERFACE ${GTEST_PKG_DIR}/include) + +add_library(gmock SHARED IMPORTED) + +set_target_properties(gmock PROPERTIES + IMPORTED_LOCATION ${GTEST_PKG_DIR}/lib/libgmock.so +) + +add_library(gmock_main SHARED IMPORTED) + +set_target_properties(gmock_main PROPERTIES + IMPORTED_LOCATION ${GTEST_PKG_DIR}/lib/libgmock_main.so +) + +target_include_directories(gmock INTERFACE ${GTEST_PKG_DIR}/include) +target_include_directories(gmock_main INTERFACE ${GTEST_PKG_DIR}/include) + + set(INSTALL_BASE_DIR "") set(INSTALL_LIBRARY_DIR lib) -install(FILES ${GTEST_PKG_DIR}/lib/libgtest.so ${GTEST_PKG_DIR}/lib/libgtest_main.so OPTIONAL +install(FILES ${GTEST_PKG_DIR}/lib/libgtest.so ${GTEST_PKG_DIR}/lib/libgtest_main.so ${GTEST_PKG_DIR}/lib/libgmock.so ${GTEST_PKG_DIR}/lib/libgmock_main.so OPTIONAL DESTINATION ${INSTALL_LIBRARY_DIR}) add_dependencies(gtest gtest_build) diff --git a/ge/CMakeLists.txt b/ge/CMakeLists.txt index db316ffa..8977ad85 100755 --- a/ge/CMakeLists.txt +++ b/ge/CMakeLists.txt @@ -103,6 +103,7 @@ set(TRAIN_SRC_LIST "common/profiling/profiling_manager.cc" "common/dump/dump_manager.cc" "common/dump/dump_properties.cc" + "common/dump/opdebug_register.cc" "common/dump/dump_op.cc" "common/profiling/ge_profiling.cc" "common/profiling/ge_runner_profiling.cc" @@ -133,7 +134,6 @@ set(TRAIN_SRC_LIST "graph/load/model_manager/data_dumper.cc" "graph/load/model_manager/data_inputer.cc" "graph/load/model_manager/davinci_model.cc" - "graph/load/model_manager/davinci_model_parser.cc" "graph/load/model_manager/model_manager.cc" "graph/load/model_manager/model_utils.cc" "graph/load/model_manager/aipp_utils.cc" @@ -428,6 +428,7 @@ set(INFER_SRC_LIST "common/dump/dump_properties.cc" "common/dump/dump_manager.cc" "common/dump/dump_op.cc" + "common/dump/opdebug_register.cc" "common/dump/dump_server.cc" "common/helper/model_cache_helper.cc" "ge_local_engine/engine/host_cpu_engine.cc" @@ -613,7 +614,6 @@ set(INFER_SRC_LIST "graph/load/model_manager/model_manager.cc" "graph/load/model_manager/data_inputer.cc" "graph/load/model_manager/davinci_model.cc" - "graph/load/model_manager/davinci_model_parser.cc" "graph/load/model_manager/model_utils.cc" "graph/load/model_manager/aipp_utils.cc" "graph/load/model_manager/tbe_handle_store.cc" diff --git a/ge/analyzer/analyzer.cc b/ge/analyzer/analyzer.cc index c63a6008..1f733f28 100755 --- a/ge/analyzer/analyzer.cc +++ b/ge/analyzer/analyzer.cc @@ -103,7 +103,7 @@ ge::Status Analyzer::Initialize() { // Initialize file string real_path = RealPath(kFilePath.c_str()); if (real_path.empty()) { - GELOGE(FAILED, "File path is invalid."); + GELOGE(FAILED, "[Check][AnalyzeFilePath]File path is empty, Path invalid."); return FAILED; } json_file_name_ = real_path + "/" + kAnalyzeFile; @@ -155,12 +155,12 @@ std::shared_ptr Analyzer::GetJsonObject(uint64_t session_id, uint64_t std::lock_guard lg(mutex_); auto iter = graph_infos_.find(session_id); if (iter == graph_infos_.end()) { - GELOGE(PARAM_INVALID, "session_id:%lu does not exist!", session_id); + GELOGE(PARAM_INVALID, "[Check][Session_id]session_id:%lu does not exist! graph_id:%lu.", session_id, graph_id); return nullptr; } else { auto iter1 = (iter->second).find(graph_id); if (iter1 == (iter->second).end()) { - GELOGE(PARAM_INVALID, "graph_id:%lu does not exist!", graph_id); + GELOGE(PARAM_INVALID, "[Check][Graph_id]graph_id:%lu does not exist! session_id:%lu.", graph_id, session_id); return nullptr; } GELOGI("GetJsonObject Success!session_id:%lu graph_id:%lu", session_id, graph_id); @@ -186,11 +186,11 @@ ge::Status Analyzer::CreateAnalyzerFile() { std::lock_guard lg(file_mutex_); int fd = open(json_file_name_.c_str(), O_WRONLY | O_CREAT | O_TRUNC, kFileAuthority); if (fd < 0) { - GELOGE(INTERNAL_ERROR, "Fail to open the file: %s.", json_file_name_.c_str()); + GELOGE(INTERNAL_ERROR, "[FileOpen][AnalyzeFile]Fail to open the analyze file: %s.", json_file_name_.c_str()); return INTERNAL_ERROR; } if (close(fd) != 0) { - GELOGE(INTERNAL_ERROR, "Fail to close the file: %s.", json_file_name_.c_str()); + GELOGE(INTERNAL_ERROR, "[FileClose][AnalyzeFile]Fail to close the analyze file: %s.", json_file_name_.c_str()); return INTERNAL_ERROR; } is_json_file_create_ = true; @@ -200,7 +200,7 @@ ge::Status Analyzer::CreateAnalyzerFile() { } ge::Status Analyzer::SaveAnalyzerDataToFile(uint64_t session_id, uint64_t graph_id) { - GELOGD("start to save analyze file!"); + GELOGD("start to save analyze file."); auto graph_info = GetJsonObject(session_id, graph_id); GE_CHECK_NOTNULL(graph_info); @@ -211,7 +211,7 @@ ge::Status Analyzer::SaveAnalyzerDataToFile(uint64_t session_id, uint64_t graph_ std::lock_guard lg(file_mutex_); json_file_.open(json_file_name_, std::ios::app); if (!json_file_.is_open()) { - GELOGE(FAILED, "analyzer file does not exist[%s]", json_file_name_.c_str()); + GELOGE(FAILED, "[Check][AnalyzeFile]analyze file does not exist[%s]", json_file_name_.c_str()); return PARAM_INVALID; } @@ -221,7 +221,7 @@ ge::Status Analyzer::SaveAnalyzerDataToFile(uint64_t session_id, uint64_t graph_ try { json_file_ << jsn.dump(kJsonDumpLevel) << std::endl; } catch (nlohmann::detail::type_error &e) { - GELOGE(FAILED, "analyzer file [%s] failed because [%s]", json_file_name_.c_str(), e.what()); + GELOGE(FAILED, "[Json.dump][GraphInfo]json.dump to analyze file [%s] failed because [%s], session_id:%lu, graph_id:%lu", json_file_name_.c_str(), e.what(), session_id, graph_id); ret_failed = true; } json_file_.close(); @@ -229,7 +229,7 @@ ge::Status Analyzer::SaveAnalyzerDataToFile(uint64_t session_id, uint64_t graph_ } ge::Status Analyzer::DoAnalyze(DataInfo &data_info) { - GELOGD("start to do analyzer!"); + GELOGD("start to do analyzer process!"); auto pnode = data_info.node_ptr; GE_CHECK_NOTNULL(pnode); @@ -241,7 +241,7 @@ ge::Status Analyzer::DoAnalyze(DataInfo &data_info) { GE_CHECK_NOTNULL(graph_info); auto status = SaveOpInfo(desc, data_info, graph_info); if (status != SUCCESS) { - GELOGE(status, "save op info failed!"); + GELOGE(status, "[Check][SaveOpInfo]save op info: desc_name [%s] desc_type [%s] failed!", desc->GetName().c_str(), desc->GetType().c_str()); return FAILED; } // create json file diff --git a/ge/client/ge_api.cc b/ge/client/ge_api.cc index d65d7667..f0cf9e03 100644 --- a/ge/client/ge_api.cc +++ b/ge/client/ge_api.cc @@ -32,6 +32,7 @@ #include "graph/common/ge_call_wrapper.h" #include "register/op_registry.h" #include "common/ge/tbe_plugin_manager.h" +#include "common/util/error_manager/error_manager.h" #include "toolchain/plog.h" using domi::OpRegistry; @@ -78,12 +79,21 @@ Status CheckOptionsValid(const std::map &options) { // Initialize GE, prepare for execution, call GELib::Initialize Status GEInitializeImpl(const std::map &options) { + ErrorManager::GetInstance().GenWorkStreamIdDefault(); GELOGT(TRACE_INIT, "GEInitialize start"); + std::string path_base = ge::GELib::GetPath(); + auto ret = ErrorManager::GetInstance().Init(path_base); + if (ret != SUCCESS) { + GELOGE(GE_CLI_INIT_FAILED, "ErrorManager init fail"); + return ret; + } + // 0.check init status if (g_ge_initialized) { GELOGW("GEInitialize is called more than once"); return SUCCESS; } + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOpsProtoInit); // Load OpsProto lib plugin std::string opsproto_path; GetOpsProtoPath(opsproto_path); @@ -98,6 +108,7 @@ Status GEInitializeImpl(const std::map &options) { return FAILED; } + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOther); // check options is valid GE_TIMESTAMP_START(CheckOptionsValid); if (CheckOptionsValid(options) != SUCCESS) { @@ -105,13 +116,15 @@ Status GEInitializeImpl(const std::map &options) { } GE_TIMESTAMP_END(CheckOptionsValid, "GEInitialize::CheckOptionsValid"); + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOpsProtoInit); GE_TIMESTAMP_START(InitPreparation); TBEPluginManager::Instance().InitPreparation(options); GE_TIMESTAMP_END(InitPreparation, "GEInitialize::InitPreparation"); // call Initialize GELOGT(TRACE_RUNNING, "Initializing environment"); + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOther); GE_TIMESTAMP_START(GELibInitialize); - Status ret = ge::GELib::Initialize(options); + ret = ge::GELib::Initialize(options); GE_TIMESTAMP_END(GELibInitialize, "GEInitialize::GELibInitialize"); if (ret != SUCCESS) { GELOGE(GE_CLI_INIT_FAILED, "geInitialize failed, error code = %u", ret); @@ -130,6 +143,7 @@ Status GEInitializeImpl(const std::map &options) { // Initialize GE, prepare for execution, call GELib::Initialize Status GEInitialize(const std::map &options) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOther); if (DlogReportInitialize() != SUCCESS) { GELOGW("Dlog report device log initialize failed."); } @@ -137,6 +151,7 @@ Status GEInitialize(const std::map &options) { } Status GEInitialize(const std::map &options) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOther); std::map str_options; for (auto &option : options) { if (option.first.GetString() == nullptr || option.second.GetString() == nullptr) { @@ -156,7 +171,10 @@ Status GEInitialize(const std::map &options) { // GE finalize, releasing all resources Status GEFinalize() { + ErrorManager::GetInstance().SetStage(ErrorMessage::kFinalize, ErrorMessage::kFinalize); GELOGT(TRACE_INIT, "GEFinalize start"); + + ErrorManager::GetInstance().GenWorkStreamIdDefault(); // check init status if (!g_ge_initialized) { GELOGW("GEFinalize is called before GEInitialize"); @@ -202,9 +220,20 @@ Status GEFinalize() { return ret; } +std::string GEGetErrorMsg() { + return ErrorManager::GetInstance().GetErrorMessage(); +} + +std::string GEGetWarningMsg() { + return ErrorManager::GetInstance().GetWarningMessage(); +} + // Initialize session,which calls innerSession Session::Session(const std::map &options) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOther); GELOGT(TRACE_INIT, "Session Constructor start"); + + ErrorManager::GetInstance().GenWorkStreamIdDefault(); // check init status sessionId_ = 0; if (!g_ge_initialized) { @@ -234,7 +263,10 @@ Session::Session(const std::map &options) { } Session::Session(const std::map &options) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOther); GELOGT(TRACE_INIT, "Session Constructor start"); + + ErrorManager::GetInstance().GenWorkStreamIdDefault(); // check init status sessionId_ = 0; if (!g_ge_initialized) { @@ -275,6 +307,7 @@ Session::Session(const std::map &options) { // session destructor Session::~Session() { + ErrorManager::GetInstance().SetStage(ErrorMessage::kFinalize, ErrorMessage::kFinalize); GELOGT(TRACE_INIT, "Session Destructor start"); // 0.check init status if (!g_ge_initialized) { @@ -310,12 +343,16 @@ Session::~Session() { } Status Session::AddGraph(uint32_t graph_id, const Graph &graph) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); std::map options; + ErrorManager::GetInstance().GenWorkStreamIdBySessionGraph(sessionId_, graph_id); return AddGraph(graph_id, graph, options); } Status Session::AddGraph(uint32_t graph_id, const Graph &graph, const std::map &options) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); GELOGT(TRACE_INIT, "Start to add graph in Session. graph_id: %u, session_id: %lu.", graph_id, sessionId_); + ErrorManager::GetInstance().GenWorkStreamIdBySessionGraph(sessionId_, graph_id); std::shared_ptr instance_ptr = ge::GELib::GetInstance(); if (instance_ptr == nullptr || !instance_ptr->InitFlag()) { GELOGE(GE_CLI_GE_NOT_INITIALIZED, "AddGraph failed in Session."); @@ -333,7 +370,9 @@ Status Session::AddGraph(uint32_t graph_id, const Graph &graph, const std::map &options) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); GELOGT(TRACE_INIT, "Start to add graph in Session. graph_id: %u, session_id: %lu.", graph_id, sessionId_); + ErrorManager::GetInstance().GenWorkStreamIdBySessionGraph(sessionId_, graph_id); std::shared_ptr instance_ptr = ge::GELib::GetInstance(); if (instance_ptr == nullptr || !instance_ptr->InitFlag()) { GELOGE(GE_CLI_GE_NOT_INITIALIZED, "AddGraph failed in Session."); @@ -360,13 +399,17 @@ Status Session::AddGraph(uint32_t graph_id, const Graph &graph, } Status Session::AddGraphWithCopy(uint32_t graph_id, const Graph &graph) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); + ErrorManager::GetInstance().GenWorkStreamIdBySessionGraph(sessionId_, graph_id); std::map options; return AddGraphWithCopy(graph_id, graph, options); } Status Session::AddGraphWithCopy(uint32_t graph_id, const Graph &graph, const std::map &options) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); GELOGT(TRACE_INIT, "Start to add graph in Session. graph_id: %u, session_id: %lu.", graph_id, sessionId_); + ErrorManager::GetInstance().GenWorkStreamIdBySessionGraph(sessionId_, graph_id); std::shared_ptr instance_ptr = ge::GELib::GetInstance(); if (instance_ptr == nullptr || !instance_ptr->InitFlag()) { GELOGE(GE_CLI_GE_NOT_INITIALIZED, "AddGraph failed in Session."); @@ -387,8 +430,10 @@ Status Session::AddGraphWithCopy(uint32_t graph_id, const Graph &graph, } Status Session::RemoveGraph(uint32_t graph_id) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); GELOGT(TRACE_INIT, "Session RemoveGraph start"); + ErrorManager::GetInstance().GenWorkStreamIdBySessionGraph(sessionId_, graph_id); // call RemoveGraph std::shared_ptr instance_ptr = ge::GELib::GetInstance(); if (!instance_ptr || !instance_ptr->InitFlag()) { @@ -455,8 +500,10 @@ void PrintOutputResult(std::vector &outputs) { } Status Session::RunGraph(uint32_t graph_id, const std::vector &inputs, std::vector &outputs) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); GELOGT(TRACE_INIT, "Session RunGraph start"); + ErrorManager::GetInstance().GenWorkStreamIdBySessionGraph(sessionId_, graph_id); std::vector graph_inputs = inputs; // call RunGraph std::shared_ptr instance_ptr = ge::GELib::GetInstance(); @@ -483,10 +530,12 @@ Status Session::RunGraph(uint32_t graph_id, const std::vector &inputs, s } Status Session::RegisterCallBackFunc(const std::string &key, const pCallBackFunc &callback) { + ErrorManager::GetInstance().GenWorkStreamIdDefault(); return ge::GELib::GetInstance()->SessionManagerObj().RegisterCallBackFunc(sessionId_, key, callback); } Status Session::RegisterCallBackFunc(const char *key, const session::pCallBackFunc &callback) { + ErrorManager::GetInstance().GenWorkStreamIdDefault(); std::string str_key; if (key != nullptr) { str_key = key; @@ -495,6 +544,8 @@ Status Session::RegisterCallBackFunc(const char *key, const session::pCallBackFu } Status Session::BuildGraph(uint32_t graph_id, const std::vector &inputs) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); + ErrorManager::GetInstance().GenWorkStreamIdBySessionGraph(sessionId_, graph_id); std::shared_ptr instance_ptr = ge::GELib::GetInstance(); if (instance_ptr == nullptr || !instance_ptr->InitFlag()) { GELOGE(GE_CLI_GE_NOT_INITIALIZED, "SessionConstructor failed"); @@ -511,6 +562,8 @@ Status Session::BuildGraph(uint32_t graph_id, const std::vector Status Session::RunGraphAsync(uint32_t graph_id, const std::vector &inputs, RunAsyncCallback callback) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelExecute, ErrorMessage::kModelExecute); + ErrorManager::GetInstance().GenWorkStreamIdBySessionGraph(sessionId_, graph_id); std::shared_ptr instance_ptr = ge::GELib::GetInstance(); if (instance_ptr == nullptr || !instance_ptr->InitFlag()) { GELOGE(GE_CLI_GE_NOT_INITIALIZED, "SessionConstructor failed"); @@ -529,6 +582,8 @@ Status Session::RunGraphAsync(uint32_t graph_id, const std::vector &var_names, std::vector &var_values) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelExecute, ErrorMessage::kModelExecute); + ErrorManager::GetInstance().GenWorkStreamIdDefault(); auto instance_ptr = ge::GELib::GetInstance(); if (instance_ptr == nullptr || !instance_ptr->InitFlag()) { GELOGE(GE_CLI_GE_NOT_INITIALIZED, "SessionConstructor failed"); @@ -544,6 +599,8 @@ Status Session::GetVariables(const std::vector &var_names, std::vec } Status Session::GetVariables(const std::vector &var_names, std::vector &var_values) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelExecute, ErrorMessage::kModelExecute); + ErrorManager::GetInstance().GenWorkStreamIdDefault(); auto instance_ptr = ge::GELib::GetInstance(); if (instance_ptr == nullptr || !instance_ptr->InitFlag()) { GELOGE(GE_CLI_GE_NOT_INITIALIZED, "SessionConstructor failed"); diff --git a/ge/common/CMakeLists.txt b/ge/common/CMakeLists.txt index c73e21c6..a6f8e57c 100755 --- a/ge/common/CMakeLists.txt +++ b/ge/common/CMakeLists.txt @@ -54,7 +54,7 @@ set(SRC_LIST "util.cc" "properties_manager.cc" "types.cc" - "model_parser/base.cc" + "model_parser/model_parser.cc" "kernel_store.cc" "tbe_kernel_store.cc" "cust_aicpu_kernel_store.cc" diff --git a/ge/common/cust_aicpu_kernel_store.cc b/ge/common/cust_aicpu_kernel_store.cc index 0bf4d819..1055989b 100755 --- a/ge/common/cust_aicpu_kernel_store.cc +++ b/ge/common/cust_aicpu_kernel_store.cc @@ -25,7 +25,7 @@ void CustAICPUKernelStore::AddCustAICPUKernel(const CustAICPUKernelPtr &kernel) } void CustAICPUKernelStore::LoadCustAICPUKernelBinToOpDesc(const std::shared_ptr &op_desc) const { - GELOGD("LoadCustAICPUKernelBinToOpDesc in"); + GELOGD("LoadCustAICPUKernelBinToOpDesc in."); if (op_desc != nullptr) { auto kernel_bin = FindKernel(op_desc->GetName()); if (kernel_bin != nullptr) { @@ -34,6 +34,6 @@ void CustAICPUKernelStore::LoadCustAICPUKernelBinToOpDesc(const std::shared_ptr< GELOGI("Load cust aicpu kernel:%s, %zu", kernel_bin->GetName().c_str(), kernel_bin->GetBinDataSize()); } } - GELOGD("LoadCustAICPUKernelBinToOpDesc success"); + GELOGD("LoadCustAICPUKernelBinToOpDesc success."); } } // namespace ge diff --git a/ge/common/dump/dump_manager.cc b/ge/common/dump/dump_manager.cc index 17019c5a..a659d9c6 100644 --- a/ge/common/dump/dump_manager.cc +++ b/ge/common/dump/dump_manager.cc @@ -22,6 +22,7 @@ namespace { const char *const kDumpOFF = "OFF"; const char *const kDumpoff = "off"; const char *const kDumpOn = "on"; +const uint64_t kInferSessionId = 0; } // namespace namespace ge { FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY DumpManager &DumpManager::GetInstance() { @@ -30,15 +31,14 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY DumpManager &DumpManager::GetIn } FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status DumpManager::SetDumpConf(const DumpConfig &dump_config) { - std::lock_guard lock(mutex_); - dump_properties_.ClearDumpPropertyValue(); - dump_properties_.ClearDumpInfo(); + DumpProperties dump_properties; std::string dump_status; std::string dump_path; std::string dump_mode; std::string dump_op_switch; if (dump_config.dump_status.empty()) { + dump_properties_map_.emplace(kInferSessionId, dump_properties); GELOGI("Dump does not open"); return SUCCESS; } @@ -46,14 +46,16 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status DumpManager::SetDumpConf dump_status = dump_config.dump_status; GELOGI("Dump status is %s", dump_status.c_str()); if (dump_config.dump_status == kDumpoff || dump_config.dump_status == kDumpOFF) { - dump_properties_.ClearDumpPropertyValue(); + dump_properties.ClearDumpPropertyValue(); + dump_properties_map_.emplace(kInferSessionId, dump_properties); return SUCCESS; } - dump_properties_.SetDumpStatus(dump_status); + dump_properties.SetDumpStatus(dump_status); dump_op_switch = dump_config.dump_op_switch; - dump_properties_.SetDumpOpSwitch(dump_op_switch); + dump_properties.SetDumpOpSwitch(dump_op_switch); if (dump_op_switch == kDumpoff && dump_config.dump_list.empty()) { + dump_properties_map_.emplace(kInferSessionId, dump_properties); GELOGE(PARAM_INVALID, "Dump list is invalid,dump_op_switch is %s", dump_op_switch.c_str()); return PARAM_INVALID; } @@ -67,15 +69,15 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status DumpManager::SetDumpConf GELOGI("Dump layer is %s in model", layer.c_str()); dump_layers.insert(layer); } - dump_properties_.AddPropertyValue(model_name, dump_layers); + dump_properties.AddPropertyValue(model_name, dump_layers); } if (dump_op_switch == kDumpOn) { - GELOGI("Start to dump model and single op,dumo op switch is %s", dump_op_switch.c_str()); + GELOGI("Start to dump model and single op,dump op switch is %s", dump_op_switch.c_str()); } else { GELOGI("Only dump model,dump op switch is %s", dump_op_switch.c_str()); } } else { - GELOGI("Only dump single op,dumo op switch is %s", dump_op_switch.c_str()); + GELOGI("Only dump single op,dump op switch is %s", dump_op_switch.c_str()); } dump_path = dump_config.dump_path; @@ -89,27 +91,39 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status DumpManager::SetDumpConf } dump_path = dump_path + CurrentTimeInStr() + "/"; GELOGI("Dump path is %s", dump_path.c_str()); - dump_properties_.SetDumpPath(dump_path); + dump_properties.SetDumpPath(dump_path); dump_mode = dump_config.dump_mode; GELOGI("Dump mode is %s", dump_mode.c_str()); - dump_properties_.SetDumpMode(dump_mode); + dump_properties.SetDumpMode(dump_mode); + dump_properties_map_.emplace(kInferSessionId, dump_properties); return SUCCESS; } -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY const DumpProperties &DumpManager::GetDumpProperties() { +FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY const DumpProperties &DumpManager::GetDumpProperties( + uint64_t session_id) { std::lock_guard lock(mutex_); - return dump_properties_; + auto iter = dump_properties_map_.find(session_id); + if (iter != dump_properties_map_.end()) { + return iter->second; + } + static DumpProperties default_properties; + return default_properties; } -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void DumpManager::SetModelName(const std::string &model_name) { +FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void DumpManager::AddDumpProperties( + uint64_t session_id, const DumpProperties &dump_properties) { std::lock_guard lock(mutex_); - model_name_ = model_name; + dump_properties_map_.emplace(session_id, dump_properties); } -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY const std::string &DumpManager::GetModelName() { +FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void DumpManager::RemoveDumpProperties(uint64_t session_id) { std::lock_guard lock(mutex_); - return model_name_; + auto iter = dump_properties_map_.find(session_id); + if (iter != dump_properties_map_.end()) { + dump_properties_map_.erase(iter); + } } + } // namespace ge diff --git a/ge/common/dump/dump_manager.h b/ge/common/dump/dump_manager.h index 53a643f9..095344b7 100644 --- a/ge/common/dump/dump_manager.h +++ b/ge/common/dump/dump_manager.h @@ -28,14 +28,14 @@ class DumpManager { static DumpManager &GetInstance(); Status SetDumpConf(const DumpConfig &dump_config); - const DumpProperties &GetDumpProperties(); - void SetModelName(const std::string &model_name); - const std::string &GetModelName(); + const DumpProperties &GetDumpProperties(uint64_t session_id); + const std::map &GetDumpPropertiesMap() { return dump_properties_map_; } + void AddDumpProperties(uint64_t session_id, const DumpProperties &dump_properties); + void RemoveDumpProperties(uint64_t session_id); private: - DumpProperties dump_properties_; std::mutex mutex_; - std::string model_name_; + std::map dump_properties_map_; }; } // namespace ge #endif // GE_COMMON_DUMP_DUMP_MANAGER_H_ diff --git a/ge/common/dump/dump_op.cc b/ge/common/dump/dump_op.cc index 5c768e22..0becbdc8 100755 --- a/ge/common/dump/dump_op.cc +++ b/ge/common/dump/dump_op.cc @@ -219,9 +219,9 @@ Status DumpOp::LaunchDumpOp() { op_mapping_info.set_dump_path(dump_path); op_mapping_info.set_flag(kAicpuLoadFlag); op_mapping_info.set_dump_step(dump_properties_.GetDumpStep()); - if (!dynamic_model_name_.empty()) { + op_mapping_info.set_model_id(dynamic_model_id_); + if (!dynamic_model_name_.empty() && dump_properties_.IsDumpOpen()) { op_mapping_info.set_model_name(dynamic_model_name_); - op_mapping_info.set_model_id(dynamic_model_id_); } SetOpMappingLoopAddr(global_step_, loop_per_iter_, loop_cond_, op_mapping_info); GELOGI("Dump step is %s ,dump path is %s ,in Launch dump op", dump_properties_.GetDumpStep().c_str(), @@ -253,7 +253,7 @@ Status DumpOp::LaunchDumpOp() { } op_mapping_info.mutable_task()->Add(std::move(task)); } - if (dump_properties_.GetDumpMode() == kDumpAll) { + if (dump_properties_.GetDumpMode() == kDumpAll || dump_properties_.IsOpDebugOpen()) { auto ret = DumpOutput(task); if (ret != SUCCESS) { GELOGE(ret, "Dump output failed when in dumping all"); diff --git a/ge/common/dump/dump_properties.cc b/ge/common/dump/dump_properties.cc index a4540367..3fbfd16b 100644 --- a/ge/common/dump/dump_properties.cc +++ b/ge/common/dump/dump_properties.cc @@ -122,6 +122,8 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void DumpProperties::ClearDumpI dump_path_.clear(); dump_step_.clear(); dump_mode_.clear(); + dump_op_switch_.clear(); + dump_status_.clear(); is_op_debug_ = false; op_debug_mode_ = 0; } @@ -201,7 +203,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY const std::string &DumpProperti } FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void DumpProperties::SetDumpOpSwitch( - const std::string dump_op_switch) { + const std::string &dump_op_switch) { dump_op_switch_ = dump_op_switch; } @@ -230,6 +232,8 @@ void DumpProperties::CopyFrom(const DumpProperties &other) { dump_path_ = other.dump_path_; dump_step_ = other.dump_step_; dump_mode_ = other.dump_mode_; + dump_status_ = other.dump_status_; + dump_op_switch_ = other.dump_op_switch_; model_dump_properties_map_ = other.model_dump_properties_map_; is_op_debug_ = other.is_op_debug_; diff --git a/ge/common/dump/dump_properties.h b/ge/common/dump/dump_properties.h index 682d2d08..8c064d58 100644 --- a/ge/common/dump/dump_properties.h +++ b/ge/common/dump/dump_properties.h @@ -65,7 +65,7 @@ class DumpProperties { const std::string &GetDumpStatus() const; - void SetDumpOpSwitch(const std::string dump_op_switch); + void SetDumpOpSwitch(const std::string &dump_op_switch); const std::string &GetDumpOpSwitch() const; @@ -81,11 +81,11 @@ class DumpProperties { const std::string &GetEnableDumpDebug() const {return enable_dump_debug_;} + private: void CopyFrom(const DumpProperties &other); void SetDumpDebugOptions(); - std::string enable_dump_; std::string enable_dump_debug_; diff --git a/ge/common/dump/opdebug_register.cc b/ge/common/dump/opdebug_register.cc new file mode 100644 index 00000000..340b89e5 --- /dev/null +++ b/ge/common/dump/opdebug_register.cc @@ -0,0 +1,148 @@ +/** + * 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. + */ + +#include "opdebug_register.h" + +namespace { +const size_t kOpDebugMemorySize = 2048UL; +const size_t kDebugP2pSize = 8UL; +} // namespace +namespace ge { +OpdebugRegister::~OpdebugRegister() {} + +Status OpdebugRegister::RegisterDebugForModel(rtModel_t model_handle, uint32_t op_debug_mode, DataDumper &data_dumper) { + GELOGD("Start to register debug for model in overflow"); + auto ret = MallocMemForOpdebug(); + if (ret != SUCCESS) { + GELOGE(ret, "Malloc memory for opdebug in model overflow failed ,ret:0x%X", ret); + return ret; + } + uint32_t debug_stream_id = 0; + uint32_t debug_task_id = 0; + auto rt_ret = rtDebugRegister(model_handle, op_debug_mode, op_debug_addr_, &debug_stream_id, &debug_task_id); + if (rt_ret != RT_ERROR_NONE) { + GELOGE(RT_FAILED, "rtDebugRegister error, ret: 0x%X", rt_ret); + return RT_ERROR_TO_GE_STATUS(rt_ret); + } + GELOGD("debug_task_id:%u, debug_stream_id:%u in model overflow", debug_task_id, debug_stream_id); + data_dumper.SaveOpDebugId(debug_task_id, debug_stream_id, p2p_debug_addr_, true); + return SUCCESS; +} + +void OpdebugRegister::UnregisterDebugForModel(rtModel_t model_handle) { + rtError_t rt_ret = RT_ERROR_NONE; + if (model_handle != nullptr) { + GELOGD("start to call rtDebugUnRegister in model overflow."); + rt_ret = rtDebugUnRegister(model_handle); + if (rt_ret != RT_ERROR_NONE) { + GELOGW("rtDebugUnRegister failed, ret: 0x%X", rt_ret); + } + } + + if (op_debug_addr_ != nullptr) { + rt_ret = rtFree(op_debug_addr_); + if (rt_ret != RT_ERROR_NONE) { + GELOGW("rtFree failed, ret: 0x%X", rt_ret); + } + op_debug_addr_ = nullptr; + } + + if (p2p_debug_addr_ != nullptr) { + rt_ret = rtFree(p2p_debug_addr_); + if (rt_ret != RT_ERROR_NONE) { + GELOGW("rtFree failed, ret: 0x%X", rt_ret); + } + p2p_debug_addr_ = nullptr; + } + return; +} + +Status OpdebugRegister::RegisterDebugForStream(rtStream_t stream, uint32_t op_debug_mode, DataDumper &data_dumper) { + GELOGD("Start to register debug for stream in stream overflow"); + auto ret = MallocMemForOpdebug(); + if (ret != SUCCESS) { + GELOGE(ret, "Malloc memory for opdebug in stream overflow ,ret:0x%X", ret); + return ret; + } + + uint32_t debug_stream_id = 0; + uint32_t debug_task_id = 0; +#ifdef ONLY_COMPILE_OPEN_SRC + auto rt_ret = rtDebugRegisterForStream(stream, op_debug_mode, op_debug_addr_, &debug_stream_id, &debug_task_id); + if (rt_ret != RT_ERROR_NONE) { + GELOGE(RT_FAILED, "rtDebugRegisterForStream error, ret: 0x%X", rt_ret); + return RT_ERROR_TO_GE_STATUS(rt_ret); + } +#endif + GELOGD("debug_task_id:%u, debug_stream_id:%u in stream overflow.", debug_task_id, debug_stream_id); + data_dumper.SaveOpDebugId(debug_task_id, debug_stream_id, p2p_debug_addr_, true); + return SUCCESS; +} + +void OpdebugRegister::UnregisterDebugForStream(rtStream_t stream) { + rtError_t rt_ret = RT_ERROR_NONE; +#ifdef ONLY_COMPILE_OPEN_SRC + if (stream != nullptr) { + GELOGD("start call rtDebugUnRegisterForStream in unknown shape over flow."); + rt_ret = rtDebugUnRegisterForStream(stream); + if (rt_ret != RT_ERROR_NONE) { + GELOGW("rtDebugUnRegisterForStream failed, ret: 0x%X", rt_ret); + } + } +#endif + + if (op_debug_addr_ != nullptr) { + rt_ret = rtFree(op_debug_addr_); + if (rt_ret != RT_ERROR_NONE) { + GELOGW("rtFree failed, ret: 0x%X", rt_ret); + } + op_debug_addr_ = nullptr; + } + + if (p2p_debug_addr_ != nullptr) { + rt_ret = rtFree(p2p_debug_addr_); + if (rt_ret != RT_ERROR_NONE) { + GELOGW("rtFree failed, ret: 0x%X", rt_ret); + } + p2p_debug_addr_ = nullptr; + } + return; +} + +Status OpdebugRegister::MallocMemForOpdebug() { + rtError_t rt_ret = rtMalloc(&op_debug_addr_, kOpDebugMemorySize, RT_MEMORY_DDR); + if (rt_ret != RT_ERROR_NONE) { + GELOGE(RT_FAILED, "rtMalloc error, ret: 0x%X", rt_ret); + return RT_ERROR_TO_GE_STATUS(rt_ret); + } + + uint64_t debug_addrs_tmp = static_cast(reinterpret_cast(op_debug_addr_)); + // For data dump, aicpu needs the pointer to pointer that save the real debug address. + rt_ret = rtMalloc(&p2p_debug_addr_, kDebugP2pSize, RT_MEMORY_HBM); + if (rt_ret != RT_ERROR_NONE) { + GELOGE(RT_FAILED, "rtMalloc error, ret: 0x%X", rt_ret); + return RT_ERROR_TO_GE_STATUS(rt_ret); + } + rt_ret = rtMemcpy(p2p_debug_addr_, sizeof(uint64_t), &debug_addrs_tmp, sizeof(uint64_t), RT_MEMCPY_HOST_TO_DEVICE); + if (rt_ret != RT_ERROR_NONE) { + GELOGE(RT_FAILED, "rtMemcpy to p2p_addr error: 0x%X", rt_ret); + return RT_ERROR_TO_GE_STATUS(rt_ret); + } + + return SUCCESS; +} + +} // namespace ge \ No newline at end of file diff --git a/ge/common/dump/opdebug_register.h b/ge/common/dump/opdebug_register.h new file mode 100644 index 00000000..1826287d --- /dev/null +++ b/ge/common/dump/opdebug_register.h @@ -0,0 +1,44 @@ +/** + * 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. + */ + +#ifndef GE_COMMON_DUMP_OPDEBUG_REGISTER_H_ +#define GE_COMMON_DUMP_OPDEBUG_REGISTER_H_ + +#include +#include "common/debug/ge_log.h" +#include "common/debug/log.h" +#include "graph/load/model_manager/data_dumper.h" + +namespace ge { +class OpdebugRegister { + public: + OpdebugRegister() = default; + ~OpdebugRegister(); + + Status RegisterDebugForModel(rtModel_t model_handle, uint32_t op_debug_mode, DataDumper &data_dumper); + void UnregisterDebugForModel(rtModel_t model_handle); + + Status RegisterDebugForStream(rtStream_t stream, uint32_t op_debug_mode, DataDumper &data_dumper); + void UnregisterDebugForStream(rtStream_t stream); + + private: + Status MallocMemForOpdebug(); + + void *op_debug_addr_ = nullptr; + void *p2p_debug_addr_ = nullptr; +}; +} // namespace ge +#endif // GE_COMMON_DUMP_OPDEBUG_REGISTER_H_ diff --git a/ge/common/formats/format_transfers/datatype_transfer.cc b/ge/common/formats/format_transfers/datatype_transfer.cc index ba3fcdf3..4ef866f5 100644 --- a/ge/common/formats/format_transfers/datatype_transfer.cc +++ b/ge/common/formats/format_transfers/datatype_transfer.cc @@ -111,7 +111,7 @@ Status CastKernel(const CastArgs &args, uint8_t *dst, const size_t data_size, co }; auto it = transfer_handle.find(trans_mode); if (it == transfer_handle.end()) { - return UNSUPPORTED; + return ACL_ERROR_GE_DATATYPE_INVALID; } else { return (it->second)(args, dst, data_size); } @@ -127,8 +127,8 @@ Status DataTypeTransfer::TransDataType(const CastArgs &args, TransResult &result std::string error = "Failed to trans data from datatype " + FmtToStr(TypeUtils::DataTypeToSerialString(args.src_data_type)) + " to " + FmtToStr(TypeUtils::DataTypeToSerialString(args.dst_data_type)) + " , it is not supported."; - GE_ERRORLOG_AND_ERRORMSG(UNSUPPORTED, error.c_str()); - return UNSUPPORTED; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_DATATYPE_INVALID, error.c_str()); + return ACL_ERROR_GE_DATATYPE_INVALID; } auto trans_mode = iter->second; @@ -136,14 +136,14 @@ Status DataTypeTransfer::TransDataType(const CastArgs &args, TransResult &result if (size <= 0) { std::string error = "Failed to calc size from data type" + FmtToStr(TypeUtils::DataTypeToSerialString(args.dst_data_type)) + ", it is not supported."; - GE_ERRORLOG_AND_ERRORMSG(PARAM_INVALID, error.c_str()); - return PARAM_INVALID; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_DATATYPE_INVALID, error.c_str()); + return ACL_ERROR_GE_DATATYPE_INVALID; } if (args.src_data_size > static_cast(SIZE_MAX / size)) { std::string error = "args.src_data_size" + FmtToStr(args.src_data_size) + " or data type size" + FmtToStr(size) + " is too big"; - GE_ERRORLOG_AND_ERRORMSG(PARAM_INVALID, error.c_str()); - return PARAM_INVALID; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_PARAM_INVALID, error.c_str()); + return ACL_ERROR_GE_PARAM_INVALID; } size_t total_size = static_cast(args.src_data_size * size); result.length = total_size; @@ -154,8 +154,8 @@ Status DataTypeTransfer::TransDataType(const CastArgs &args, TransResult &result std::shared_ptr dst(new (std::nothrow) uint8_t[total_size], std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to alloc the memory for dst buf %zu, data size %zu", total_size, args.src_data_size); - return OUT_OF_MEMORY; + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to alloc the memory for dst buf %zu, data size %zu", total_size, args.src_data_size); + return ACL_ERROR_GE_MEMORY_ALLOCATION; } if (CastKernel(args, dst.get(), args.src_data_size, trans_mode) != SUCCESS) { @@ -163,8 +163,8 @@ Status DataTypeTransfer::TransDataType(const CastArgs &args, TransResult &result FmtToStr(TypeUtils::DataTypeToSerialString(args.src_data_type)) + " to " + FmtToStr(TypeUtils::DataTypeToSerialString(args.dst_data_type)) + ", data size is " + FmtToStr(std::to_string(args.src_data_size)); - GE_ERRORLOG_AND_ERRORMSG(INTERNAL_ERROR, error.c_str()); - return INTERNAL_ERROR; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_INTERNAL_ERROR, error.c_str()); + return ACL_ERROR_GE_INTERNAL_ERROR; } result.data = dst; return SUCCESS; diff --git a/ge/common/formats/format_transfers/format_transfer_c1hwncoc0_hwcn.cc b/ge/common/formats/format_transfers/format_transfer_c1hwncoc0_hwcn.cc index 0cb581d7..706f401e 100644 --- a/ge/common/formats/format_transfers/format_transfer_c1hwncoc0_hwcn.cc +++ b/ge/common/formats/format_transfers/format_transfer_c1hwncoc0_hwcn.cc @@ -39,22 +39,22 @@ Status CheckArgsForC1hwncoc0ToHwcn(const TransArgs &args) { std::string error = "Dose not support trans format from " + FmtToStr(TypeUtils::FormatToSerialString(args.src_format)) + " to " + FmtToStr(TypeUtils::FormatToSerialString(args.dst_format)); - GE_ERRORLOG_AND_ERRORMSG(UNSUPPORTED, error.c_str()); - return UNSUPPORTED; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_FORMAT_INVALID, error.c_str()); + return ACL_ERROR_GE_FORMAT_INVALID; } if (!CheckDataTypeSupported(args.src_data_type)) { std::string error = "Failed to trans shape from NC1HWNCoC0 to HWCN, invalid data type" + FmtToStr(TypeUtils::DataTypeToSerialString(args.src_data_type)); - GE_ERRORLOG_AND_ERRORMSG(UNSUPPORTED, error.c_str()); - return UNSUPPORTED; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_DATATYPE_INVALID, error.c_str()); + return ACL_ERROR_GE_DATATYPE_INVALID; } if (!CheckShapeValid(src_shape, kC1hwncoc0DimsNum)) { - GELOGE(PARAM_INVALID, "Failed to check src shape %s", ShapeToString(src_shape).c_str()); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check src shape %s", ShapeToString(src_shape).c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } if (!CheckShapeValid(dst_shape, kHwcnDimsNum)) { - GELOGE(PARAM_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check dst shape %s.", ShapeToString(dst_shape).c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } auto cube_size = GetCubeSizeByDataType(args.src_data_type); if (src_shape.at(kC1hwncoc0C1) != (dst_shape.at(kHwcnC) - 1) / cube_size + 1 || @@ -63,8 +63,8 @@ Status CheckArgsForC1hwncoc0ToHwcn(const TransArgs &args) { src_shape.at(kC1hwncoc0C0) != cube_size) { std::string error = "Failed to check relationship between src and dst shape, src shape" + FmtToStr(ShapeToString(src_shape)) + ", dst shape" + FmtToStr(ShapeToString(dst_shape)); - GE_ERRORLOG_AND_ERRORMSG(PARAM_INVALID, error.c_str()); - return PARAM_INVALID; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_SHAPE_INVALID, error.c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; @@ -73,10 +73,10 @@ Status CheckArgsForC1hwncoc0ToHwcn(const TransArgs &args) { Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, int size, int64_t total_size) { std::shared_ptr dst(new (std::nothrow) uint8_t[total_size], std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld, shape %s", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld, shape %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), total_size, ShapeToString(args.dst_shape).c_str()); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } auto h = args.src_shape.at(kC1hwncoc0H); @@ -114,12 +114,12 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, int size auto ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to copy data from C1HWNCoC0[%ld, %ld, %ld, %ld, %ld, %ld] offset %ld to " "HWCN[%ld, %ld, %ld, %ld] offset %ld, err-code %d", c1_idx, h_idx, w_idx, n_idx, co_idx, c0_idx, src_offset, h_idx, w_idx, c_idx, n_idx, dst_offset, ret); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -132,8 +132,9 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, int size } // namespace Status FormatTransferC1hwncoc0Hwcn::TransFormat(const TransArgs &args, TransResult &result) { - if (CheckArgsForC1hwncoc0ToHwcn(args) != SUCCESS) { - return PARAM_INVALID; + Status ret = CheckArgsForC1hwncoc0ToHwcn(args); + if (ret != SUCCESS) { + return ret; } int size = GetSizeByDataType(args.src_data_type); int64_t total_size = GetItemNumByShape(args.dst_shape) * size; @@ -143,26 +144,27 @@ Status FormatTransferC1hwncoc0Hwcn::TransFormat(const TransArgs &args, TransResu result.length = static_cast(total_size); return SUCCESS; } - GELOGE(INTERNAL_ERROR, "Get %ld total size from dst shape %s, src shape %s", total_size, + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Get %ld total size from dst shape %s, src shape %s.", total_size, ShapeToString(args.dst_shape).c_str(), ShapeToString(args.src_shape).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } - GELOGD("Begin to trans format from C1HWNCoC0 to HWCN, src shape %s, data type %s, dst shape %s, memory size %ld", + GELOGD("Begin to trans format from C1HWNCoC0 to HWCN, src shape %s, data type %s, dst shape %s, memory size %ld.", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - if (GetDstDataAfterTrans(args, result, size, total_size) != SUCCESS) { - GELOGE(INTERNAL_ERROR, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", + ret = GetDstDataAfterTrans(args, result, size, total_size); + if (ret != SUCCESS) { + GELOGE(ret, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - return INTERNAL_ERROR; + return ret; } return SUCCESS; } Status FormatTransferC1hwncoc0Hwcn::TransShape(Format src_format, const std::vector &src_shape, DataType data_type, Format dst_format, std::vector &dst_shape) { - GELOGD("The shape derivation from C1HWNCoC0 to HWCN is not unique. Trans shape in this direction is not supported"); - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + GELOGD("The shape derivation from C1HWNCoC0 to HWCN is not unique. Trans shape in this direction is not supported."); + return ACL_ERROR_GE_FORMAT_INVALID; } REGISTER_FORMAT_TRANSFER(FormatTransferC1hwncoc0Hwcn, FORMAT_C1HWNCoC0, FORMAT_HWCN) diff --git a/ge/common/formats/format_transfers/format_transfer_dhwcn_fracz3D.cc b/ge/common/formats/format_transfers/format_transfer_dhwcn_fracz3D.cc index eaa19d7d..57574856 100644 --- a/ge/common/formats/format_transfers/format_transfer_dhwcn_fracz3D.cc +++ b/ge/common/formats/format_transfers/format_transfer_dhwcn_fracz3D.cc @@ -32,7 +32,7 @@ Status TransShapeToFz(int64_t d, int64_t n, int64_t c, int64_t h, int64_t w, Dat std::vector &dst_shape) { auto c0 = GetCubeSizeByDataType(data_type); if (c0 < 0) { - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } auto c1 = Ceil(c, c0); @@ -50,7 +50,7 @@ Status TransShapeToFz(int64_t d, int64_t n, int64_t c, int64_t h, int64_t w, Dat Status TransShapeDhwckToFz3D(const std::vector &src_shape, DataType data_type, std::vector &dst_shape) { if (!CheckShapeValid(src_shape, kDhwcnDimsNum)) { - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } auto d = src_shape.at(kDhwcnD); auto h = src_shape.at(kDhwcnH); @@ -62,7 +62,7 @@ Status TransShapeDhwckToFz3D(const std::vector &src_shape, DataType dat } Status TransFormatDhwckToFz3D(const TransArgs &args, TransResult &result) { if (!CheckShapeValid(args.src_shape, kDhwcnDimsNum)) { - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } int64_t d = args.src_shape[kDhwcnD]; int64_t h = args.src_shape[kDhwcnH]; @@ -94,10 +94,10 @@ Status TransFormatDhwckToFz3D(const TransArgs &args, TransResult &result) { std::shared_ptr dst(new (std::nothrow) uint8_t[dst_size], std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } for (int64_t di = 0; di < d; di++) { @@ -122,9 +122,9 @@ Status TransFormatDhwckToFz3D(const TransArgs &args, TransResult &result) { args.data + src_idx * data_size, static_cast(data_size)); } if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d, pad mode %d", + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d, pad mode %d", dst_offset, ret, pad_zero); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -149,28 +149,28 @@ Status FormatTransferDhwcnFractalZ3D::TransFormat(const TransArgs &args, TransRe return ret; } if (!IsTransShapeDstCorrect(args, expect_shape)) { - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } if (args.src_format == FORMAT_DHWCN && args.dst_format == FORMAT_FRACTAL_Z_3D) { return TransFormatDhwckToFz3D(args, result); } - return UNSUPPORTED; + return ACL_ERROR_GE_FORMAT_INVALID; } Status FormatTransferDhwcnFractalZ3D::TransShape(Format src_format, const std::vector &src_shape, DataType data_type, Format dst_format, std::vector &dst_shape) { if (CheckDataTypeSupport(data_type) != SUCCESS) { - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } if (src_format == FORMAT_DHWCN && dst_format == FORMAT_FRACTAL_Z_3D) { return TransShapeDhwckToFz3D(src_shape, data_type, dst_shape); } - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + return ACL_ERROR_GE_FORMAT_INVALID; } REGISTER_FORMAT_TRANSFER(FormatTransferDhwcnFractalZ3D, FORMAT_DHWCN, FORMAT_FRACTAL_Z_3D) diff --git a/ge/common/formats/format_transfers/format_transfer_dhwnc_fracz3D_transpose.cc b/ge/common/formats/format_transfers/format_transfer_dhwnc_fracz3D_transpose.cc index 3a18312a..6e1e47ed 100644 --- a/ge/common/formats/format_transfers/format_transfer_dhwnc_fracz3D_transpose.cc +++ b/ge/common/formats/format_transfers/format_transfer_dhwnc_fracz3D_transpose.cc @@ -32,7 +32,7 @@ Status TransShapeToFz(int64_t d, int64_t n, int64_t c, int64_t h, int64_t w, Dat std::vector &dst_shape) { auto c0 = GetCubeSizeByDataType(data_type); if (c0 < 0) { - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } auto c1 = Ceil(c, c0); @@ -50,7 +50,7 @@ Status TransShapeToFz(int64_t d, int64_t n, int64_t c, int64_t h, int64_t w, Dat Status TransShapeDhwncToFz3DTranspose(const std::vector &src_shape, DataType data_type, std::vector &dst_shape) { if (!CheckShapeValid(src_shape, kDhwncDimsNum)) { - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } auto d = src_shape.at(kDhwncD); auto h = src_shape.at(kDhwncH); @@ -62,7 +62,7 @@ Status TransShapeDhwncToFz3DTranspose(const std::vector &src_shape, Dat } Status TransFormatDhwncToFz3DTranspose(const TransArgs &args, TransResult &result) { if (!CheckShapeValid(args.src_shape, kDhwncDimsNum)) { - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } int64_t d = args.src_shape[kDhwncD]; int64_t h = args.src_shape[kDhwncH]; @@ -95,10 +95,10 @@ Status TransFormatDhwncToFz3DTranspose(const TransArgs &args, TransResult &resul std::shared_ptr dst(new (std::nothrow) uint8_t[dst_size], std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } for (int64_t di = 0; di < d; di++) { @@ -123,9 +123,9 @@ Status TransFormatDhwncToFz3DTranspose(const TransArgs &args, TransResult &resul args.data + src_idx * data_size, static_cast(data_size)); } if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d, pad mode %d", + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d, pad mode %d", dst_offset, ret, pad_zero); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -150,28 +150,28 @@ Status FormatTransferDhwncFractalZ3DTranspose::TransFormat(const TransArgs &args return ret; } if (!IsTransShapeDstCorrect(args, expect_shape)) { - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } if (args.src_format == ge::FORMAT_DHWNC && args.dst_format == ge::FORMAT_FRACTAL_Z_3D_TRANSPOSE) { return TransFormatDhwncToFz3DTranspose(args, result); } - return UNSUPPORTED; + return ACL_ERROR_GE_FORMAT_INVALID; } Status FormatTransferDhwncFractalZ3DTranspose::TransShape(Format src_format, const std::vector &src_shape, DataType data_type, Format dst_format, std::vector &dst_shape) { if (CheckDataTypeSupport(data_type) != SUCCESS) { - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } if (src_format == FORMAT_DHWNC && dst_format == FORMAT_FRACTAL_Z_3D_TRANSPOSE) { return TransShapeDhwncToFz3DTranspose(src_shape, data_type, dst_shape); } - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + return ACL_ERROR_GE_FORMAT_INVALID; } REGISTER_FORMAT_TRANSFER(FormatTransferDhwncFractalZ3DTranspose, FORMAT_DHWNC, FORMAT_FRACTAL_Z_3D_TRANSPOSE) diff --git a/ge/common/formats/format_transfers/format_transfer_fractal_nz.cc b/ge/common/formats/format_transfers/format_transfer_fractal_nz.cc index c3b288c1..bb9b71de 100755 --- a/ge/common/formats/format_transfers/format_transfer_fractal_nz.cc +++ b/ge/common/formats/format_transfers/format_transfer_fractal_nz.cc @@ -87,8 +87,8 @@ Status TransShapeToFracNz(const ShapeVector &src_shape, DataType data_type, Shap hw_shape.push_back(DIM_DEFAULT_VALUE); hw_shape.push_back(src_shape[kNdDimIndexN]); if (!IsShapeValid(dst_shape)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; default: @@ -106,8 +106,8 @@ Status TransShapeToFracNz(const ShapeVector &src_shape, DataType data_type, Shap hw_shape.push_back(src_shape[size - kNdDimCountBackwardsWH]); hw_shape.push_back(src_shape[size - kNdDimCountBackwardsW]); if (!IsShapeValid(dst_shape)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; } @@ -117,14 +117,14 @@ Status CheckShapeRelation(const TransArgs &args, ShapeVector &hw_shape) { ShapeVector expect_src_shape; auto ret = TransShapeToFracNz(args.dst_shape, args.src_data_type, expect_src_shape, hw_shape); if (ret != SUCCESS) { - GELOGE(INTERNAL_ERROR, "Trans shape from %s to %s, shape %s to %s, data type %s failed", + GELOGE(ret, "Trans shape from %s to %s, shape %s to %s, data type %s failed", TypeUtils::FormatToSerialString(args.dst_format).c_str(), TypeUtils::FormatToSerialString(args.src_format).c_str(), ShapeToString(args.dst_shape).c_str(), ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); - return INTERNAL_ERROR; + return ret; } if (!IsTransShapeSrcCorrect(args, expect_src_shape)) { - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; } @@ -139,10 +139,10 @@ Status TransFormatFromNdToFracNz(const TransArgs &args, TransResult &result, con std::shared_ptr dst(new (std::nothrow) uint8_t[dst_size](), std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } // src&dst_shape can be written as times*H*W & times*W1*H1*H0*W0, respectively. dst_shape_size >= kDimNum4D @@ -175,8 +175,8 @@ Status TransFormatFromNdToFracNz(const TransArgs &args, TransResult &result, con auto ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size * w0)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); - return INTERNAL_ERROR; + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } auto w1_head = num_w1 * w0; @@ -189,8 +189,8 @@ Status TransFormatFromNdToFracNz(const TransArgs &args, TransResult &result, con auto ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); - return INTERNAL_ERROR; + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -210,10 +210,10 @@ Status TransFormatFromFracNzToNd(const TransArgs &args, TransResult &result, con std::shared_ptr dst(new (std::nothrow) uint8_t[dst_size], std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } auto times = dst_hw_shape.at(kNdDimIndexN); @@ -246,8 +246,8 @@ Status TransFormatFromFracNzToNd(const TransArgs &args, TransResult &result, con ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size * w0)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); - return INTERNAL_ERROR; + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } auto w1_head = num_w1 * w0; @@ -260,8 +260,8 @@ Status TransFormatFromFracNzToNd(const TransArgs &args, TransResult &result, con ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); - return INTERNAL_ERROR; + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -273,13 +273,19 @@ Status TransFormatFromFracNzToNd(const TransArgs &args, TransResult &result, con } // namespace Status FormatTransferFractalNz::TransFormat(const TransArgs &args, TransResult &result) { - if (!IsDataTypeSupport(args.src_data_type) || !CheckShape(args.src_format, args.src_shape) || - !IsShapeValid(args.dst_shape)) { - GELOGE(PARAM_INVALID, "Trans format from %s to %s, src shape %s, dst shape %s, data type %s is not supported", + if (!IsDataTypeSupport(args.src_data_type)) { + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Trans format from %s to %s, src shape %s, dst shape %s, data type %s is not supported", + TypeUtils::FormatToSerialString(args.src_format).c_str(), + TypeUtils::FormatToSerialString(args.dst_format).c_str(), ShapeToString(args.src_shape).c_str(), + ShapeToString(args.dst_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); + return ACL_ERROR_GE_DATATYPE_INVALID; + } + if (!CheckShape(args.src_format, args.src_shape) || !IsShapeValid(args.dst_shape)) { + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Trans format from %s to %s, src shape %s, dst shape %s, data type %s is not supported", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), ShapeToString(args.src_shape).c_str(), ShapeToString(args.dst_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } GELOGD("Begin to trans format from %s to %s, src shape %s, dst shape %s, data type %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), @@ -292,7 +298,7 @@ Status FormatTransferFractalNz::TransFormat(const TransArgs &args, TransResult & return ret; } if (!IsTransShapeDstCorrect(args, expect_shape)) { - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return TransFormatFromNdToFracNz(args, result, hw_shape); } @@ -300,31 +306,38 @@ Status FormatTransferFractalNz::TransFormat(const TransArgs &args, TransResult & Status FormatTransferFractalNz::TransShape(Format src_format, const ShapeVector &src_shape, DataType data_type, Format dst_format, ShapeVector &dst_shape) { if (!IsDataTypeSupport(data_type)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID, + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Trans format from %s to %s, src shape %s, data type %s is not supported", TypeUtils::FormatToSerialString(src_format).c_str(), TypeUtils::FormatToSerialString(dst_format).c_str(), ShapeToString(src_shape).c_str(), TypeUtils::DataTypeToSerialString(data_type).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } if (!CheckShape(src_format, src_shape)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID, + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Trans format from %s to %s, src shape %s, data type %s is not supported", TypeUtils::FormatToSerialString(src_format).c_str(), TypeUtils::FormatToSerialString(dst_format).c_str(), ShapeToString(src_shape).c_str(), TypeUtils::DataTypeToSerialString(data_type).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } ShapeVector hw_shape; return TransShapeToFracNz(src_shape, data_type, dst_shape, hw_shape); } Status FormatTransferFractalNzND::TransFormat(const TransArgs &args, TransResult &result) { - if (!IsDataTypeSupport(args.src_data_type) || !IsShapeValid(args.src_shape) || - !CheckShape(args.dst_format, args.dst_shape)) { - GELOGE(PARAM_INVALID, "Trans format from %s to %s, src shape %s, dst shape %s, data type %s is not supported", + if (!IsDataTypeSupport(args.src_data_type)) { + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Trans format from %s to %s, src shape %s, dst shape %s, data type %s is not supported", + TypeUtils::FormatToSerialString(args.src_format).c_str(), + TypeUtils::FormatToSerialString(args.dst_format).c_str(), ShapeToString(args.src_shape).c_str(), + ShapeToString(args.dst_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); + return ACL_ERROR_GE_DATATYPE_INVALID; + } + + if (!IsShapeValid(args.src_shape) || !CheckShape(args.dst_format, args.dst_shape)) { + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Trans format from %s to %s, src shape %s, dst shape %s, data type %s is not supported", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), ShapeToString(args.src_shape).c_str(), ShapeToString(args.dst_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } GELOGD("Begin to trans format from %s to %s, src shape %s, dst shape %s, data type %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), @@ -332,8 +345,9 @@ Status FormatTransferFractalNzND::TransFormat(const TransArgs &args, TransResult ShapeToString(args.dst_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); ShapeVector hw_shape; - if (CheckShapeRelation(args, hw_shape) != SUCCESS) { - return PARAM_INVALID; + Status ret = CheckShapeRelation(args, hw_shape); + if (ret != SUCCESS) { + return ret; } return TransFormatFromFracNzToNd(args, result, hw_shape); } @@ -342,7 +356,7 @@ Status FormatTransferFractalNzND::TransShape(Format src_format, const ShapeVecto Format dst_format, ShapeVector &dst_shape) { GELOGD("The shape derivation from %s to %s is not unique. Trans shape is not supported", TypeUtils::FormatToSerialString(src_format).c_str(), TypeUtils::FormatToSerialString(dst_format).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + return ACL_ERROR_GE_FORMAT_INVALID; } REGISTER_FORMAT_TRANSFER(FormatTransferFractalNz, FORMAT_ND, FORMAT_FRACTAL_NZ) diff --git a/ge/common/formats/format_transfers/format_transfer_fractal_z.cc b/ge/common/formats/format_transfers/format_transfer_fractal_z.cc index 45c6d157..712f7c61 100644 --- a/ge/common/formats/format_transfers/format_transfer_fractal_z.cc +++ b/ge/common/formats/format_transfers/format_transfer_fractal_z.cc @@ -42,7 +42,7 @@ Status CheckDataTypeSupport(DataType data_type) { return GetSizeByDataType(data_ Status TransShapeToFz(int64_t n, int64_t c, int64_t h, int64_t w, DataType data_type, std::vector &dst_shape) { auto c0 = GetCubeSizeByDataType(data_type); if (c0 < 0) { - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } auto c1 = Ceil(c, c0); @@ -54,16 +54,16 @@ Status TransShapeToFz(int64_t n, int64_t c, int64_t h, int64_t w, DataType data_ dst_shape.push_back(kNiSize); dst_shape.push_back(c0); if (!IsShapeValid(dst_shape)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID, "Failed to check dst shape %s", + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; } Status TransShapeNchwToFz(const std::vector &src_shape, DataType data_type, std::vector &dst_shape) { if (!CheckShapeValid(src_shape, kNchwDimsNum)) { - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } auto n = src_shape.at(kNchwN); @@ -75,7 +75,7 @@ Status TransShapeNchwToFz(const std::vector &src_shape, DataType data_t Status TransShapeHwcnToFz(const std::vector &src_shape, DataType data_type, std::vector &dst_shape) { if (!CheckShapeValid(src_shape, kHwcnDimsNum)) { - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } auto h = src_shape.at(kHwcnH); @@ -88,7 +88,7 @@ Status TransShapeHwcnToFz(const std::vector &src_shape, DataType data_t Status TransShapeNhwcToFz(const std::vector &src_shape, DataType data_type, std::vector &dst_shape) { if (!CheckShapeValid(src_shape, kNhwcDimsNum)) { - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } auto n = src_shape.at(kNhwcN); @@ -127,10 +127,10 @@ Status TransFormatFromNchwToFz(const TransArgs &args, TransResult &result) { std::shared_ptr dst(new (std::nothrow) uint8_t[dst_size], std::default_delete()); GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( dst == nullptr, - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); - return OUT_OF_MEMORY;); + return ACL_ERROR_GE_MEMORY_ALLOCATION;); for (int64_t vfi = 0; vfi < vf_cnt; vfi++) { // vertical fractal matrix base index @@ -163,8 +163,8 @@ Status TransFormatFromNchwToFz(const TransArgs &args, TransResult &result) { if (protected_size < size) { std::string error = "Failed to operate the dst memory, protected_size is " + FmtToStr(protected_size) + " and size is " + FmtToStr(size); - GE_ERRORLOG_AND_ERRORMSG(INTERNAL_ERROR, error.c_str()); - return INTERNAL_ERROR; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_PARAM_INVALID, error.c_str()); + return ACL_ERROR_GE_PARAM_INVALID; } char *dst_data = reinterpret_cast(dst.get() + offset); const char *src_data = reinterpret_cast(args.data + src_offset * size); @@ -173,9 +173,9 @@ Status TransFormatFromNchwToFz(const TransArgs &args, TransResult &result) { } } if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d pad mode %d", offset, + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d pad mode %d", offset, ret, need_pad_zero); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -213,10 +213,10 @@ Status TransFormatHwcnToFz(const TransArgs &args, TransResult &result) { std::shared_ptr dst(new (std::nothrow) uint8_t[dst_size], std::default_delete()); GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( dst == nullptr, - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); - return OUT_OF_MEMORY;); + return ACL_ERROR_GE_MEMORY_ALLOCATION;); for (int64_t c1i = 0; c1i < c1; c1i++) { for (int64_t hi = 0; hi < h; hi++) { @@ -235,9 +235,9 @@ Status TransFormatHwcnToFz(const TransArgs &args, TransResult &result) { static_cast(data_size)); } else { if (protected_size < data_size) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory, protected_size is %ld and size is %ld", + GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Failed to operate the dst memory, protected_size is %ld and size is %ld", protected_size, data_size); - return INTERNAL_ERROR; + return ACL_ERROR_GE_PARAM_INVALID; } int64_t src_idx = hi * wcn + wi * cn + (c1i * c0 + c0i) * n + n1n0i; char *dst_data = reinterpret_cast(dst.get() + dst_offset); @@ -247,9 +247,9 @@ Status TransFormatHwcnToFz(const TransArgs &args, TransResult &result) { } } if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d, pad mode %d", + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d, pad mode %d", dst_offset, ret, pad_zero); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -288,10 +288,10 @@ Status TransFormatNhwcToFz(const TransArgs &args, TransResult &result) { std::shared_ptr dst(new (std::nothrow) uint8_t[dst_size], std::default_delete()); GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( dst == nullptr, - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); - return OUT_OF_MEMORY;); + return ACL_ERROR_GE_MEMORY_ALLOCATION;); for (int64_t c1i = 0; c1i < c1; c1i++) { for (int64_t hi = 0; hi < h; hi++) { @@ -310,9 +310,9 @@ Status TransFormatNhwcToFz(const TransArgs &args, TransResult &result) { static_cast(data_size)); } else { if (protected_size < data_size) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory, protected_size is %ld and size is %ld", + GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Failed to operate the dst memory, protected_size is %ld and size is %ld", protected_size, data_size); - return INTERNAL_ERROR; + return ACL_ERROR_GE_PARAM_INVALID; } int64_t src_idx = n1n0i * hwc + hi * wc + wi * c + (c1i * c0 + c0i); char *dst_data = reinterpret_cast(dst.get() + dst_offset); @@ -322,9 +322,9 @@ Status TransFormatNhwcToFz(const TransArgs &args, TransResult &result) { } } if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d, pad mode %d", + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d, pad mode %d", dst_offset, ret, pad_zero); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -349,7 +349,7 @@ Status FormatTransferFractalZ::TransFormat(const TransArgs &args, TransResult &r return ret; } if (!IsTransShapeDstCorrect(args, expect_shape)) { - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } if (args.src_format == FORMAT_NHWC && args.dst_format == FORMAT_FRACTAL_Z) { @@ -364,13 +364,13 @@ Status FormatTransferFractalZ::TransFormat(const TransArgs &args, TransResult &r return TransFormatFromNchwToFz(args, result); } - return UNSUPPORTED; + return ACL_ERROR_GE_FORMAT_INVALID; } Status FormatTransferFractalZ::TransShape(Format src_format, const std::vector &src_shape, DataType data_type, Format dst_format, std::vector &dst_shape) { if (CheckDataTypeSupport(data_type) != SUCCESS) { - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } if (src_format == FORMAT_NHWC && dst_format == FORMAT_FRACTAL_Z) { @@ -383,7 +383,7 @@ Status FormatTransferFractalZ::TransShape(Format src_format, const std::vector dst(new (std::nothrow) uint8_t[dst_size](), std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } // The src&dst_shape can be written as times*H*W & times*H1*W1*H0*W0, respectively. dst_shape_size >= kDimNum4D auto times = hw_shape.at(kNdDimIndexN); @@ -179,8 +179,8 @@ Status TransFormatFromNdToFracZz(const TransArgs &args, TransResult &result, con auto ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size * w0)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); - return INTERNAL_ERROR; + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } auto w1_head = num_w1 * w0; @@ -195,8 +195,8 @@ Status TransFormatFromNdToFracZz(const TransArgs &args, TransResult &result, con auto ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); - return INTERNAL_ERROR; + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -217,10 +217,10 @@ Status TransFormatFromFracZzToNd(const TransArgs &args, TransResult &result, con std::shared_ptr dst(new (std::nothrow) uint8_t[dst_size](), std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } // The src&dst_shape can be written as times*H*W & times*H1*W1*H0*W0, respectively. dst_shape_size >= kDimNum4D @@ -257,8 +257,8 @@ Status TransFormatFromFracZzToNd(const TransArgs &args, TransResult &result, con auto ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size * w0)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); - return INTERNAL_ERROR; + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } auto w1_head = num_w1 * w0; @@ -273,8 +273,8 @@ Status TransFormatFromFracZzToNd(const TransArgs &args, TransResult &result, con auto ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); - return INTERNAL_ERROR; + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to operate the dst memory at offset %ld, error-code %d", dst_offset, ret); + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -287,13 +287,19 @@ Status TransFormatFromFracZzToNd(const TransArgs &args, TransResult &result, con } // namespace Status FormatTransferFractalZz::TransFormat(const TransArgs &args, TransResult &result) { - if (!IsDataTypeSupport(args.src_data_type) || !CheckShape(args.src_format, args.src_shape) || - !IsShapeValid(args.dst_shape)) { - GELOGE(PARAM_INVALID, "Not support trans format from %s to %s, src shape %s, dst shape %s, data type %s", + if (!IsDataTypeSupport(args.src_data_type)) { + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Not support trans format from %s to %s, src shape %s, dst shape %s, data type %s", + TypeUtils::FormatToSerialString(args.src_format).c_str(), + TypeUtils::FormatToSerialString(args.dst_format).c_str(), ShapeToString(args.src_shape).c_str(), + ShapeToString(args.dst_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); + return ACL_ERROR_GE_DATATYPE_INVALID; + } + if (!CheckShape(args.src_format, args.src_shape) || !IsShapeValid(args.dst_shape)) { + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Not support trans format from %s to %s, src shape %s, dst shape %s, data type %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), ShapeToString(args.src_shape).c_str(), ShapeToString(args.dst_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } GELOGD("Begin to trans format from %s to %s, src shape %s, dst shape %s, data type %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), @@ -306,7 +312,7 @@ Status FormatTransferFractalZz::TransFormat(const TransArgs &args, TransResult & return ret; } if (!IsTransShapeDstCorrect(args, expect_shape)) { - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return TransFormatFromNdToFracZz(args, result, hw_shape); } @@ -314,31 +320,38 @@ Status FormatTransferFractalZz::TransFormat(const TransArgs &args, TransResult & Status FormatTransferFractalZz::TransShape(Format src_format, const ShapeVector &src_shape, DataType data_type, Format dst_format, ShapeVector &dst_shape) { if (!IsDataTypeSupport(data_type)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID, + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Not support trans format from %s to %s, src shape %s, data type %s", TypeUtils::FormatToSerialString(src_format).c_str(), TypeUtils::FormatToSerialString(dst_format).c_str(), ShapeToString(src_shape).c_str(), TypeUtils::DataTypeToSerialString(data_type).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } if (!CheckShape(src_format, src_shape)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID, + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Not support trans format from %s to %s, src shape %s, data type %s", TypeUtils::FormatToSerialString(src_format).c_str(), TypeUtils::FormatToSerialString(dst_format).c_str(), ShapeToString(src_shape).c_str(), TypeUtils::DataTypeToSerialString(data_type).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } ShapeVector hw_shape; return TransShapeToFracZz(src_shape, data_type, dst_shape, hw_shape); } Status FormatTransferFractalZzND::TransFormat(const TransArgs &args, TransResult &result) { - if (!IsDataTypeSupport(args.src_data_type) || !IsShapeValid(args.src_shape) || - !CheckShape(args.dst_format, args.dst_shape)) { - GELOGE(PARAM_INVALID, "Not support trans format from %s to %s, src shape %s, dst shape %s, data type %s", + if (!IsDataTypeSupport(args.src_data_type)) { + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Not support trans format from %s to %s, src shape %s, dst shape %s, data type %s", + TypeUtils::FormatToSerialString(args.src_format).c_str(), + TypeUtils::FormatToSerialString(args.dst_format).c_str(), ShapeToString(args.src_shape).c_str(), + ShapeToString(args.dst_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); + return ACL_ERROR_GE_DATATYPE_INVALID; + } + + if (!IsShapeValid(args.src_shape) || !CheckShape(args.dst_format, args.dst_shape)) { + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Not support trans format from %s to %s, src shape %s, dst shape %s, data type %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), ShapeToString(args.src_shape).c_str(), ShapeToString(args.dst_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } GELOGD("Begin to trans format from %s to %s, src shape %s, dst shape %s, data type %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), @@ -346,8 +359,9 @@ Status FormatTransferFractalZzND::TransFormat(const TransArgs &args, TransResult ShapeToString(args.dst_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); ShapeVector hw_shape; - if (CheckShapeRelation(args, hw_shape) != SUCCESS) { - return PARAM_INVALID; + Status ret = CheckShapeRelation(args, hw_shape); + if (ret != SUCCESS) { + return ret; } return TransFormatFromFracZzToNd(args, result, hw_shape); } @@ -356,7 +370,7 @@ Status FormatTransferFractalZzND::TransShape(Format src_format, const ShapeVecto Format dst_format, ShapeVector &dst_shape) { GELOGD("The shape derivation from %s to %s is not unique. Trans shape is not supported", TypeUtils::FormatToSerialString(src_format).c_str(), TypeUtils::FormatToSerialString(dst_format).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + return ACL_ERROR_GE_FORMAT_INVALID; } REGISTER_FORMAT_TRANSFER(FormatTransferFractalZz, FORMAT_ND, FORMAT_FRACTAL_ZZ) diff --git a/ge/common/formats/format_transfers/format_transfer_fracz_hwcn.cc b/ge/common/formats/format_transfers/format_transfer_fracz_hwcn.cc index 80164941..e84033ed 100755 --- a/ge/common/formats/format_transfers/format_transfer_fracz_hwcn.cc +++ b/ge/common/formats/format_transfers/format_transfer_fracz_hwcn.cc @@ -37,25 +37,25 @@ Status CheckArgsForFracZToHwcn(const TransArgs &args) { std::string error = "Dose not support trans format from " + FmtToStr(TypeUtils::FormatToSerialString(args.src_format)) + " to " + FmtToStr(TypeUtils::FormatToSerialString(args.dst_format)); - GE_ERRORLOG_AND_ERRORMSG(UNSUPPORTED, error.c_str()); - return UNSUPPORTED; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_FORMAT_INVALID, error.c_str()); + return ACL_ERROR_GE_FORMAT_INVALID; } if (!CheckDataTypeSupported(args.src_data_type)) { - GELOGE(UNSUPPORTED, "Failed to trans shape from FORMAT_FRACTAL_Z to HWCN, invalid data type %s", + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Failed to trans shape from FORMAT_FRACTAL_Z to HWCN, invalid data type %s", TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); - return UNSUPPORTED; + return ACL_ERROR_GE_DATATYPE_INVALID; } if (!CheckShapeValid(src_shape, kFracZDimsNum)) { - GELOGE(PARAM_INVALID, "Failed to check src shape %s", ShapeToString(src_shape).c_str()); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check src shape %s", ShapeToString(src_shape).c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } if (!CheckShapeValid(dst_shape, kHwcnDimsNum)) { - GELOGE(PARAM_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } int64_t c0 = GetCubeSizeByDataType(args.src_data_type); if (c0 < 0) { - return PARAM_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } int64_t c1 = Ceil(dst_shape.at(kHwcnC), c0); int64_t n0 = Ceil(dst_shape.at(kHwcnN), static_cast(kNiSize)); @@ -64,8 +64,8 @@ Status CheckArgsForFracZToHwcn(const TransArgs &args) { std::string error = "Failed to check relationship between src shape" + FmtToStr(ShapeToString(src_shape)) + " and dst shape" + FmtToStr(ShapeToString(dst_shape)); - GE_ERRORLOG_AND_ERRORMSG(UNSUPPORTED, error.c_str()); - return PARAM_INVALID; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_SHAPE_INVALID, error.c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; @@ -74,10 +74,10 @@ Status CheckArgsForFracZToHwcn(const TransArgs &args) { Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const int size, const int64_t total_size) { std::shared_ptr dst(new (std::nothrow) uint8_t[total_size], std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld, shape %s", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld, shape %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), total_size, ShapeToString(args.dst_shape).c_str()); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } auto n0 = args.src_shape.at(kFracZN0); @@ -113,11 +113,11 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in auto ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to copy data from FracZ offset %ld to HWCN[%ld, %ld, %ld, %ld] " "offset %ld, err-code %d", src_offset, h_idx, w_idx, c_idx, n_idx, dst_offset, ret); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -130,8 +130,9 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in } // namespace Status FormatTransferFracZHwcn::TransFormat(const TransArgs &args, TransResult &result) { - if (CheckArgsForFracZToHwcn(args) != SUCCESS) { - return PARAM_INVALID; + Status ret = CheckArgsForFracZToHwcn(args); + if (ret != SUCCESS) { + return ret; } int size = GetSizeByDataType(args.src_data_type); auto total_size = GetItemNumByShape(args.dst_shape) * size; @@ -142,18 +143,19 @@ Status FormatTransferFracZHwcn::TransFormat(const TransArgs &args, TransResult & return SUCCESS; } - GELOGE(INTERNAL_ERROR, "Get %ld total size from dst shape %s, src shape %s", total_size, + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Get %ld total size from dst shape %s, src shape %s", total_size, ShapeToString(args.dst_shape).c_str(), ShapeToString(args.src_shape).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } GELOGD("Begin to trans format from FracZ to HWCN, src shape %s, data type %s, dst shape %s, memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - if (GetDstDataAfterTrans(args, result, size, total_size) != SUCCESS) { - GELOGE(INTERNAL_ERROR, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", + ret = GetDstDataAfterTrans(args, result, size, total_size); + if (ret != SUCCESS) { + GELOGE(ret, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - return INTERNAL_ERROR; + return ret; } return SUCCESS; } @@ -161,7 +163,7 @@ Status FormatTransferFracZHwcn::TransFormat(const TransArgs &args, TransResult & Status FormatTransferFracZHwcn::TransShape(Format src_format, const std::vector &src_shape, DataType data_type, Format dst_format, std::vector &dst_shape) { GELOGD("The shape derivation from FracZ to HWCN is not unique. Trans shape in this direction is not supported"); - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + return ACL_ERROR_GE_FORMAT_INVALID; } REGISTER_FORMAT_TRANSFER(FormatTransferFracZHwcn, FORMAT_FRACTAL_Z, FORMAT_HWCN) diff --git a/ge/common/formats/format_transfers/format_transfer_fracz_nchw.cc b/ge/common/formats/format_transfers/format_transfer_fracz_nchw.cc index 90bf8fcb..3795208d 100755 --- a/ge/common/formats/format_transfers/format_transfer_fracz_nchw.cc +++ b/ge/common/formats/format_transfers/format_transfer_fracz_nchw.cc @@ -38,32 +38,32 @@ Status CheckArgsForFracZToNchw(const TransArgs &args) { FmtToStr(TypeUtils::FormatToSerialString(args.src_format)) + " to " + FmtToStr(TypeUtils::FormatToSerialString(args.dst_format)); GE_ERRORLOG_AND_ERRORMSG(UNSUPPORTED, error.c_str()); - return UNSUPPORTED; + return ACL_ERROR_GE_FORMAT_INVALID; } if (!CheckDataTypeSupported(args.src_data_type)) { - GELOGE(UNSUPPORTED, "Failed to trans shape from FORMAT_FRACTAL_Z to NCHW, invalid data type %s", + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Failed to trans shape from FORMAT_FRACTAL_Z to NCHW, invalid data type %s", TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); - return UNSUPPORTED; + return ACL_ERROR_GE_DATATYPE_INVALID; } if (!CheckShapeValid(src_shape, kFracZDimsNum)) { - GELOGE(PARAM_INVALID, "Failed to check src shape %s", ShapeToString(src_shape).c_str()); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check src shape %s", ShapeToString(src_shape).c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } if (!CheckShapeValid(dst_shape, kNchwDimsNum)) { - GELOGE(PARAM_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } int64_t c0 = GetCubeSizeByDataType(args.src_data_type); if (c0 < 0) { - return PARAM_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } int64_t c1 = Ceil(dst_shape.at(kNchwC), c0); int64_t n0 = Ceil(dst_shape.at(kNchwN), static_cast(kNiSize)); if (src_shape.at(kFracZHWC1) != dst_shape.at(kNchwH) * dst_shape.at(kNchwW) * c1 || src_shape.at(kFracZC0) != c0 || src_shape.at(kFracZNi) != kNiSize || src_shape.at(kFracZN0) != n0) { - GELOGE(PARAM_INVALID, "Failed to check relationship between src and dst shape, src shape %s, dst shape %s", + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check relationship between src and dst shape, src shape %s, dst shape %s", ShapeToString(src_shape).c_str(), ShapeToString(dst_shape).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; @@ -72,10 +72,10 @@ Status CheckArgsForFracZToNchw(const TransArgs &args) { Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const int size, const int64_t total_size) { std::shared_ptr dst(new (std::nothrow) uint8_t[total_size], std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld, shape %s", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld, shape %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), total_size, ShapeToString(args.dst_shape).c_str()); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } auto n0 = args.src_shape.at(kFracZN0); @@ -111,11 +111,11 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in auto ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to copy data from FracZ offset %ld to NCHW[%ld, %ld, %ld, %ld] offset %ld, " "err-code %d", src_offset, n_idx, c_idx, h_idx, w_idx, dst_offset, ret); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -128,8 +128,9 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in } // namespace Status FormatTransferFracZNchw::TransFormat(const TransArgs &args, TransResult &result) { - if (CheckArgsForFracZToNchw(args) != SUCCESS) { - return PARAM_INVALID; + Status ret = CheckArgsForFracZToNchw(args); + if (ret != SUCCESS) { + return ret; } int size = GetSizeByDataType(args.src_data_type); auto total_size = GetItemNumByShape(args.dst_shape) * size; @@ -140,19 +141,20 @@ Status FormatTransferFracZNchw::TransFormat(const TransArgs &args, TransResult & return SUCCESS; } - GELOGE(INTERNAL_ERROR, "Get %ld total size from dst shape %s, src shape %s", total_size, + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Get %ld total size from dst shape %s, src shape %s", total_size, ShapeToString(args.dst_shape).c_str(), ShapeToString(args.src_shape).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } GELOGD("Begin to trans format from FracZ to NCHW, src shape %s, data type %s, dst shape %s, memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - if (GetDstDataAfterTrans(args, result, size, total_size) != SUCCESS) { - GELOGE(INTERNAL_ERROR, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", + ret = GetDstDataAfterTrans(args, result, size, total_size); + if (ret != SUCCESS) { + GELOGE(ret, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - return INTERNAL_ERROR; + return ret; } return SUCCESS; } @@ -160,7 +162,7 @@ Status FormatTransferFracZNchw::TransFormat(const TransArgs &args, TransResult & Status FormatTransferFracZNchw::TransShape(Format src_format, const std::vector &src_shape, DataType data_type, Format dst_format, std::vector &dst_shape) { GELOGD("The shape derivation from FracZ to NCHW is not unique. Trans shape in this direction is not supported"); - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + return ACL_ERROR_GE_FORMAT_INVALID; } REGISTER_FORMAT_TRANSFER(FormatTransferFracZNchw, FORMAT_FRACTAL_Z, FORMAT_NCHW) diff --git a/ge/common/formats/format_transfers/format_transfer_hwcn_c1hwncoc0.cc b/ge/common/formats/format_transfers/format_transfer_hwcn_c1hwncoc0.cc index 1e29baf2..16aa26f8 100755 --- a/ge/common/formats/format_transfers/format_transfer_hwcn_c1hwncoc0.cc +++ b/ge/common/formats/format_transfers/format_transfer_hwcn_c1hwncoc0.cc @@ -43,9 +43,9 @@ Status TransShapeHwcnToC1hwncoc0(const DataType &data_type, const std::vector expect_dst_shape; auto ret = TransShapeHwcnToC1hwncoc0(args.src_data_type, args.src_shape, expect_dst_shape); @@ -77,12 +77,12 @@ Status CheckArgsForHwcnToC1hwncoc0(const TransArgs &args) { return ret; } if (args.dst_shape != expect_dst_shape) { - GELOGE(PARAM_INVALID, + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to trans format, src and dst shape are not compatible. src shape %s, dst shape %s, " "expect dst shape %s", ShapeToString(args.src_shape).c_str(), ShapeToString(args.dst_shape).c_str(), ShapeToString(expect_dst_shape).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; @@ -91,10 +91,10 @@ Status CheckArgsForHwcnToC1hwncoc0(const TransArgs &args) { Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const int size, const int64_t total_size) { std::shared_ptr dst(new (std::nothrow) uint8_t[total_size], std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld, shape %s", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld, shape %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), total_size, ShapeToString(args.dst_shape).c_str()); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } auto h = args.src_shape.at(kHwcnH); @@ -135,22 +135,22 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in auto ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to copy data from HWCN[%ld, %ld, %ld, %ld] offset %ld to " "C1HWNCoC0[%ld, %ld, %ld, %ld, %ld, %ld] offset %ld, err-code %d", h_idx, w_idx, c_idx, n_idx, src_offset, c1_idx, h_idx, w_idx, n_idx, co_idx, c0_idx, dst_offset, ret); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } else { auto ret = memset_s(dst.get() + dst_offset, static_cast(protected_size), 0, static_cast(size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to set to 0 to C1HWNCoC0[%ld, %ld, %ld, %ld, %ld, %ld] offset %ld, " "err-code %d", c1_idx, h_idx, w_idx, n_idx, co_idx, c0_idx, dst_offset, ret); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -166,8 +166,9 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in } // namespace Status FormatTransferHwcnC1hwncoc0::TransFormat(const TransArgs &args, TransResult &result) { - if (CheckArgsForHwcnToC1hwncoc0(args) != SUCCESS) { - return PARAM_INVALID; + Status ret = CheckArgsForHwcnToC1hwncoc0(args); + if (ret != SUCCESS) { + return ret; } int size = GetSizeByDataType(args.src_data_type); auto total_size = GetItemNumByShape(args.dst_shape) * size; @@ -178,18 +179,20 @@ Status FormatTransferHwcnC1hwncoc0::TransFormat(const TransArgs &args, TransResu return SUCCESS; } - GELOGE(INTERNAL_ERROR, "Get %ld total size from dst shape %s, src shape %s", total_size, + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Get %ld total size from dst shape %s, src shape %s", total_size, ShapeToString(args.dst_shape).c_str(), ShapeToString(args.src_shape).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } GELOGD("Begin to trans format from HWCN to C1HWNCoC0, src shape %s, data type %s, dst shape %s, memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - if (GetDstDataAfterTrans(args, result, size, total_size) != SUCCESS) { - GELOGE(INTERNAL_ERROR, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", + + ret = GetDstDataAfterTrans(args, result, size, total_size); + if (ret != SUCCESS) { + GELOGE(ret, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - return INTERNAL_ERROR; + return ret; } return SUCCESS; } @@ -198,15 +201,15 @@ Status FormatTransferHwcnC1hwncoc0::TransShape(Format src_format, const std::vec DataType data_type, Format dst_format, std::vector &dst_shape) { if (src_format == FORMAT_HWCN && CheckDataTypeSupported(data_type)) { if (!CheckShapeValid(src_shape, kHwcnDimsNum)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID, "Failed to check src shape %s", + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check src shape %s", ShapeToString(src_shape).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return TransShapeHwcnToC1hwncoc0(data_type, src_shape, dst_shape); } else if (src_format != FORMAT_HWCN) { - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + return ACL_ERROR_GE_FORMAT_INVALID; } else { - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } } diff --git a/ge/common/formats/format_transfers/format_transfer_nc1hwc0_nhwc.cc b/ge/common/formats/format_transfers/format_transfer_nc1hwc0_nhwc.cc index fd09b34c..2234bf05 100755 --- a/ge/common/formats/format_transfers/format_transfer_nc1hwc0_nhwc.cc +++ b/ge/common/formats/format_transfers/format_transfer_nc1hwc0_nhwc.cc @@ -37,33 +37,33 @@ Status CheckArgsForNc1hwc0ToNhwc(const TransArgs &args) { std::string error = "Dose not support trans format from " + FmtToStr(TypeUtils::FormatToSerialString(args.src_format)) + " to " + FmtToStr(TypeUtils::FormatToSerialString(args.dst_format)); - GE_ERRORLOG_AND_ERRORMSG(UNSUPPORTED, error.c_str()); - return UNSUPPORTED; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_FORMAT_INVALID, error.c_str()); + return ACL_ERROR_GE_FORMAT_INVALID; } if (!CheckDataTypeSupported(args.src_data_type)) { - GELOGE(UNSUPPORTED, "Failed to trans shape from NC1HWC0 to NHWC, invalid data type %s", + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Failed to trans shape from NC1HWC0 to NHWC, invalid data type %s", TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); - return UNSUPPORTED; + return ACL_ERROR_GE_DATATYPE_INVALID; } if (!CheckShapeValid(args.src_shape, kNc1hwc0DimsNum)) { - GELOGE(PARAM_INVALID, "Failed to check src shape %s", ShapeToString(args.src_shape).c_str()); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check src shape %s", ShapeToString(args.src_shape).c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } if (!CheckShapeValid(args.dst_shape, kNhwcDimsNum)) { - GELOGE(PARAM_INVALID, "Failed to check dst shape %s", ShapeToString(args.dst_shape).c_str()); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check dst shape %s", ShapeToString(args.dst_shape).c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } int64_t c0 = GetCubeSizeByDataType(args.src_data_type); if (c0 <= 0) { - GELOGE(PARAM_INVALID, "Failed to get cube size, the data type is invalid"); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Failed to get cube size, the data type is invalid"); + return ACL_ERROR_GE_DATATYPE_INVALID; } if (src_shape.at(kNc1hwc0H) != dst_shape.at(kNhwcH) || src_shape.at(kNc1hwc0W) != dst_shape.at(kNhwcW) || src_shape.at(kNc1hwc0N) != dst_shape.at(kNhwcN) || src_shape.at(kNc1hwc0C0) != c0 || src_shape.at(kNc1hwc0C1) != (Ceil(dst_shape.at(kNhwcC), c0))) { - GELOGE(PARAM_INVALID, "Failed to check relationship between src and dst shape, src shape %s, dst shape %s", + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check relationship between src and dst shape, src shape %s, dst shape %s", ShapeToString(src_shape).c_str(), ShapeToString(dst_shape).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; @@ -72,10 +72,10 @@ Status CheckArgsForNc1hwc0ToNhwc(const TransArgs &args) { Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const int size, const int64_t total_size) { std::shared_ptr dst(new (std::nothrow) uint8_t[total_size], std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld, shape %s", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld, shape %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), total_size, ShapeToString(args.dst_shape).c_str()); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } auto h = args.src_shape.at(kNc1hwc0H); @@ -109,11 +109,11 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in auto ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to copy data from NC1HWC0[%ld, %ld, %ld, %ld, %ld] offset %ld to NHWC[%ld, %ld, %ld, %ld]" " offset %ld, err-code %d", n_idx, c1_idx, h_idx, w_idx, c0_idx, src_offset, n_idx, c_idx, h_idx, w_idx, dst_offset, ret); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -126,8 +126,9 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in } // namespace Status FormatTransferNc1hwc0Nhwc::TransFormat(const TransArgs &args, TransResult &result) { - if (CheckArgsForNc1hwc0ToNhwc(args) != SUCCESS) { - return PARAM_INVALID; + Status ret = CheckArgsForNc1hwc0ToNhwc(args); + if (ret != SUCCESS) { + return ret; } int size = GetSizeByDataType(args.src_data_type); auto total_size = GetItemNumByShape(args.dst_shape) * size; @@ -138,18 +139,20 @@ Status FormatTransferNc1hwc0Nhwc::TransFormat(const TransArgs &args, TransResult return SUCCESS; } - GELOGE(INTERNAL_ERROR, "Get %ld total size from dst shape %s, src shape %s", total_size, + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Get %ld total size from dst shape %s, src shape %s", total_size, ShapeToString(args.dst_shape).c_str(), ShapeToString(args.src_shape).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } GELOGD("Begin to trans format from NC1HWC0 to NCHW, src shape %s, data type %s, dst shape %s, memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - if (GetDstDataAfterTrans(args, result, size, total_size) != SUCCESS) { - GELOGE(INTERNAL_ERROR, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", + + ret = GetDstDataAfterTrans(args, result, size, total_size); + if (ret != SUCCESS) { + GELOGE(ret, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - return INTERNAL_ERROR; + return ret; } return SUCCESS; } @@ -157,7 +160,7 @@ Status FormatTransferNc1hwc0Nhwc::TransFormat(const TransArgs &args, TransResult Status FormatTransferNc1hwc0Nhwc::TransShape(Format src_format, const std::vector &src_shape, DataType data_type, Format dst_format, std::vector &dst_shape) { GELOGD("The shape derivation from NC1HWC0 to NHWC is not unique. Trans shape in this direction is not supported"); - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + return ACL_ERROR_GE_FORMAT_INVALID; } REGISTER_FORMAT_TRANSFER(FormatTransferNc1hwc0Nhwc, FORMAT_NC1HWC0, FORMAT_NHWC) diff --git a/ge/common/formats/format_transfers/format_transfer_nchw_fz_c04.cc b/ge/common/formats/format_transfers/format_transfer_nchw_fz_c04.cc index dd8721c0..795f8ff5 100644 --- a/ge/common/formats/format_transfers/format_transfer_nchw_fz_c04.cc +++ b/ge/common/formats/format_transfers/format_transfer_nchw_fz_c04.cc @@ -45,7 +45,7 @@ Status CheckDataTypeSupport(DataType data_type) { return GetSizeByDataType(data_ Status TransShape(int64_t n, int64_t c, int64_t h, int64_t w, DataType data_type, std::vector &dst_shape) { auto c0 = GetCubeSizeByDataType(data_type); if (c0 < 0) { - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } auto chw = c * h * w; @@ -59,9 +59,9 @@ Status TransShape(int64_t n, int64_t c, int64_t h, int64_t w, DataType data_type dst_shape.push_back(c0); if (!IsShapeValid(dst_shape)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID, "Failed to check dst shape %s", + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; } @@ -69,7 +69,7 @@ Status TransShape(int64_t n, int64_t c, int64_t h, int64_t w, DataType data_type Status TransShapeNchwToFzC04(const std::vector &src_shape, DataType data_type, std::vector &dst_shape) { if (!CheckShapeValid(src_shape, kNchwDimsNum)) { - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } auto n = src_shape.at(kNchwN); @@ -94,8 +94,8 @@ Status TransFormatFromNchwToFzC04(const TransArgs &args, TransResult &result) { std::vector expect_shape = {n, h, w, c}; auto ret = ge::formats::Transpose(data, args.src_shape, args.src_data_type, perm_arg_1, trans_result_1); if (ret != SUCCESS) { - GELOGE(INTERNAL_ERROR, "Failed to Transpose from NCHW to HWCN"); - return NOT_CHANGED; + GELOGE(ret, "Failed to Transpose from NCHW to HWCN"); + return ret; } TransArgs args_tmp = args; @@ -104,8 +104,8 @@ Status TransFormatFromNchwToFzC04(const TransArgs &args, TransResult &result) { // check size it should be same with original size_t expect_size = n * c * h * w * size; // before has do check about mul if (trans_result_1.length != expect_size) { - GELOGE(INTERNAL_ERROR, "size is not match after transpose!"); - return NOT_CHANGED; + GELOGE(ACL_ERROR_GE_PARAM_INVALID, "size is not match after transpose!"); + return ACL_ERROR_GE_PARAM_INVALID; } // prepare for padding in chw @@ -118,20 +118,20 @@ Status TransFormatFromNchwToFzC04(const TransArgs &args, TransResult &result) { // data overflow check totally GE_IF_BOOL_EXEC(!CheckInt64MulOverflow(h_o, w_o), - GELOGE(INTERNAL_ERROR, "int64 mul overflow.A[%ld], B[%ld]", h_o, w_o); - return INTERNAL_ERROR); + GELOGE(ACL_ERROR_GE_INTERNAL_ERROR, "int64 mul overflow.A[%ld], B[%ld]", h_o, w_o); + return ACL_ERROR_GE_INTERNAL_ERROR); GE_IF_BOOL_EXEC(!CheckInt64MulOverflow(n_o, c_o), - GELOGE(INTERNAL_ERROR, "int64 mul overflow.A[%ld], B[%ld]", n_o, c_o); - return INTERNAL_ERROR); + GELOGE(ACL_ERROR_GE_INTERNAL_ERROR, "int64 mul overflow.A[%ld], B[%ld]", n_o, c_o); + return ACL_ERROR_GE_INTERNAL_ERROR); auto t1 = h_o * w_o; auto t2 = n_o * c_o; GE_IF_BOOL_EXEC(!CheckInt64MulOverflow(t1, t2), GELOGE(INTERNAL_ERROR, "int64 mul overflow.A[%ld], B[%ld]", t1, t2); - return INTERNAL_ERROR); + return ACL_ERROR_GE_INTERNAL_ERROR); int64_t total_ele_cnt = n_o * c_o * h_o * w_o; GE_IF_BOOL_EXEC(!CheckInt64MulOverflow(total_ele_cnt, size), - GELOGE(INTERNAL_ERROR, "int64 mul overflow.A[%ld], B[%d]", total_ele_cnt, size); - return INTERNAL_ERROR); + GELOGE(ACL_ERROR_GE_INTERNAL_ERROR, "int64 mul overflow.A[%ld], B[%d]", total_ele_cnt, size); + return ACL_ERROR_GE_INTERNAL_ERROR); int64_t dst_size = total_ele_cnt * size; if (dst_size == 0) { result.length = 0; @@ -140,15 +140,15 @@ Status TransFormatFromNchwToFzC04(const TransArgs &args, TransResult &result) { std::shared_ptr dst(new (std::nothrow) uint8_t[dst_size], std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } auto retMem = memset_s(dst.get(), dst_size, 0, dst_size); if (retMem != EOK) { - GELOGE(INTERNAL_ERROR, "memst failed!"); - return INTERNAL_ERROR; + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "memst failed!"); + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } // copy data auto block = c * h * w * size; @@ -159,8 +159,8 @@ Status TransFormatFromNchwToFzC04(const TransArgs &args, TransResult &result) { for (auto k = 0; k < n; k++) { ret = memcpy_s(p_d + k * stride, protectSize, p_s + k * block, block); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "memcpy_s failed!"); - return INTERNAL_ERROR; + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "memcpy_s failed!"); + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } protectSize = protectSize - block; } @@ -169,8 +169,8 @@ Status TransFormatFromNchwToFzC04(const TransArgs &args, TransResult &result) { std::vector perm_arg_2 = {2, 0, 1, 3}; ret = ge::formats::Transpose(dst.get(), shape_o, args.src_data_type, perm_arg_2, result); if (ret != SUCCESS) { - GELOGE(INTERNAL_ERROR, "Failed to Transpose from NCHW to HWCN"); - return NOT_CHANGED; + GELOGE(ret, "Failed to Transpose from NCHW to HWCN"); + return ret; } return SUCCESS; @@ -180,7 +180,7 @@ Status PaddingNC(const TransArgs &args, TransArgs &args_tmp, std::shared_ptr kMaxDimsNumC) { - GELOGE(PARAM_INVALID, "Invalie dim c num[%lu].It should be in (0,4]", c); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Invalie dim c num[%lu].It should be in (0,4]", c); + return ACL_ERROR_GE_SHAPE_INVALID; } auto n_o = Ceil(n, c0) * c0; @@ -205,21 +205,21 @@ Status PaddingNC(const TransArgs &args, TransArgs &args_tmp, std::shared_ptr()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } auto ret = memset_s(dst.get(), dst_size, 0, dst_size); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, "memst failed!"); - return INTERNAL_ERROR; + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "memst failed!"); + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } auto p_s = args.data; @@ -249,8 +249,8 @@ Status PaddingNC(const TransArgs &args, TransArgs &args_tmp, std::shared_ptr dst = nullptr; auto ret = PaddingNC(args, args_tmp, dst); if (ret != SUCCESS) { - GELOGE(INTERNAL_ERROR, "Padding in NC axis failed!"); + GELOGE(ret, "Padding in NC axis failed!"); return ret; } @@ -281,26 +281,26 @@ Status FormatTransferNchwToFZC04::TransFormat(const TransArgs &args, TransResult } if (!IsTransShapeDstCorrect(args_tmp, expect_shape)) { - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } if (args_tmp.src_format == FORMAT_NCHW && args_tmp.dst_format == FORMAT_FRACTAL_Z_C04) { return TransFormatFromNchwToFzC04(args_tmp, result); } - return UNSUPPORTED; + return ACL_ERROR_GE_FORMAT_INVALID; } Status FormatTransferNchwToFZC04::TransShape(Format src_format, const std::vector &src_shape, DataType data_type, Format dst_format, std::vector &dst_shape) { if (CheckDataTypeSupport(data_type) != SUCCESS) { - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } if (src_format == FORMAT_NCHW && dst_format == FORMAT_FRACTAL_Z_C04) { return TransShapeNchwToFzC04(src_shape, data_type, dst_shape); } - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + return ACL_ERROR_GE_FORMAT_INVALID; } REGISTER_FORMAT_TRANSFER(FormatTransferNchwToFZC04, FORMAT_NCHW, FORMAT_FRACTAL_Z_C04) diff --git a/ge/common/formats/format_transfers/format_transfer_nchw_nc1hwc0.cc b/ge/common/formats/format_transfers/format_transfer_nchw_nc1hwc0.cc index 752a4d64..d0579353 100755 --- a/ge/common/formats/format_transfers/format_transfer_nchw_nc1hwc0.cc +++ b/ge/common/formats/format_transfers/format_transfer_nchw_nc1hwc0.cc @@ -32,13 +32,13 @@ Status TransShapeNchwToNc1hwc0(const std::vector &src_shape, DataType d std::vector &dst_shape) { int64_t c0 = GetCubeSizeByDataType(data_type); if (c0 <= 0) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID, "Failed to get cube size, the data type is invalid"); - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Failed to get cube size, the data type is invalid"); + return ACL_ERROR_GE_DATATYPE_INVALID; } if (!CheckShapeValid(src_shape, kNchwDimsNum)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID, "Failed to check src shape %s", + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check src shape %s", ShapeToString(src_shape).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } dst_shape.clear(); dst_shape.push_back(src_shape.at(kNchwN)); @@ -47,9 +47,9 @@ Status TransShapeNchwToNc1hwc0(const std::vector &src_shape, DataType d dst_shape.push_back(src_shape.at(kNchwW)); dst_shape.push_back(c0); if (!CheckShapeValid(dst_shape, kNc1hwc0DimsNum)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID, "Failed to check dst shape %s", + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; } @@ -59,8 +59,8 @@ Status CheckArgsForNchwToNc1hwc0(const TransArgs &args) { std::string error = "Dose not support trans format from " + FmtToStr(TypeUtils::FormatToSerialString(args.src_format)) + " to " + FmtToStr(TypeUtils::FormatToSerialString(args.dst_format)); - GE_ERRORLOG_AND_ERRORMSG(UNSUPPORTED, error.c_str()); - return UNSUPPORTED; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_FORMAT_INVALID, error.c_str()); + return ACL_ERROR_GE_FORMAT_INVALID; } std::vector expect_5d_shape; auto ret = TransShapeNchwToNc1hwc0(args.src_shape, args.src_data_type, expect_5d_shape); @@ -68,12 +68,12 @@ Status CheckArgsForNchwToNc1hwc0(const TransArgs &args) { return ret; } if (expect_5d_shape != args.dst_shape) { - GELOGE(PARAM_INVALID, + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to trans format, the src and dst shape are not compatible. data" " type %s, src shape %s, dst shape %s, expect dst shape %s", TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.src_shape).c_str(), ShapeToString(args.dst_shape).c_str(), ShapeToString(expect_5d_shape).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; @@ -82,12 +82,12 @@ Status CheckArgsForNchwToNc1hwc0(const TransArgs &args) { Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const int size, const int64_t total_size) { std::shared_ptr dst(new (std::nothrow) uint8_t[total_size], std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for" " dst buf %ld, shape %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), total_size, ShapeToString(args.dst_shape).c_str()); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } auto n = args.src_shape.at(kNchwN); @@ -97,8 +97,8 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in int64_t c0 = GetCubeSizeByDataType(args.src_data_type); if (c0 <= 0) { - GELOGE(INTERNAL_ERROR, "The c0 is invalid %ld", c0); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "The c0 is invalid %ld", c0); + return ACL_ERROR_GE_DATATYPE_INVALID; } int64_t c1 = (c - 1) / c0 + 1; int64_t hw = h * w; @@ -129,21 +129,21 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in auto ret = memcpy_s(dst.get() + dst_offset, static_cast(protected_size), args.data + src_offset, static_cast(size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to copy data from NCHW[%ld] offset %ld to " "NC1HWC0[%ld, %ld, %ld, %ld, %ld] offset %ld, err-code %d", srcIdx, src_offset, n_idx, c1_idx, h_idx, w_idx, c0_idx, dst_offset, ret); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } else { auto ret = memset_s(dst.get() + dst_offset, static_cast(protected_size), 0, static_cast(size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to set to 0 to " "NC1HWC0[%ld, %ld, %ld, %ld, %ld] offset %ld, err-code %d", n_idx, c1_idx, h_idx, w_idx, c0_idx, dst_offset, ret); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -159,8 +159,9 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in } // namespace Status FormatTransferNchwNc1hwc0::TransFormat(const TransArgs &args, TransResult &result) { - if (CheckArgsForNchwToNc1hwc0(args) != SUCCESS) { - return PARAM_INVALID; + Status ret = CheckArgsForNchwToNc1hwc0(args); + if (ret != SUCCESS) { + return ret; } // Guarantee the validity of parameters in check function int size = GetSizeByDataType(args.src_data_type); @@ -172,20 +173,21 @@ Status FormatTransferNchwNc1hwc0::TransFormat(const TransArgs &args, TransResult return SUCCESS; } - GELOGE(INTERNAL_ERROR, "Get %ld total size from dst shape %s, src shape %s", total_size, + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Get %ld total size from dst shape %s, src shape %s", total_size, ShapeToString(args.dst_shape).c_str(), ShapeToString(args.src_shape).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } GELOGD( "Begin to trans format from NCHW to NC1HWC0, src shape %s, data type " "%s, dst shape %s memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - if (GetDstDataAfterTrans(args, result, size, total_size) != SUCCESS) { - GELOGE(INTERNAL_ERROR, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", + ret = GetDstDataAfterTrans(args, result, size, total_size); + if (ret != SUCCESS) { + GELOGE(ret, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - return INTERNAL_ERROR; + return ret; } return SUCCESS; } @@ -195,7 +197,7 @@ Status FormatTransferNchwNc1hwc0::TransShape(Format src_format, const std::vecto if (src_format == FORMAT_NCHW) { return TransShapeNchwToNc1hwc0(src_shape, data_type, dst_shape); } else { - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + return ACL_ERROR_GE_FORMAT_INVALID; } } diff --git a/ge/common/formats/format_transfers/format_transfer_nhwc_nc1hwc0.cc b/ge/common/formats/format_transfers/format_transfer_nhwc_nc1hwc0.cc index 2c6b392d..b09fd168 100755 --- a/ge/common/formats/format_transfers/format_transfer_nhwc_nc1hwc0.cc +++ b/ge/common/formats/format_transfers/format_transfer_nhwc_nc1hwc0.cc @@ -34,8 +34,8 @@ Status TransShapeNhwcToNc1hwc0(const std::vector &src_shape, DataType d std::vector &dst_shape) { int64_t c0 = GetCubeSizeByDataType(data_type); if (c0 <= 0) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID, "Failed to get cube size, the data type is invalid"); - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Failed to get cube size, the data type is invalid"); + return ACL_ERROR_GE_DATATYPE_INVALID; } dst_shape.clear(); dst_shape.push_back(src_shape.at(kNhwcN)); @@ -44,9 +44,9 @@ Status TransShapeNhwcToNc1hwc0(const std::vector &src_shape, DataType d dst_shape.push_back(src_shape.at(kNhwcW)); dst_shape.push_back(c0); if (!CheckShapeValid(dst_shape, kNc1hwc0DimsNum)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID, "Failed to check dst shape %s", + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check dst shape %s", ShapeToString(dst_shape).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; } @@ -56,21 +56,21 @@ Status CheckArgsForNhwcToNc1hwc0(const TransArgs &args) { std::string error = "Dose not support trans format from " + FmtToStr(TypeUtils::FormatToSerialString(args.src_format)) + " to " + FmtToStr(TypeUtils::FormatToSerialString(args.dst_format)); - GE_ERRORLOG_AND_ERRORMSG(UNSUPPORTED, error.c_str()); - return UNSUPPORTED; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_FORMAT_INVALID, error.c_str()); + return ACL_ERROR_GE_FORMAT_INVALID; } if (!CheckDataTypeSupported(args.src_data_type)) { - GELOGE(UNSUPPORTED, "Failed to trans shape from NHWC to NC1HWC0, invalid data type %s", + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Failed to trans shape from NHWC to NC1HWC0, invalid data type %s", TypeUtils::DataTypeToSerialString(args.src_data_type).c_str()); - return UNSUPPORTED; + return ACL_ERROR_GE_DATATYPE_INVALID; } if (!CheckShapeValid(args.src_shape, kNhwcDimsNum)) { - GELOGE(PARAM_INVALID, "Failed to check src shape %s", ShapeToString(args.src_shape).c_str()); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check src shape %s", ShapeToString(args.src_shape).c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } if (!CheckShapeValid(args.dst_shape, kNc1hwc0DimsNum)) { - GELOGE(PARAM_INVALID, "Failed to check dst shape %s", ShapeToString(args.dst_shape).c_str()); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check dst shape %s", ShapeToString(args.dst_shape).c_str()); + return ACL_ERROR_GE_SHAPE_INVALID; } std::vector expect_dst_shape; auto ret = TransShapeNhwcToNc1hwc0(args.src_shape, args.src_data_type, expect_dst_shape); @@ -78,12 +78,12 @@ Status CheckArgsForNhwcToNc1hwc0(const TransArgs &args) { return ret; } if (args.dst_shape != expect_dst_shape) { - GELOGE(PARAM_INVALID, + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to trans format, the src and dst shape are not compatible. src shape %s, dst shape %s, " "expect dst shape %s", ShapeToString(args.src_shape).c_str(), ShapeToString(args.dst_shape).c_str(), ShapeToString(expect_dst_shape).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return SUCCESS; @@ -92,10 +92,10 @@ Status CheckArgsForNhwcToNc1hwc0(const TransArgs &args) { Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const int size, const int64_t total_size) { std::shared_ptr dst(new (std::nothrow) uint8_t[total_size], std::default_delete()); if (dst == nullptr) { - GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld, shape %s", + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld, shape %s", TypeUtils::FormatToSerialString(args.src_format).c_str(), TypeUtils::FormatToSerialString(args.dst_format).c_str(), total_size, ShapeToString(args.dst_shape).c_str()); - return OUT_OF_MEMORY; + return ACL_ERROR_GE_MEMORY_ALLOCATION; } auto n = args.src_shape.at(kNhwcN); @@ -131,19 +131,19 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in if (c_idx < c) { auto ret = memcpy_s(dst.get() + dst_offset, protected_size, args.data + src_offset, size); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to copy data from NHWC[%ld, %ld, %ld, %ld] offset %ld to " "NC1HWC0[%ld, %ld, %ld, %ld, %ld] offset %ld err-code %d", n_idx, h_idx, w_idx, c_idx, src_offset, n_idx, c1_idx, h_idx, w_idx, c0_idx, dst_offset, ret); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } else { auto ret = memset_s(dst.get() + dst_offset, protected_size, 0, size); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to set 0 to NC1HWC0[%ld, %ld, %ld, %ld, %ld] offset %ld base err-code %d", n_idx, c1_idx, h_idx, w_idx, c0_idx, dst_offset, ret); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } } } @@ -158,8 +158,9 @@ Status GetDstDataAfterTrans(const TransArgs &args, TransResult &result, const in } // namespace Status FormatTransferNhwcNc1hwc0::TransFormat(const TransArgs &args, TransResult &result) { - if (CheckArgsForNhwcToNc1hwc0(args) != SUCCESS) { - return PARAM_INVALID; + Status ret = CheckArgsForNhwcToNc1hwc0(args); + if (ret != SUCCESS) { + return ret; } int size = GetSizeByDataType(args.src_data_type); auto total_size = GetItemNumByShape(args.dst_shape) * size; @@ -170,18 +171,20 @@ Status FormatTransferNhwcNc1hwc0::TransFormat(const TransArgs &args, TransResult return SUCCESS; } - GELOGE(INTERNAL_ERROR, "Get %ld total size from dst shape %s, src shape %s", total_size, + GELOGE(ACL_ERROR_GE_DATATYPE_INVALID, "Get %ld total size from dst shape %s, src shape %s", total_size, ShapeToString(args.dst_shape).c_str(), ShapeToString(args.src_shape).c_str()); - return PARAM_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } GELOGD("Begin to trans format from NHWC to NC1HWC0, src shape %s, data type %s, dst shape %s, memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - if (GetDstDataAfterTrans(args, result, size, total_size) != SUCCESS) { - GELOGE(INTERNAL_ERROR, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", + + ret = GetDstDataAfterTrans(args, result, size, total_size); + if (ret != SUCCESS) { + GELOGE(ret, "Failed to get data after trans, src shape %s, data type %s, dst shape %s, memory size %ld", ShapeToString(args.src_shape).c_str(), TypeUtils::DataTypeToSerialString(args.src_data_type).c_str(), ShapeToString(args.dst_shape).c_str(), total_size); - return INTERNAL_ERROR; + return ret; } return SUCCESS; } @@ -190,15 +193,15 @@ Status FormatTransferNhwcNc1hwc0::TransShape(Format src_format, const std::vecto DataType data_type, Format dst_format, std::vector &dst_shape) { if (src_format == FORMAT_NHWC && CheckDataTypeSupported(data_type)) { if (!CheckShapeValid(src_shape, kNhwcDimsNum)) { - GELOGE(ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID, "Failed to check src shape %s", + GELOGE(ACL_ERROR_GE_SHAPE_INVALID, "Failed to check src shape %s", ShapeToString(src_shape).c_str()); - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return TransShapeNhwcToNc1hwc0(src_shape, data_type, dst_shape); } else if (src_format != FORMAT_NHWC) { - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + return ACL_ERROR_GE_FORMAT_INVALID; } else { - return ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID; + return ACL_ERROR_GE_DATATYPE_INVALID; } } diff --git a/ge/common/formats/format_transfers/format_transfer_transpose.cc b/ge/common/formats/format_transfers/format_transfer_transpose.cc index de0b456c..694777f3 100755 --- a/ge/common/formats/format_transfers/format_transfer_transpose.cc +++ b/ge/common/formats/format_transfers/format_transfer_transpose.cc @@ -141,7 +141,7 @@ std::vector TransShapeByPerm(const std::vector &src_shape, con Status Transpose(const uint8_t *src, const std::vector &src_shape, DataType src_data_type, const std::vector &perm_arg, TransResult &result) { if (!IsTransposeArgValid(src, src_shape, src_data_type, perm_arg)) { - return PARAM_INVALID; + return ACL_ERROR_GE_PARAM_INVALID; } auto dst_shape = TransShapeByPerm(src_shape, perm_arg); @@ -172,12 +172,12 @@ Status Transpose(const uint8_t *src, const std::vector &src_shape, Data auto ret = memcpy_s(dst.get() + dst_offset_bytes, static_cast(protected_size), src + src_offset, static_cast(data_size)); if (ret != EOK) { - GELOGE(INTERNAL_ERROR, + GELOGE(ACL_ERROR_GE_MEMORY_OPERATE_FAILED, "Failed to transpose, src shape %s, perm arg %s, dst shape %s, " "failed to write to dst offset %ld, current dim offset %s", ShapeToString(src_shape).c_str(), ShapeToString(perm_arg).c_str(), ShapeToString(dst_shape).c_str(), dst_offset_bytes, ShapeToString(dst_indexes).c_str()); - return INTERNAL_ERROR; + return ACL_ERROR_GE_MEMORY_OPERATE_FAILED; } AddOne(dst_shape, dst_indexes); ++dst_index; @@ -192,14 +192,14 @@ Status TransposeWithShapeCheck(const uint8_t *data, const std::vector & const std::vector &dst_shape, DataType src_data_type, const std::vector &perm_arg, TransResult &result) { if (!IsTransposeArgValid(data, src_shape, src_data_type, perm_arg)) { - return PARAM_INVALID; + return ACL_ERROR_GE_PARAM_INVALID; } auto expected_shape = TransShapeByPerm(src_shape, perm_arg); if (dst_shape != expected_shape) { std::string error = "Failed to trans axis for perm_arg" + FmtToStr(ShapeToString(perm_arg)) + ", invalid dst shape" + FmtToStr(ShapeToString(dst_shape)) + ", expect" + FmtToStr(ShapeToString(expected_shape)); - GE_ERRORLOG_AND_ERRORMSG(PARAM_INVALID, error.c_str()); + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_SHAPE_INVALID, error.c_str()); } return Transpose(data, src_shape, src_data_type, perm_arg, result); @@ -211,16 +211,16 @@ Status GetPermByForamt(Format src_format, Format dst_format, std::vectorsecond.find(dst_format); if (iter == dst_iter->second.end()) { std::string error = "Failed to trans shape, do not support transpose from format " + FmtToStr(TypeUtils::FormatToSerialString(src_format)) + " to " + FmtToStr(TypeUtils::FormatToSerialString(dst_format)); - GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID, error.c_str()); - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_FORMAT_INVALID, error.c_str()); + return ACL_ERROR_GE_FORMAT_INVALID; } perm = iter->second; return SUCCESS; @@ -233,7 +233,7 @@ Status FormatTransferTranspose::TransFormat(const TransArgs &args, TransResult & return ret; } if (!IsTransShapeDstCorrect(args, expected_shape)) { - return PARAM_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } return Transpose(args.data, args.src_shape, args.src_data_type, perm_args[args.src_format][args.dst_format], result); @@ -244,7 +244,7 @@ Status FormatTransferTranspose::TransShape(Format src_format, const std::vector< std::vector perm_arg; GE_CHK_STATUS_RET_NOLOG(GetPermByForamt(src_format, dst_format, perm_arg)); if (!IsShapeArgValid(src_shape, perm_arg)) { - return ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID; + return ACL_ERROR_GE_SHAPE_INVALID; } dst_shape = TransShapeByPerm(src_shape, perm_arg); return SUCCESS; diff --git a/ge/common/formats/formats.cc b/ge/common/formats/formats.cc index 2b979e9a..353606d2 100755 --- a/ge/common/formats/formats.cc +++ b/ge/common/formats/formats.cc @@ -38,14 +38,14 @@ GE_FUNC_DEV_VISIBILITY GE_FUNC_HOST_VISIBILITY Status TransFormat(const TransArg std::string error = "Failed to trans data from format " + FmtToStr(TypeUtils::FormatToSerialString(args.src_format)) + " to " + FmtToStr(TypeUtils::FormatToSerialString(args.dst_format)); - GE_ERRORLOG_AND_ERRORMSG(UNSUPPORTED, error.c_str()); - return UNSUPPORTED; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_FORMAT_INVALID, error.c_str()); + return ACL_ERROR_GE_FORMAT_INVALID; } auto src_shape_size = GetItemNumByShape(args.src_shape); if (args.data == nullptr && src_shape_size != 0) { - GELOGE(PARAM_INVALID, "Invalid input null data"); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Invalid input null data"); + return ACL_ERROR_GE_PARAM_INVALID; } return transfer->TransFormat(args, result); @@ -64,8 +64,8 @@ GE_FUNC_DEV_VISIBILITY GE_FUNC_HOST_VISIBILITY Status TransShape(Format src_form std::string error = "Failed to trans data from format " + FmtToStr(TypeUtils::FormatToSerialString(args.src_format)) + " to " + FmtToStr(TypeUtils::FormatToSerialString(args.dst_format)); - GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID, error.c_str()); - return ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_FORMAT_INVALID, error.c_str()); + return ACL_ERROR_GE_FORMAT_INVALID; } return transfer->TransShape(src_format, src_shape, data_type, dst_format, dst_shape); @@ -77,13 +77,13 @@ GE_FUNC_DEV_VISIBILITY GE_FUNC_HOST_VISIBILITY Status TransDataType(const CastAr std::string error = "Failed to trans data from datatype " + FmtToStr(TypeUtils::DataTypeToSerialString(args.src_data_type)) + " to " + FmtToStr(TypeUtils::DataTypeToSerialString(args.dst_data_type)); - GE_ERRORLOG_AND_ERRORMSG(UNSUPPORTED, error.c_str()); - return UNSUPPORTED; + GE_ERRORLOG_AND_ERRORMSG(ACL_ERROR_GE_DATATYPE_INVALID, error.c_str()); + return ACL_ERROR_GE_DATATYPE_INVALID; } if (args.data == nullptr && args.src_data_size != 0) { - GELOGE(PARAM_INVALID, "Invalid input null data"); - return PARAM_INVALID; + GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Invalid input null data"); + return ACL_ERROR_GE_PARAM_INVALID; } return transfer->TransDataType(args, result); diff --git a/ge/common/ge/plugin_manager.cc b/ge/common/ge/plugin_manager.cc index 38de251e..4e588f29 100644 --- a/ge/common/ge/plugin_manager.cc +++ b/ge/common/ge/plugin_manager.cc @@ -53,6 +53,7 @@ string PluginManager::GetPath() { GELOGW("Failed to read the shared library file path!"); return string(); } else { + GE_IF_BOOL_EXEC(dl_info.dli_fname == nullptr, return string()); std::string so_path = dl_info.dli_fname; char path[MMPA_MAX_PATH] = {0}; if (so_path.length() >= MMPA_MAX_PATH) { diff --git a/ge/common/helper/model_cache_helper.cc b/ge/common/helper/model_cache_helper.cc index 67d934df..41ad6d59 100755 --- a/ge/common/helper/model_cache_helper.cc +++ b/ge/common/helper/model_cache_helper.cc @@ -14,22 +14,15 @@ * limitations under the License. */ -#include +#include "common/helper/model_cache_helper.h" + #include #include #include -#include "common/ge/ge_util.h" -#include "common/helper/model_cache_helper.h" -#include "common/types.h" -#include "framework/common/debug/ge_log.h" -#include "framework/common/ge_types.h" +#include "common/model_parser/model_parser.h" #include "framework/common/helper/model_helper.h" -#include "framework/common/util.h" -#include "graph/detail/attributes_holder.h" #include "graph/detail/model_serialize_imp.h" -#include "graph/load/model_manager/davinci_model_parser.h" -#include "graph/model.h" #include "graph/utils/graph_utils.h" #include "graph/utils/tensor_utils.h" #include "init/gelib.h" @@ -1682,7 +1675,7 @@ Status ModelCacheHelper::LoadOmModelFromCache(GeModelPtr &ge_model) const { string key_path; int32_t priority = 0; ModelData model_data; - ret = DavinciModelParser::LoadFromFile(om_path.c_str(), key_path.c_str(), priority, model_data); + ret = ModelParserBase::LoadFromFile(om_path.c_str(), key_path.c_str(), priority, model_data); if (ret != SUCCESS) { GELOGW("LoadOmModelFromCache: Load model from file failed. ret = %u", ret); return ret; diff --git a/ge/common/helper/model_helper.cc b/ge/common/helper/model_helper.cc index 7de7d8e0..02c0a8f0 100644 --- a/ge/common/helper/model_helper.cc +++ b/ge/common/helper/model_helper.cc @@ -16,15 +16,10 @@ #include "framework/common/helper/model_helper.h" -#include "common/ge/ge_util.h" -#include "common/util/error_manager/error_manager.h" -#include "framework/common/debug/log.h" -#include "framework/common/util.h" -#include "framework/common/debug/ge_log.h" +#include "common/model_parser/model_parser.h" +#include "framework/omg/model_tool.h" #include "framework/omg/version.h" #include "graph/debug/ge_attr_define.h" -#include "graph/load/model_manager/davinci_model_parser.h" -#include "graph/utils/attr_utils.h" #include "graph/utils/graph_utils.h" using std::string; @@ -464,7 +459,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status ModelHelper::LoadModel(c return ACL_ERROR_GE_EXEC_RELEASE_MODEL_DATA; } - Status status = ge::DavinciModelParser::ParseModelContent(model_data, model_addr_tmp_, model_len_tmp_); + Status status = ModelParserBase::ParseModelContent(model_data, model_addr_tmp_, model_len_tmp_); if (status != SUCCESS) { GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Parse model content failed!"); return ACL_ERROR_GE_PARAM_INVALID; @@ -513,7 +508,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status ModelHelper::LoadRootMod return INTERNAL_ERROR; } - Status status = ge::DavinciModelParser::ParseModelContent(model_data, model_addr_tmp_, model_len_tmp_); + Status status = ModelParserBase::ParseModelContent(model_data, model_addr_tmp_, model_len_tmp_); if (status != SUCCESS) { GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Parse model content failed!"); return ACL_ERROR_GE_PARAM_INVALID; @@ -879,4 +874,97 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status ModelHelper::GetModelNam GE_CHK_BOOL_EXEC_WARN(!model_name.empty(), return FAILED, "Get model_name failed, check params --output"); return SUCCESS; } + +Status ModelTool::GetModelInfoFromOm(const char *model_file, ge::proto::ModelDef &model_def, uint32_t &modeldef_size) { + GE_CHECK_NOTNULL(model_file); + ge::ModelData model; + int32_t priority = 0; + + Status ret = ModelParserBase::LoadFromFile(model_file, "", priority, model); + if (ret != SUCCESS) { + GELOGE(ret, "LoadFromFile failed."); + return ret; + } + std::function callback = [&]() { + if (model.model_data != nullptr) { + delete[] reinterpret_cast(model.model_data); + model.model_data = nullptr; + } + }; + GE_MAKE_GUARD(release, callback); + + uint8_t *model_data = nullptr; + uint32_t model_len = 0; + ret = ModelParserBase::ParseModelContent(model, model_data, model_len); + if (ret != SUCCESS) { + ErrorManager::GetInstance().ATCReportErrMessage("E10003", + {"parameter", "value", "reason"}, {"om", model_file, "invalid om file"}); + GELOGE(ACL_ERROR_GE_PARAM_INVALID, + "ParseModelContent failed because of invalid om file. Please check --om param."); + return ret; + } + + OmFileLoadHelper om_load_helper; + ret = om_load_helper.Init(model_data, model_len); + if (ret != SUCCESS) { + ErrorManager::GetInstance().ATCReportErrMessage("E19021", {"reason"}, {"Om file init failed"}); + GELOGE(ge::FAILED, "Om file init failed."); + return ret; + } + + ModelPartition ir_part; + ret = om_load_helper.GetModelPartition(MODEL_DEF, ir_part); + if (ret != SUCCESS) { + ErrorManager::GetInstance().ATCReportErrMessage("E19021", {"reason"}, {"Get model part failed"}); + GELOGE(ge::FAILED, "Get model part failed."); + return ret; + } + + bool flag = ReadProtoFromArray(ir_part.data, ir_part.size, &model_def); + if (!flag) { + ret = INTERNAL_ERROR; + ErrorManager::GetInstance().ATCReportErrMessage("E19021", {"reason"}, {"ReadProtoFromArray failed"}); + GELOGE(ret, "ReadProtoFromArray failed."); + return ret; + } + modeldef_size = ir_part.size; + return ret; +} + +Status ModelTool::GetModelInfoFromPbtxt(const char *model_file, ge::proto::ModelDef &model_def) { + GE_CHECK_NOTNULL(model_file); + ge::ModelData model; + int32_t priority = 0; + + Status ret = ModelParserBase::LoadFromFile(model_file, "", priority, model); + auto free_model_data = [](void **ptr) -> void { + if (ptr != nullptr && *ptr != nullptr) { + delete[] reinterpret_cast(*ptr); + *ptr = nullptr; + } + }; + if (ret != SUCCESS) { + free_model_data(&model.model_data); + GELOGE(ret, "LoadFromFile failed."); + return ret; + } + + try { + bool flag = google::protobuf::TextFormat::ParseFromString(reinterpret_cast(model.model_data), &model_def); + if (!flag) { + free_model_data(&model.model_data); + ErrorManager::GetInstance().ATCReportErrMessage("E19021", {"reason"}, {"ParseFromString failed"}); + GELOGE(FAILED, "ParseFromString failed."); + return FAILED; + } + free_model_data(&model.model_data); + return SUCCESS; + } catch (google::protobuf::FatalException &e) { + free_model_data(&model.model_data); + ErrorManager::GetInstance().ATCReportErrMessage("E19021", {"reason"}, {"ParseFromString failed, exception message[" + + std::string(e.what()) + "]"}); + GELOGE(FAILED, "ParseFromString failed. exception message : %s", e.what()); + return FAILED; + } +} } // namespace ge diff --git a/ge/common/helper/om_file_helper.cc b/ge/common/helper/om_file_helper.cc index eb3bbcc2..3702e8f8 100644 --- a/ge/common/helper/om_file_helper.cc +++ b/ge/common/helper/om_file_helper.cc @@ -165,7 +165,7 @@ Status OmFileLoadHelper::LoadModelPartitionTable(uint8_t *model_data, const uint return ACL_ERROR_GE_PARAM_INVALID; } size_t mem_offset = SIZE_OF_MODEL_PARTITION_TABLE(*partition_table); - GELOGD("ModelPartitionTable num :%u, ModelFileHeader length :%zu, ModelPartitionTable length :%zu", + GELOGD("ModelPartitionTable num:%u, ModelFileHeader length:%zu, ModelPartitionTable length:%zu", partition_table->num, sizeof(ModelFileHeader), mem_offset); if (model_data_size <= mem_offset) { GELOGE(ACL_ERROR_GE_EXEC_MODEL_DATA_SIZE_INVALID, "invalid model data, partition_table->num:%u, model data size %u", @@ -207,7 +207,8 @@ Status OmFileLoadHelper::LoadModelPartitionTable(uint8_t *model_data, uint32_t m "ModelFileHeader length :%zu, ModelPartitionTable length :%zu", index, partition_table->num, sizeof(ModelFileHeader), partition_table_size); if (model_data_size <= cur_offset) { - GELOGE(ACL_ERROR_GE_EXEC_MODEL_DATA_SIZE_INVALID, "invalid model data, partition_table->num:%u, model data size %u", + GELOGE(ACL_ERROR_GE_EXEC_MODEL_DATA_SIZE_INVALID, + "invalid model data, partition_table->num:%u, model data size %u", partition_table->num, model_data_size); return ACL_ERROR_GE_EXEC_MODEL_DATA_SIZE_INVALID; } diff --git a/ge/common/model_parser/base.cc b/ge/common/model_parser/model_parser.cc similarity index 96% rename from ge/common/model_parser/base.cc rename to ge/common/model_parser/model_parser.cc index 22837be6..9c00ab08 100644 --- a/ge/common/model_parser/base.cc +++ b/ge/common/model_parser/model_parser.cc @@ -14,16 +14,13 @@ * limitations under the License. */ -#include "common/model_parser/base.h" -#include "common/helper/model_helper.h" -#include +#include "common/model_parser/model_parser.h" + #include -#include #include -#include "framework/common/debug/ge_log.h" -#include "framework/common/debug/log.h" -#include "framework/common/util.h" +#include "securec.h" +#include "common/helper/model_helper.h" namespace ge { FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ModelParserBase::ModelParserBase() {} diff --git a/ge/common/model_parser/base.h b/ge/common/model_parser/model_parser.h similarity index 100% rename from ge/common/model_parser/base.h rename to ge/common/model_parser/model_parser.h diff --git a/ge/common/profiling/profiling_manager.cc b/ge/common/profiling/profiling_manager.cc index 86b1b2c5..0cf74b1f 100644 --- a/ge/common/profiling/profiling_manager.cc +++ b/ge/common/profiling/profiling_manager.cc @@ -20,6 +20,8 @@ #include "framework/common/debug/log.h" #include "framework/common/string_util.h" #include "graph/ge_context.h" +#include "graph/utils/type_utils.h" +#include "graph/types.h" #include "runtime/base.h" #include "graph/load/model_manager/davinci_model.h" @@ -31,12 +33,30 @@ const char *const kBpPoint = "bp_point"; #ifdef DAVINCI_SUPPORT_PROFILING const size_t kReportMaxLen = 2048; const int32_t kMaxDeviceNum = 256; +const uint32_t kInteval = 2; const std::string kConfigNumsdev = "devNums"; const std::string kConfigDevIdList = "devIdList"; const std::string kProfStart = "prof_start"; const std::string kProfStop = "prof_stop"; const std::string kProfModelSubscribe = "prof_model_subscribe"; const std::string kProfModelUnsubscribe = "prof_model_cancel_subscribe"; +const std::string kModelName = "model_name"; +const std::string kModelId = "model_id"; +const std::string kOpNmae = "op_name"; +const std::string kOptype = "op_type"; +const std::string kBlockDim = "block_dims"; +const std::string kTaskId = "task_id"; +const std::string kStreamId = "stream_id"; +const std::string kShapeType = "shape_type"; +const std::string kCurIterNum = "cur_iter_num"; +const std::string kTaskType = "task_type"; +const std::string kInput = "input"; +const std::string kOutput = "output"; +const std::string kFormat = "format"; +const std::string kDataType = "data_type"; +const std::string kShape = "shape"; +const std::string kIdx = "idx"; + #endif } // namespace @@ -206,118 +226,69 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::StopProf #endif } -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::ProfilingTaskDescInfo( - uint32_t model_id, const std::vector &task_desc_info, const int32_t &device_id) { +FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::ProfilingOpInputOutInfo( + const TaskDescInfo &task, Json &task_json) { #ifdef DAVINCI_SUPPORT_PROFILING - std::string data; - for (const auto &task : task_desc_info) { - std::string model_name = task.model_name; - std::string op_name = task.op_name; - uint32_t block_dim = task.block_dim; - uint32_t task_id = task.task_id; - uint32_t stream_id = task.stream_id; - std::string shape_type = task.shape_type; - int64_t cur_iter_num = task.cur_iter_num; - uint32_t task_type = task.task_type; - data = model_name.append(" ") - .append(op_name).append(" ") - .append(std::to_string(block_dim)).append(" ") - .append(std::to_string(task_id)).append(" ") - .append(std::to_string(stream_id)).append(" ") - .append(std::to_string(model_id)).append(" ") - .append(shape_type).append(" ") - .append(std::to_string(cur_iter_num)).append(" ") - .append(std::to_string(task_type)).append("\n"); - - ReporterData reporter_data{}; - reporter_data.deviceId = device_id; - reporter_data.data = (unsigned char *)data.c_str(); - reporter_data.dataLen = data.size(); - int ret = memcpy_s(reporter_data.tag, MSPROF_ENGINE_MAX_TAG_LEN + 1, "task_desc_info", sizeof("task_desc_info")); - if (ret != EOK) { - GELOGE(ret, "Report data tag of task_desc_info memcpy error!"); - return; - } - - int32_t cb_ret = CallMsprofReport(reporter_data); - if (cb_ret != 0) { - GELOGE(cb_ret, "Reporter data of task_desc_info failed, ret:%d", cb_ret); - return; - } + for (size_t i = 0; i < task.input_format.size(); i++) { + Json tmp_input; + tmp_input[kIdx] = i; + Format format = task.input_format[i]; + tmp_input[kFormat] = TypeUtils::FormatToSerialString(format); + DataType data_type = task.input_data_type[i]; + tmp_input[kDataType] = TypeUtils::DataTypeToSerialString(data_type); + tmp_input[kShape] = task.input_shape[i]; + task_json[kInput] += tmp_input; + } + + for (size_t i = 0; i < task.output_format.size(); i++) { + Json tmp_output; + tmp_output[kIdx] = i; + Format format = task.output_format[i]; + tmp_output[kFormat] = TypeUtils::FormatToSerialString(format); + DataType data_type = task.output_data_type[i]; + tmp_output[kDataType] = TypeUtils::DataTypeToSerialString(data_type); + tmp_output[kShape] = task.output_shape[i]; + task_json[kOutput] += tmp_output; } - - data.clear(); #endif } -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::ProfilingGraphDescInfo( - uint32_t model_id, const std::vector &compute_graph_desc_info, const int32_t &device_id) { +FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::ProfilingTaskDescInfo( + uint32_t model_id, const std::vector &task_desc_info, const int32_t &device_id) { #ifdef DAVINCI_SUPPORT_PROFILING - std::string data; - for (const auto &graph : compute_graph_desc_info) { - data.append("model_name:") - .append(graph.model_name) - .append(" op_name:") - .append(graph.op_name) - .append(" op_type:") - .append(graph.op_type); - for (size_t i = 0; i < graph.input_format.size(); ++i) { - data.append(" input_id:") - .append(std::to_string(i)) - .append(" input_format:") - .append(std::to_string(graph.input_format.at(i))) - .append(" input_data_type:") - .append(std::to_string(graph.input_data_type.at(i))) - .append(" input_shape:\""); - size_t input_shape_len = graph.input_shape.at(i).size(); - if (input_shape_len == 0) { - data.append(""); - } else if (input_shape_len == 1) { - data.append(std::to_string(graph.input_shape.at(i).at(0))); - } else { - for (size_t j = 0; j < input_shape_len - 1; ++j) { - data.append(std::to_string(graph.input_shape.at(i).at(j))).append(","); - } - data.append(std::to_string(graph.input_shape.at(i).at(input_shape_len - 1))); - } - - data.append("\""); - } - - for (size_t i = 0; i < graph.output_format.size(); ++i) { - data.append(" output_id:") - .append(std::to_string(i)) - .append(" output_format:") - .append(std::to_string(graph.output_format.at(i))) - .append(" output_data_type:") - .append(std::to_string(graph.output_data_type.at(i))) - .append(" output_shape:\""); - size_t output_shape_len = graph.output_shape.at(i).size(); - if (output_shape_len == 0) { - data.append(""); - } else if (output_shape_len == 1) { - data.append(std::to_string(graph.output_shape.at(i).at(0))); - } else { - for (size_t j = 0; j < output_shape_len - 1; ++j) { - data.append(std::to_string(graph.output_shape.at(i).at(j))).append(","); - } - data.append(std::to_string(graph.output_shape.at(i).at(output_shape_len - 1))); - } - data.append("\""); + for (const auto &task : task_desc_info) { + Json task_info; + task_info[kModelName] = task.model_name; + task_info[kModelId] = model_id; + task_info[kOpNmae] = task.op_name; + task_info[kOptype] = task.op_type; + task_info[kBlockDim] = task.block_dim; + task_info[kTaskType] = task.task_type; + task_info[kTaskId] = task.task_id; + task_info[kStreamId] = task.stream_id; + task_info[kCurIterNum] = task.cur_iter_num; + task_info[kShapeType] = task.shape_type; + ProfilingOpInputOutInfo(task, task_info); + + std::string reported_data; + try { + reported_data = task_info.dump(kInteval, ' ', false, Json::error_handler_t::ignore); + } catch (std::exception &e) { + GELOGE(FAILED, "Failed to convert JSON to string, reason: %s.", e.what()); + return ; + } catch (...) { + GELOGE(FAILED, "Failed to convert JSON to string."); + return; } - - data.append(" model_id:").append(std::to_string(model_id)); - data.append(" task_id:").append(std::to_string(graph.task_id)); - data.append(" stream_id:").append(std::to_string(graph.stream_id)); - data.append("\n"); - - GraphDescReport(device_id, data); - data.clear(); + reported_data.append(",") + .append("\n"); + ReportData(device_id, reported_data, "task_desc_info"); } #endif } -void ProfilingManager::GraphDescReport(const int32_t &device_id, const string &data) { +FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::ReportData( + const int32_t &device_id, const string &data, const string &tag_name) { #ifdef DAVINCI_SUPPORT_PROFILING ReporterData reporter_data{}; int ret = -1; @@ -325,36 +296,38 @@ void ProfilingManager::GraphDescReport(const int32_t &device_id, const string &d size_t index = data.size() / kReportMaxLen; if (index >= 1) { reporter_data.deviceId = device_id; - ret = memcpy_s(reporter_data.tag, MSPROF_ENGINE_MAX_TAG_LEN + 1, "graph_desc_info", sizeof("graph_desc_info")); - GE_IF_BOOL_EXEC(ret != EOK, GELOGE(ret, "Report data tag of graph_desc_info memcpy error!"); return;); + ret = memcpy_s(reporter_data.tag, MSPROF_ENGINE_MAX_TAG_LEN + 1, tag_name.c_str(), tag_name.size()); + GE_IF_BOOL_EXEC(ret != EOK, GELOGE(ret, "Report data tag [%s] memcpy error!", tag_name.c_str()); return;); for (size_t i = 0; i < index; ++i) { reporter_data.data = (unsigned char *)data.c_str() + kReportMaxLen * i; reporter_data.dataLen = kReportMaxLen; cb_ret = CallMsprofReport(reporter_data); - GE_IF_BOOL_EXEC(cb_ret != 0, GELOGE(cb_ret, "Reporter data of graph_desc_info failed, ret:%d", cb_ret); return;); + GE_IF_BOOL_EXEC(cb_ret != 0, GELOGE(cb_ret, "Reporter data [%s] failed, ret:%d", tag_name.c_str(), cb_ret); + return;); } reporter_data.dataLen = data.size() - kReportMaxLen * index; if (reporter_data.dataLen != 0) { reporter_data.data = (unsigned char *)data.c_str() + kReportMaxLen * index; cb_ret = CallMsprofReport(reporter_data); - GE_IF_BOOL_EXEC(cb_ret != 0, GELOGE(cb_ret, "Reporter data of graph_desc_info failed, ret:%d", cb_ret); return;); + GE_IF_BOOL_EXEC(cb_ret != 0, GELOGE(cb_ret, "Reporter data [%s] failed, ret:%d", tag_name.c_str(), cb_ret); + return;); } } else { reporter_data.deviceId = device_id; reporter_data.data = (unsigned char *)data.c_str(); reporter_data.dataLen = data.size(); - ret = memcpy_s(reporter_data.tag, MSPROF_ENGINE_MAX_TAG_LEN + 1, "graph_desc_info", sizeof("graph_desc_info")); - GE_IF_BOOL_EXEC(ret != EOK, GELOGE(ret, "Report data tag of graph_desc_info memcpy error!"); return;); + ret = memcpy_s(reporter_data.tag, MSPROF_ENGINE_MAX_TAG_LEN + 1, tag_name.c_str(), tag_name.size()); + GE_IF_BOOL_EXEC(ret != EOK, GELOGE(ret, "Report data tag [%s] memcpy error!", tag_name.c_str()); return;); cb_ret = CallMsprofReport(reporter_data); - GE_IF_BOOL_EXEC(cb_ret != 0, GELOGE(cb_ret, "Reporter data of graph_desc_info failed, ret:%d", cb_ret); return;); + GE_IF_BOOL_EXEC(cb_ret != 0, GELOGE(cb_ret, "Reporter data [%s] failed, ret:%d", tag_name.c_str(), cb_ret); + return;); } #endif } FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::ReportProfilingData( - uint32_t model_id, const std::vector &task_desc_info, - const std::vector &compute_graph_desc_info) { + uint32_t model_id, const std::vector &task_desc_info) { #ifdef DAVINCI_SUPPORT_PROFILING int32_t logic_device_id = 0; rtError_t rt_ret = rtGetDevice(&logic_device_id); @@ -365,8 +338,6 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::ReportPr GELOGD("current logic_device_id:%d", logic_device_id); GELOGD("start ProfilingTaskDescInfo."); ProfilingTaskDescInfo(model_id, task_desc_info, logic_device_id); - GELOGD("start ProfilingGraphDescInfo."); - ProfilingGraphDescInfo(model_id, compute_graph_desc_info, logic_device_id); GELOGD("Report profiling data for GE end."); #endif } @@ -813,6 +784,44 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status ProfilingManager::CallMs static_cast(&reporter_data), sizeof(ReporterData)); } +FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::GetOpInputOutputInfo( + const OpDescPtr &op, TaskDescInfo &task_desc_info) const { + std::vector input_format; + std::vector> input_shape; + std::vector input_data_type; + for (size_t i = 0; i < op->GetAllInputsSize(); ++i) { + GeTensorDescPtr input_tensor_desc = op->MutableInputDesc(i); + if (input_tensor_desc == nullptr) { + continue; + } + input_format.emplace_back(input_tensor_desc->GetFormat()); + input_shape.emplace_back(input_tensor_desc->GetShape().GetDims()); + input_data_type.emplace_back(input_tensor_desc->GetDataType()); + } + std::vector output_format; + std::vector> output_shape; + std::vector output_data_type; + for (size_t j = 0; j < op->GetOutputsSize(); ++j) { + GeTensorDescPtr output_tensor_desc = op->MutableOutputDesc(j); + if (output_tensor_desc == nullptr) { + continue; + } + output_format.emplace_back(output_tensor_desc->GetFormat()); + output_shape.emplace_back(output_tensor_desc->GetShape().GetDims()); + output_data_type.emplace_back(output_tensor_desc->GetDataType()); + } + + std::vector format_default = { FORMAT_NULL }; + std::vector> shape_default = { {0} }; + std::vector data_type_default = { DT_UNDEFINED }; + task_desc_info.input_format = input_format.empty() ? format_default : input_format; + task_desc_info.input_shape = input_shape.empty() ? shape_default : input_shape; + task_desc_info.input_data_type = input_data_type.empty() ? data_type_default : input_data_type; + task_desc_info.output_format = output_format.empty() ? format_default : output_format; + task_desc_info.output_shape = output_shape.empty() ? shape_default : output_shape; + task_desc_info.output_data_type = output_data_type.empty() ? data_type_default : output_data_type; +} + FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::GetFpBpPoint( std::string &fp_point, std::string &bp_point) { // Env or options mode, fp_point_/bp_point_ have initiliazed on profiling init diff --git a/ge/common/profiling/profiling_manager.h b/ge/common/profiling/profiling_manager.h index 22fa8f8c..34acee0e 100755 --- a/ge/common/profiling/profiling_manager.h +++ b/ge/common/profiling/profiling_manager.h @@ -54,6 +54,8 @@ namespace { } // namespace namespace ge { +class OpDesc; +using OpDescPtr = std::shared_ptr; struct DeviceSubsInfo { uint64_t module; uint32_t subscribe_count; @@ -82,12 +84,10 @@ class FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ProfilingManager { bool ProfilingModelExecuteOn() const; // is_execute_profiling_ only used by ge option and env bool ProfilingOn() const { return is_load_profiling_ && is_execute_profiling_; } - void ReportProfilingData(uint32_t model_id, const std::vector &task_desc_info, - const std::vector &compute_graph_desc_info); + void ReportProfilingData(uint32_t model_id, const std::vector &task_desc_info); void ProfilingTaskDescInfo(uint32_t model_id, const std::vector &task_desc_info, const int32_t &device_id); - void ProfilingGraphDescInfo(uint32_t model_id, const std::vector &compute_graph_desc_info, - const int32_t &device_id); + void ProfilingOpInputOutInfo(const TaskDescInfo &task, Json &task_json); Status PluginInit() const; void PluginUnInit() const; Status CallMsprofReport(ReporterData &reporter_data) const; @@ -95,6 +95,8 @@ class FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ProfilingManager { void SetMsprofCtrlCallback(MsprofCtrlCallback func) { prof_cb_.msprofCtrlCallback = func; } void SetMsprofReporterCallback(MsprofReporterCallback func) { prof_cb_.msprofReporterCallback = func; } void GetFpBpPoint(std::string &fp_point, std::string &bp_point); + void GetOpInputOutputInfo(const OpDescPtr &op, TaskDescInfo &task_desc_info) const; + void ReportData(const int32_t &device_id, const std::string &data, const std::string &tag_name); private: Status InitFromOptions(const Options &options, MsprofGeOptions &prof_conf); Status ParseOptions(const std::string &options); @@ -103,7 +105,6 @@ class FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ProfilingManager { Status ProfParseDeviceId(const std::map &config_para, vector &device_list); uint64_t GetProfilingModule(); - void GraphDescReport(const int32_t &device_id, const string &data); void UpdateDeviceIdModuleMap(string prof_type, uint64_t module, const vector &device_list); void UpdateSubscribeDeviceModuleMap(std::string prof_type, uint32_t device_id, uint64_t module); diff --git a/ge/common/properties_manager.cc b/ge/common/properties_manager.cc index 3ca5bd27..eae29e34 100644 --- a/ge/common/properties_manager.cc +++ b/ge/common/properties_manager.cc @@ -165,24 +165,4 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::SetProp delimiter = de; } -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY DumpProperties &PropertiesManager::GetDumpProperties( - uint64_t session_id) { - std::lock_guard lock(mutex_); - // If session_id is not found in dump_properties_map_, operator[] will insert one. - return dump_properties_map_[session_id]; -} - -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::AddDumpProperties( - uint64_t session_id, const DumpProperties &dump_properties) { - std::lock_guard lock(mutex_); - dump_properties_map_.emplace(session_id, dump_properties); -} - -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::RemoveDumpProperties(uint64_t session_id) { - std::lock_guard lock(mutex_); - auto iter = dump_properties_map_.find(session_id); - if (iter != dump_properties_map_.end()) { - dump_properties_map_.erase(iter); - } -} } // namespace ge diff --git a/ge/common/properties_manager.h b/ge/common/properties_manager.h index b4c5aad1..7079eecb 100644 --- a/ge/common/properties_manager.h +++ b/ge/common/properties_manager.h @@ -83,13 +83,6 @@ class PropertiesManager { */ void SetPropertyDelimiter(const std::string &de); - DumpProperties &GetDumpProperties(uint64_t session_id); - - const map &GetDumpPropertiesMap() { return dump_properties_map_; } - - void AddDumpProperties(uint64_t session_id, const DumpProperties &dump_properties); - void RemoveDumpProperties(uint64_t session_id); - private: // Private construct, destructor PropertiesManager(); @@ -111,8 +104,6 @@ class PropertiesManager { std::map properties_map_; std::mutex mutex_; - - std::map dump_properties_map_; }; } // namespace ge diff --git a/ge/engine_manager/dnnengine_manager.cc b/ge/engine_manager/dnnengine_manager.cc index b23993b6..7ff5ed42 100644 --- a/ge/engine_manager/dnnengine_manager.cc +++ b/ge/engine_manager/dnnengine_manager.cc @@ -217,7 +217,7 @@ std::string DNNEngineManager::GetDNNEngineName(const ge::NodePtr &node_ptr) { std::string unsupported_reason; // It will be replaced by engine' checksupport uint64_t start_time = GetCurrentTimestamp(); - if (kernel_info_store->second->CheckSupported(op_desc, unsupported_reason)) { + if (kernel_info_store->second->CheckSupported(node_ptr, unsupported_reason)) { checksupport_cost_[kernel_name] += GetCurrentTimestamp() - start_time; op_desc->SetOpEngineName(it.engine); op_desc->SetOpKernelLibName(kernel_name); diff --git a/ge/executor/CMakeLists.txt b/ge/executor/CMakeLists.txt index 56c8efd4..04654f99 100644 --- a/ge/executor/CMakeLists.txt +++ b/ge/executor/CMakeLists.txt @@ -17,6 +17,7 @@ set(SRC_LIST "../common/dump/dump_properties.cc" "../common/dump/dump_manager.cc" "../common/dump/dump_op.cc" + "../common/dump/opdebug_register.cc" "../common/profiling/ge_profiling.cc" "../graph/load/graph_loader.cc" "../graph/execute/graph_execute.cc" @@ -33,7 +34,6 @@ set(SRC_LIST "../model/ge_model.cc" "../model/ge_root_model.cc" "../graph/load/model_manager/davinci_model.cc" - "../graph/load/model_manager/davinci_model_parser.cc" "../graph/load/model_manager/model_manager.cc" "../graph/load/model_manager/tbe_handle_store.cc" "../graph/load/model_manager/cpu_queue_schedule.cc" @@ -250,15 +250,14 @@ target_link_options(ge_executor_shared PRIVATE target_link_libraries(ge_executor_shared PRIVATE $ msprofiler + static_mmpa -Wl,--no-as-needed ge_common runtime slog - mmpa graph register error_manager - ascend_hal_stub ascend_protobuf c_sec -Wl,--as-needed diff --git a/ge/executor/ge_executor.cc b/ge/executor/ge_executor.cc index 96bb8527..44b2dbfa 100755 --- a/ge/executor/ge_executor.cc +++ b/ge/executor/ge_executor.cc @@ -16,7 +16,6 @@ #include "executor/ge_executor.h" #include -#include #include #include #include "common/debug/log.h" @@ -24,19 +23,11 @@ #include "common/helper/model_helper.h" #include "common/profiling/profiling_manager.h" #include "common/dump/dump_manager.h" -#include "common/util.h" -#include "framework/common/debug/ge_log.h" -#include "framework/common/util.h" #include "graph/execute/graph_execute.h" #include "graph/load/graph_loader.h" -#include "graph/load/model_manager/davinci_model_parser.h" #include "graph/load/model_manager/model_manager.h" #include "graph/manager/graph_mem_allocator.h" -#include "graph/model.h" -#include "graph/utils/graph_utils.h" -#include "mmpa/mmpa_api.h" #include "single_op/single_op_manager.h" -#include "graph/manager/graph_var_manager.h" #include "graph/load/model_manager/davinci_model.h" #include "opskernel_manager/ops_kernel_builder_manager.h" @@ -56,7 +47,7 @@ void GetGeTensorDescFromDomiInfo(std::vector &ge_descs, uint32_t idx = 0; for (auto desc_item : domi_descs) { ge::TensorDesc ge_desc; - ge_desc.SetName(desc_item.name); + ge_desc.SetName(desc_item.name.c_str()); ge_desc.SetDataType(static_cast(desc_item.data_type)); ge_desc.SetFormat(static_cast(formats[idx])); std::vector shape_dims; @@ -454,7 +445,8 @@ Status GeExecutor::GetCurDynamicDims(uint32_t model_id, const vector & if (all_data_dims[i] < 0) { cur_dynamic_dims.push_back(dynamic_dims[i]); } else if (static_cast(all_data_dims[i]) != dynamic_dims[i]) { - GELOGE(ACL_ERROR_GE_DYNAMIC_INPUT_LENGTH_INVALID, "Static dims should be same, index: %zu value: %lu should be %ld", + GELOGE(ACL_ERROR_GE_DYNAMIC_INPUT_LENGTH_INVALID, + "Static dims should be same, index: %zu value: %lu should be %ld", i, dynamic_dims[i], all_data_dims[i]); return ACL_ERROR_GE_DYNAMIC_INPUT_LENGTH_INVALID; } @@ -930,12 +922,22 @@ Status GeExecutor::GetMemAndWeightSize(const void *model_data, size_t model_size Status GeExecutor::LoadSingleOp(const std::string &model_name, const ge::ModelData &modelData, void *stream, SingleOp **single_op) { - return SingleOpManager::GetInstance().GetOpFromModel(model_name, modelData, stream, single_op); + return LoadSingleOpV2(model_name, modelData, stream, single_op, 0); +} + +Status GeExecutor::LoadSingleOpV2(const std::string &model_name, const ge::ModelData &modelData, void *stream, + SingleOp **single_op, const uint64_t model_id) { + return SingleOpManager::GetInstance().GetOpFromModel(model_name, modelData, stream, single_op, model_id); } Status GeExecutor::LoadDynamicSingleOp(const std::string &model_name, const ge::ModelData &modelData, void *stream, DynamicSingleOp **single_op) { - return SingleOpManager::GetInstance().GetDynamicOpFromModel(model_name, modelData, stream, single_op); + return LoadDynamicSingleOpV2(model_name, modelData, stream, single_op, 0); +} + +Status GeExecutor::LoadDynamicSingleOpV2(const std::string &model_name, const ge::ModelData &modelData, void *stream, + DynamicSingleOp **single_op, const uint64_t model_id) { + return SingleOpManager::GetInstance().GetDynamicOpFromModel(model_name, modelData, stream, single_op, model_id); } Status GeExecutor::ExecuteAsync(SingleOp *executor, const std::vector &inputs, diff --git a/ge/ge_runtime/runtime_model.cc b/ge/ge_runtime/runtime_model.cc index b30ca1bf..71147a4b 100644 --- a/ge/ge_runtime/runtime_model.cc +++ b/ge/ge_runtime/runtime_model.cc @@ -28,7 +28,10 @@ namespace ge { namespace model_runner { +namespace { const int kOffsetUnit = 8; +const uint32_t kStringHeadElems = 2; +} // namespace RuntimeModel::~RuntimeModel() { GELOGI("RuntimeModel destructor start"); @@ -496,10 +499,15 @@ bool RuntimeModel::InitConstantInfo(std::shared_ptr &davinci_model return false; } uint64_t *buff = reinterpret_cast(const_cast(constant->weight_data.data())); - int64_t offset = elem_num * kOffsetUnit; + uint32_t head_len = kOffsetUnit * kStringHeadElems; + if (ge::CheckInt64Uint32MulOverflow(elem_num, head_len) != SUCCESS) { + GELOGE(FAILED, "Shape size is invalid"); + return false; + } + int64_t offset = elem_num * head_len; uintptr_t hbm_raw_data_base_addr = reinterpret_cast(constant->output_addrs[0]) + offset; for (int64_t i = elem_num - 1; i >= 0; --i) { - buff[i] = hbm_raw_data_base_addr + (buff[i] - buff[0]); + buff[i * kStringHeadElems] = hbm_raw_data_base_addr + (buff[i * kStringHeadElems] - buff[0]); } } diff --git a/ge/generator/ge_generator.cc b/ge/generator/ge_generator.cc index 0d484fbf..fd39552d 100644 --- a/ge/generator/ge_generator.cc +++ b/ge/generator/ge_generator.cc @@ -66,7 +66,8 @@ bool ContainsDynamicInpus(const ge::OpDesc &op_desc) { } // namespace namespace ge { -static Status CheckEngineTypeSupport(const OpDescPtr &op_desc, OpEngineType engine_type) { +static Status CheckEngineTypeSupport(const NodePtr &node, OpEngineType engine_type) { + const OpDescPtr &op_desc = node->GetOpDesc(); GE_CHECK_NOTNULL_EXEC(op_desc, return PARAM_INVALID); if (engine_type == ENGINE_SYS) { GELOGI("CheckEngineType: use default engine."); @@ -123,7 +124,7 @@ static Status CheckEngineTypeSupport(const OpDescPtr &op_desc, OpEngineType engi auto kernel_info_store = kernel_map.find(kernel_name); if (kernel_info_store != kernel_map.end()) { std::string unsupported_reason; - if (kernel_info_store->second->CheckSupported(op_desc, unsupported_reason)) { + if (kernel_info_store->second->CheckSupported(node, unsupported_reason)) { op_desc->SetOpEngineName(op_engine_name); op_desc->SetOpKernelLibName(kernel_name); GELOGI("CheckEngineType:Set OpKernelLibName %s and engine name %s into op_desc %s", kernel_name.c_str(), @@ -147,7 +148,7 @@ static Status CheckEngineTypeSupport(const OpDescPtr &op_desc, OpEngineType engi return FAILED; } -static Status AddInputs(const ComputeGraphPtr &graph, const NodePtr &node, GeTensorDesc &tensor, int32_t index, +static Status AddInputs(const ComputeGraphPtr &graph, const NodePtr &node, const GeTensorDesc &tensor, int32_t index, bool attr) { GE_CHECK_NOTNULL_EXEC(graph, return PARAM_INVALID); GE_CHECK_NOTNULL_EXEC(node, return PARAM_INVALID); @@ -326,6 +327,8 @@ Status GeGenerator::Initialize(const map &options, OmgContext &o GELOGE(MEMALLOC_FAILED, "Make shared failed"); return MEMALLOC_FAILED; } + + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOpsProtoInit); string opsproto_path; GetOpsProtoPath(opsproto_path); GELOGI("Get opsproto path is %s", opsproto_path.c_str()); @@ -374,6 +377,7 @@ Status GeGenerator::Initialize(const map &options, OmgContext &o } Status GeGenerator::Finalize() { + ErrorManager::GetInstance().SetStage(ErrorMessage::kFinalize, ErrorMessage::kFinalize); GE_CHECK_NOTNULL_EXEC(impl_, return PARAM_INVALID); Status ret = impl_->graph_manager_.Finalize(); if (ret != SUCCESS) { @@ -385,12 +389,14 @@ Status GeGenerator::Finalize() { Status GeGenerator::GenerateOfflineModel(const Graph &graph, const string &file_name_prefix, const vector &inputs) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); GELOGI("Start to generate offline model."); ModelBufferData model; return GenerateModel(graph, file_name_prefix, inputs, model, true); } Status GeGenerator::GenerateOnlineModel(const Graph &graph, const vector &inputs, ModelBufferData &model) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); return GenerateModel(graph, "online", inputs, model, false); } @@ -671,6 +677,8 @@ Status GeGenerator::CheckForSingleOp(OpDescPtr &op_desc, const vector Status GeGenerator::BuildSingleOp(OpDescPtr &op_desc, const vector &inputs, const vector &outputs, const string &model_file_name, OpEngineType engine_type, ModelBufferData &model_buff, bool is_offline) { + GE_CHECK_NOTNULL_EXEC(impl_, return PARAM_INVALID); + impl_->is_offline_ = is_offline; if (!is_offline) { (void)AttrUtils::SetBool(op_desc, ATTR_SINGLE_OP_SCENE, true); } @@ -690,27 +698,26 @@ Status GeGenerator::BuildSingleOp(OpDescPtr &op_desc, const vector &in OpDescPtr op_desc_tmp = AttrUtils::CloneOpDesc(op_desc); GE_CHECK_NOTNULL(op_desc_tmp); - // 1. check engine type when compile online + // 1. Create ComputeGraph. + string name = ge::CurrentTimeInStr() + "_" + model_file_name; + Graph graph; + GE_CHK_STATUS(BuildSingleOpGraph(op_desc, inputs, outputs, name, graph), "make graph fail."); + + // 2. check engine type when compile online if (model_file_name == kFileNameSuffix) { - Status ret = CheckEngineTypeSupport(op_desc, engine_type); + auto comp_graph = GraphUtils::GetComputeGraph(graph); + GE_CHECK_NOTNULL(comp_graph); + auto node = comp_graph->FindNode(op_desc->GetName()); + Status ret = CheckEngineTypeSupport(node, engine_type); if (ret != SUCCESS) { GELOGE(ret, "check engine type failed."); return ret; } } - // 2. Create ComputeGraph. - string name = ge::CurrentTimeInStr() + "_" + model_file_name; - Graph graph; - if (BuildSingleOpGraph(op_desc, inputs, outputs, name, graph) != ge::SUCCESS) { - GELOGE(GRAPH_FAILED, "make graph fail."); - return GRAPH_FAILED; - } GELOGI("ATC parser success in single op build."); GeRootModelPtr ge_root_model = nullptr; - GE_CHECK_NOTNULL_EXEC(impl_, return PARAM_INVALID); - impl_->is_offline_ = is_offline; GE_CHK_STATUS_RET_NOLOG(impl_->BuildModel(graph, inputs, ge_root_model)); map op_attrs = op_desc_tmp->GetAllAttrs(); GE_CHECK_NOTNULL(ge_root_model); @@ -723,7 +730,7 @@ Status GeGenerator::BuildSingleOp(OpDescPtr &op_desc, const vector &in const ComputeGraphPtr root_graph = ge_root_model->GetRootGraph(); GeModelPtr &ge_model = name_to_ge_model.begin()->second; GE_CHK_STATUS_RET_NOLOG(CheckDynamicSupport(ge_model, root_graph)); - GELOGD("The opType in op_desc_tmp is [%s]", op_desc_tmp->GetType().c_str()); + GELOGI("After build model, The opType in op_desc_tmp is [%s]", op_desc_tmp->GetType().c_str()); bool all_shape = false; (void)AttrUtils::GetBool(op_desc, kAicpuAllshape, all_shape); @@ -738,6 +745,7 @@ Status GeGenerator::BuildSingleOp(OpDescPtr &op_desc, const vector &in } else { GE_CHK_STATUS_RET_NOLOG(impl_->SaveParams(ge_model, op_desc_tmp->GetType(), op_attrs, inputs, outputs)); } + GELOGI("Start save GeModel to Model buffer"); GE_CHK_STATUS_RET_NOLOG(impl_->SaveModel(model_file_name, ge_model, model_buff)); return SUCCESS; } @@ -753,10 +761,13 @@ Status GeGenerator::BuildSingleOp(OpDescPtr &op_desc, const vector &in */ Status GeGenerator::BuildSingleOpModel(OpDescPtr &op_desc, const vector &inputs, const vector &outputs, const string &model_file_name) { - GELOGI("Start to build single op offline model."); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); + GELOGI("Start to build single op offline model, input size: %zu, output size: %zu", inputs.size(), outputs.size()); ModelBufferData model_buff; OpEngineType engine_type = ENGINE_SYS; - return BuildSingleOp(op_desc, inputs, outputs, model_file_name, engine_type, model_buff, true); + Status status = BuildSingleOp(op_desc, inputs, outputs, model_file_name, engine_type, model_buff, true); + GELOGI("Finish build single offline model, status: %u", status); + return status; } /** @@ -772,8 +783,11 @@ Status GeGenerator::BuildSingleOpModel(OpDescPtr &op_desc, const vector &inputs, const vector &outputs, OpEngineType engine_type, ModelBufferData &model_buff) { - GELOGI("Start to build single op online"); - return BuildSingleOp(op_desc, inputs, outputs, kFileNameSuffix, engine_type, model_buff, false); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); + GELOGI("Start to build single op online, input size: %zu, output size: %zu", inputs.size(), outputs.size()); + Status status = BuildSingleOp(op_desc, inputs, outputs, kFileNameSuffix, engine_type, model_buff, false); + GELOGI("Finish build single online model, status: %u", status); + return status; } Status GeGenerator::BuildSingleOpGraph(OpDescPtr &op_desc, const vector &inputs, @@ -798,8 +812,7 @@ Status GeGenerator::BuildSingleOpGraph(OpDescPtr &op_desc, const vector ret = graph_manager_.BuildGraph(graph_id, inputs, ge_root_model, session_id); } + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); if (ret != SUCCESS) { GELOGE(GE_GENERATOR_GRAPH_MANAGER_BUILD_GRAPH_FAILED, "GraphManager build graph fail, graph id: %u", graph_id); VarManagerPool::Instance().RemoveVarManager(session_id); diff --git a/ge/graph/build/graph_builder.cc b/ge/graph/build/graph_builder.cc index 2731e076..0883d895 100644 --- a/ge/graph/build/graph_builder.cc +++ b/ge/graph/build/graph_builder.cc @@ -222,6 +222,7 @@ Status GraphBuilder::BuildForKnownShapeGraph(ComputeGraphPtr &comp_graph, return SUCCESS; } + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kPreBuild); GELOGI("Begin to build known shape graph[%s].", comp_graph->GetName().c_str()); Status ret = SecondPartition(comp_graph); GE_CHK_STATUS_RET(ret, "Graph[%s] second partition Failed.", comp_graph->GetName().c_str()); @@ -252,6 +253,7 @@ Status GraphBuilder::BuildForKnownShapeGraph(ComputeGraphPtr &comp_graph, GE_TIMESTAMP_END(BuildModelForGetTask, "GraphBuilder::BuildModelForGetTask"); GE_DUMP(comp_graph, "AfterBuildModel"); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kTaskGenerate); GE_TIMESTAMP_START(GetTaskInfo); ret = GetTaskInfo(builder, model_ptr, comp_graph, subgraph_map, session_id); GE_TIMESTAMP_END(GetTaskInfo, "GraphBuilder::GetTaskInfo"); @@ -261,6 +263,7 @@ Status GraphBuilder::BuildForKnownShapeGraph(ComputeGraphPtr &comp_graph, return ret; } + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); ge_model_ptr = MakeShared(); if (ge_model_ptr == nullptr) { return MEMALLOC_FAILED; @@ -320,6 +323,7 @@ Status GraphBuilder::SetConstantInputOffset(ComputeGraphPtr &comp_graph) { Status GraphBuilder::BuildForUnknownShapeGraph(ComputeGraphPtr &comp_graph, GeModelPtr &ge_model_ptr, uint64_t session_id) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kPreBuild); GELOGI("Begin to build unknown shape graph[%s].", comp_graph->GetName().c_str()); Graph2SubGraphInfoList subgraph_map; ge::ModelBuilder builder(session_id, comp_graph, subgraph_map, stream_max_parallel_num_, hcom_parallel_, build_mode_); @@ -352,9 +356,11 @@ Status GraphBuilder::BuildForUnknownShapeGraph(ComputeGraphPtr &comp_graph, GeMo GE_CHK_STATUS_RET(builder.BuildModelForGetDynShapeTask(*model_ptr), "Graph[%s] builder BuildModelForGetDynShapeTask() return fail.", comp_graph->GetName().c_str()); GE_TIMESTAMP_END(BuildModelForGetDynShapeTask, "GraphBuilder::BuildModelForGetDynShapeTask"); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kTaskGenerate); GE_TIMESTAMP_START(GetTaskInfo); Status ret = GetTaskInfo(builder, model_ptr, comp_graph, subgraph_map, session_id); GE_TIMESTAMP_END(GetTaskInfo, "GraphBuilder::GetTaskInfo"); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); GraphUtils::DumpGEGraph(comp_graph, "AfterGetTask"); GraphUtils::DumpGEGraphToOnnx(*comp_graph, "AfterGetTask"); diff --git a/ge/graph/build/memory/graph_mem_assigner.cc b/ge/graph/build/memory/graph_mem_assigner.cc index 33fda096..e3736ee4 100755 --- a/ge/graph/build/memory/graph_mem_assigner.cc +++ b/ge/graph/build/memory/graph_mem_assigner.cc @@ -157,8 +157,8 @@ ge::Status GraphMemoryAssigner::AssignMemory2HasRefAttrNode() { } ge::Status CalculateTensorRealSizeAndOutSize(const ge::ConstGeTensorDescPtr &output_desc, - int64_t dim_index, int64_t &output_mem_size, - int64_t &batch_dim_num, int64_t &out_size) { + int64_t dim_index, int64_t &output_mem_size, + int64_t &batch_dim_num, int64_t &out_size) { graphStatus graph_status = ge::TensorUtils::GetSize(*output_desc, out_size); if (graph_status != GRAPH_SUCCESS) { GELOGE(FAILED, "Opdesc GetSize failed!"); @@ -430,18 +430,18 @@ Status GraphMemoryAssigner::ReAssignContinuousMemory(bool is_loop_graph) { GELOGE(FAILED, "node %s has no continuous type!", node->GetName().c_str()); return FAILED; } - GE_CHK_STATUS_RET(AssignContinuousInputMemoryWithAtomicProcess(node, iter->second), + GE_CHK_STATUS_RET(AssignContinuousInputMemoryWithAtomicProcess(node, iter->second, true), "Assign node %s continuous input memory failed.", node->GetName().c_str()) } for (auto pair : memory_offset_) { - GELOGD("After reassign continuous memory, memory type = %ld, memoffset = %zu.", pair.first, + GELOGD("After reassign continuous memory, memory type = %ld, mem_offset = %zu.", pair.first, pair.second.mem_offset_); } return ge::SUCCESS; } Status GraphMemoryAssigner::AssignContinuousInputMemory(const ge::NodePtr &node, int64_t &continuous_mem_start, - int64_t &continuous_mem_size, int64_t memory_type, uint32_t continuous_type) { + int64_t &continuous_mem_size, int64_t memory_type, uint32_t continuous_type, bool reverse_refresh) { GELOGI("Current node %s needs continuous input.", node->GetName().c_str()); auto iter = memory_offset_.find(memory_type); if (iter == memory_offset_.end()) { @@ -508,12 +508,16 @@ Status GraphMemoryAssigner::AssignContinuousInputMemory(const ge::NodePtr &node, std::map out2ins; GE_CHK_STATUS_RET(GetAllRef(node, out2ins), "Node: %s get all ref failed", node->GetName().c_str()); // output is beginning offset, set offset for input; only support this case now - if (out2ins.size() == 1 && out2ins.begin()->second == 0) { + if ((out2ins.size() == 1) && (out2ins.begin()->second == 0) && (reverse_refresh)) { + auto peer_output_offset = output_list.at(peer_out_data_anchor->GetIdx()); output_list.at(peer_out_data_anchor->GetIdx()) = output_list_this.at(out2ins.begin()->first); peer_op_desc->SetOutputOffset(output_list); + GELOGI("Node %s out %d ref in %d input node %s, use output offset %ld update %ld.", node->GetName().c_str(), + out2ins.begin()->first, out2ins.begin()->second, peer_op_desc->GetName().c_str(), + output_list_this.at(out2ins.begin()->first), peer_output_offset); } else { - GELOGW("Node %s out %d ref in %d with total ref numbers %zu", node->GetName().c_str(), out2ins.begin()->first, - out2ins.begin()->second, out2ins.size()); + GELOGD("Node %s out %d ref in %d input node %s with total ref numbers %zu.", node->GetName().c_str(), + out2ins.begin()->first, out2ins.begin()->second, peer_op_desc->GetName().c_str(), out2ins.size()); } // first input is beginning offset mem_offset = output_list.at(peer_out_data_anchor->GetIdx()); @@ -538,7 +542,7 @@ Status GraphMemoryAssigner::AssignContinuousInputMemory(const ge::NodePtr &node, } GELOGI("[IMAS]Continuous input : Set %s name[%s] optype[%s] output[%d] offset to [%zu] stream_id[%ld] memtype[%ld] " - "size[%zu] realsize[%ld] nopadding[%d].", node->GetOwnerComputeGraph()->GetName().c_str(), + "size[%zu] realsize[%ld] nopadding size[%d].", node->GetOwnerComputeGraph()->GetName().c_str(), peer_op_desc->GetName().c_str(), node->GetType().c_str(), peer_out_data_anchor->GetIdx(), output_list.at(peer_out_data_anchor->GetIdx()), peer_op_desc->GetStreamId(), memory_type, is_continuous_input_allocated ? 0UL : align_size, real_size, is_nopadding); @@ -1535,12 +1539,17 @@ ge::Status GraphMemoryAssigner::GetAllRef(const NodePtr &node, map &node_2_continuous_type) { for (const auto &in_node : input_continuous_node->GetInDataNodes()) { + if (in_node->GetType() == VARIABLE) { + GELOGI("node %s 's precursor node %s is variable, do not store.", input_continuous_node->GetName().c_str(), + in_node->GetName().c_str()); + return true; + } auto iter = node_2_continuous_type.find(in_node); // In node's topo order in the front, so function can not be exception auto continuous_type = iter->second; bool continuous_input = ((continuous_type & kTypeInput) != 0) || ((continuous_type & kTypeInputNoPadding) != 0); if (continuous_input) { - GELOGI("node %s 's precursor node %s need assign continuous input memory, store node firstly.", + GELOGI("Node %s 's precursor node %s need assign continuous input memory, store node firstly.", input_continuous_node->GetName().c_str(), in_node->GetName().c_str()); return false; } @@ -1550,7 +1559,7 @@ bool GraphMemoryAssigner::AssignContinuousInputMemoryWithAtomicProcessDirectly( node_2_continuous_type.emplace(out_node, continuous_type); bool continuous_input = ((continuous_type & kTypeInput) != 0) || ((continuous_type & kTypeInputNoPadding) != 0); if (continuous_input) { - GELOGI("node %s 's succeed node %s need assign continuous input memory, store node firstly.", + GELOGI("Node %s 's succeed node %s need assign continuous input memory, store node firstly.", input_continuous_node->GetName().c_str(), out_node->GetName().c_str()); return false; } @@ -1560,13 +1569,15 @@ bool GraphMemoryAssigner::AssignContinuousInputMemoryWithAtomicProcessDirectly( } ge::Status GraphMemoryAssigner::AssignContinuousInputMemoryWithAtomicProcess(const NodePtr &input_continuous_node, - uint32_t continuous_type) { + uint32_t continuous_type, + bool reverse_refresh) { int64_t mem_clean_start = 0; int64_t mem_clean_size = 0; int64_t memory_type = RT_MEMORY_HBM; GE_CHK_STATUS_RET(GetNodeMemoryType(input_continuous_node, memory_type, "input"), "Get node memory type failed."); - auto ret = AssignContinuousInputMemory(input_continuous_node, mem_clean_start, mem_clean_size, memory_type, continuous_type); + auto ret = AssignContinuousInputMemory(input_continuous_node, mem_clean_start, mem_clean_size, memory_type, + continuous_type, reverse_refresh); if (ret != ge::SUCCESS) { GELOGE(ret, "Assign continuous input memory failed!"); return ret; diff --git a/ge/graph/build/memory/graph_mem_assigner.h b/ge/graph/build/memory/graph_mem_assigner.h index b56c3716..756781fe 100755 --- a/ge/graph/build/memory/graph_mem_assigner.h +++ b/ge/graph/build/memory/graph_mem_assigner.h @@ -131,13 +131,14 @@ class GraphMemoryAssigner { std::map &node_2_continuous_type); ge::Status AssignContinuousInputMemoryWithAtomicProcess(const NodePtr &input_continuous_node, - uint32_t continuous_type); + uint32_t continuous_type, bool reverse_refresh = false); ge::Status FilterAtomicNodesForMemoryAssign(map>> &normal_atomic_nodes_map, map> &connecting_output_atomic_nodes); ge::Status AssignContinuousInputMemory(const ge::NodePtr &node, int64_t &continuous_mem_start, - int64_t &continuous_mem_size, int64_t memory_type, uint32_t continuous_type); + int64_t &continuous_mem_size, int64_t memory_type, uint32_t continuous_type, + bool reverse_refresh = false); ge::Status AssignContinuousOutputMemory(const ge::NodePtr &node, int64_t memory_type, uint32_t continuous_type); diff --git a/ge/graph/build/model_builder.cc b/ge/graph/build/model_builder.cc index ec891f70..1a14374d 100755 --- a/ge/graph/build/model_builder.cc +++ b/ge/graph/build/model_builder.cc @@ -19,6 +19,7 @@ #include #include #include "common/ge/ge_util.h" +#include "common/dump/dump_manager.h" #include "framework/common/debug/ge_log.h" #include "graph/anchor.h" #include "graph/attr_value.h" @@ -260,7 +261,9 @@ Status ModelBuilder::SetInputOutputDesc() { GE_IF_BOOL_EXEC(n->GetInAllNodes().empty() && n->GetOutAllNodes().empty(), continue;); SetInputIsConst(n); - if (IsGeLocalOp(n->GetOpDesc())) { + bool is_unknow = false; + (void)NodeUtils::GetNodeUnknownShapeStatus(*n, is_unknow); + if ((IsGeLocalOp(n->GetOpDesc())) && (!is_unknow)) { GE_CHK_STATUS_RET(CalcOutputSize(n), "Calculate output size failed"); } ret = AdjustConstWeightSize(n, weight_offset_); @@ -363,8 +366,11 @@ void ModelBuilder::InitL1FusionOption() { string buffer_optimize = "off_optimize"; graphStatus ret = ge::GetContext().GetOption(BUFFER_OPTIMIZE, buffer_optimize); if (ret == GRAPH_SUCCESS) { - is_l1_fusion_enable_ = (buffer_optimize == "l1_optimize"); - GELOGD("The value of %s is %s.", BUFFER_OPTIMIZE.c_str(), buffer_optimize.c_str()); + bool off_superkernel = false; + (void)AttrUtils::GetBool(compute_graph_, ATTR_NAME_OFF_SUPERKERNEL_ATTR, off_superkernel); + is_l1_fusion_enable_ = ((buffer_optimize == "l1_optimize") && (!off_superkernel)); + GELOGI("Compute graph %s the value of %s is %s, superkernel flag %d.", compute_graph_->GetName().c_str(), + BUFFER_OPTIMIZE.c_str(), buffer_optimize.c_str(), is_l1_fusion_enable_); } else { GELOGW("The value of %s is empty.", kEnableL1Fusion.c_str()); } @@ -429,7 +435,7 @@ Status ModelBuilder::BuildModelDef(ge::Model &model) { GE_CHK_BOOL_EXEC(ge::AttrUtils::SetBool(&model, ATTR_NAME_SWITCH_FOR_L1_FUSION, is_l1_fusion_enable_), GELOGE(FAILED, "SetBool of ATTR_NAME_SWITCH_FOR_L1_FUSION failed."); return FAILED); - const DumpProperties &dump_properties = PropertiesManager::Instance().GetDumpProperties(session_id_); + const DumpProperties &dump_properties = DumpManager::GetInstance().GetDumpProperties(session_id_); bool is_op_debug = dump_properties.IsOpDebugOpen(); if (is_op_debug) { if (!ge::AttrUtils::SetBool(&model, ATTR_OP_DEBUG_FLAG, is_op_debug)) { @@ -683,6 +689,7 @@ Status ModelBuilder::PreBuildModel() { Status ModelBuilder::BuildModelForGetTask(ge::Model &model) { GE_CHK_STATUS_RET(AdjustInputTensorFlag(), "AdjustInputTensorFlag failed!"); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kStreamAlloc); // Assign logical streams. StreamAllocator stream_allocator(compute_graph_, subgraphs_); GE_TIMESTAMP_START(AssignLogicalStreams); @@ -690,6 +697,7 @@ Status ModelBuilder::BuildModelForGetTask(ge::Model &model) { "Assign logical streams failed."); GE_TIMESTAMP_END(AssignLogicalStreams, "GraphBuilder::AssignLogicalStreams"); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kMemoryAlloc); // Assign functional op labels. auto root_graph = GraphUtils::FindRootGraph(compute_graph_); (void)AttrUtils::GetInt(*root_graph, ATTR_MODEL_LABEL_NUM, label_num_); @@ -700,22 +708,25 @@ Status ModelBuilder::BuildModelForGetTask(ge::Model &model) { "Assign Memory Failed!"); GE_TIMESTAMP_END(AssignMemory, "GraphBuilder::AssignMemory"); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); GE_TIMESTAMP_START(SetInputOutputOffset); SetInputOutputOffsetPass input_output_offset; GE_CHK_STATUS_RET(input_output_offset.Run(compute_graph_), "Set input output offset failed."); - GE_TIMESTAMP_END(SetInputOutputOffset, "SetInputOutputOffsetPass::Run."); + GE_TIMESTAMP_END(SetInputOutputOffset, "SetInputOutputOffsetPass::Run"); // Compile single op in graph build stage GE_TIMESTAMP_START(CompileSingleOp); GE_CHK_STATUS_RET(CompileSingleOp(), "ATC builder CompileSingleOp() return fail."); GE_TIMESTAMP_EVENT_END(CompileSingleOp, "GraphBuilder::CompileSingleOp"); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kStreamAlloc); // Refresh real streams and insert event nodes. GE_TIMESTAMP_START(RefreshRealStream); GE_CHK_STATUS_RET(stream_allocator.RefreshRealStream(stream_num_, event_num_), "RefreshRealStream failed."); huge_streams_ = stream_allocator.GetHugeStreams(); GE_TIMESTAMP_END(RefreshRealStream, "GraphBuilder::RefreshRealStream"); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); GE_TIMESTAMP_START(MergeWeights); GE_CHK_STATUS_RET(MergeWeights(), "MergeWeights Failed!"); GE_TIMESTAMP_END(MergeWeights, "GraphBuilder::MergeWeights"); diff --git a/ge/graph/build/task_generator.cc b/ge/graph/build/task_generator.cc index 3f4cd1bc..4eda4020 100755 --- a/ge/graph/build/task_generator.cc +++ b/ge/graph/build/task_generator.cc @@ -852,7 +852,7 @@ Status TaskGenerator::FindProfilingTaskIndex(const ComputeGraphPtr &graph, Profi // subgraph of dynamic graph no need to find index, has been found in parent graph if (IsSubGraphOfDynamicGraph(graph)) { - GELOGI("Graph[%s] is subgraph of dynamic graph, no nned to find index.", graph->GetName().c_str()); + GELOGI("Graph[%s] is subgraph of dynamic graph, no need to find index.", graph->GetName().c_str()); return SUCCESS; } @@ -1042,7 +1042,7 @@ Status TaskGenerator::InsertProfilingTaskAfter(const OpDescPtr &op_desc, const P } GELOGD("Insert bp profiling task: %d, insert end profiling task: %d, fp index: %u, bp index: %u, end index size: %zu", is_insert_bp_profiling_task, is_insert_end_profiling_task, profiling_point.fp_index, profiling_point.bp_index, - profiling_point.end_index.size() ); + profiling_point.end_index.size()); bool is_all_reduce = (op_desc->GetType() == HCOMALLREDUCE || op_desc->GetType() == HVDCALLBACKALLREDUCE); if ((profiling_point.bp_index == node_index) || (!is_all_reduce && is_insert_bp_profiling_task)) { diff --git a/ge/graph/execute/graph_execute.cc b/ge/graph/execute/graph_execute.cc index 79c22a29..1aee756c 100755 --- a/ge/graph/execute/graph_execute.cc +++ b/ge/graph/execute/graph_execute.cc @@ -19,12 +19,8 @@ #include #include -#include "common/ge_inner_error_codes.h" -#include "common/model_parser/base.h" #include "graph/load/model_manager/model_manager.h" #include "omm/csa_interact.h" -#include "runtime/dev.h" -#include "runtime/mem.h" namespace ge { GraphExecutor::GraphExecutor() diff --git a/ge/graph/load/graph_loader.cc b/ge/graph/load/graph_loader.cc index 29afc939..644880ce 100755 --- a/ge/graph/load/graph_loader.cc +++ b/ge/graph/load/graph_loader.cc @@ -20,19 +20,13 @@ #include #include "common/helper/model_helper.h" -#include "common/util.h" +#include "common/model_parser/model_parser.h" #include "graph/ge_context.h" -#include "graph/load/model_manager/davinci_model_parser.h" #include "graph/load/model_manager/model_manager.h" #include "graph/manager/graph_var_manager.h" #include "omm/csa_interact.h" -#include "runtime/dev.h" namespace ge { -GraphLoader::GraphLoader() = default; - -GraphLoader::~GraphLoader() = default; - Status GraphLoader::UnloadModel(uint32_t model_id) { auto model_manager = ModelManager::GetInstance(); GE_CHECK_NOTNULL(model_manager); @@ -120,7 +114,6 @@ Status GraphLoader::GetMaxUsedMemory(uint32_t model_id, uint64_t &max_size) { Status GraphLoader::LoadDataFromFile(const std::string &path, const std::string &key_path, int32_t priority, ModelData &model_data) { - Status ret; if (!CheckInputPathValid(path)) { GELOGE(ACL_ERROR_GE_EXEC_MODEL_PATH_INVALID, "model path is invalid: %s", path.c_str()); return ACL_ERROR_GE_EXEC_MODEL_PATH_INVALID; @@ -132,16 +125,15 @@ Status GraphLoader::LoadDataFromFile(const std::string &path, const std::string return ACL_ERROR_GE_PARAM_INVALID; } - ret = DavinciModelParser::LoadFromFile(path.c_str(), key_path.c_str(), priority, model_data); + Status ret = ModelParserBase::LoadFromFile(path.c_str(), key_path.c_str(), priority, model_data); if (ret != SUCCESS) { GELOGE(ret, "LoadModelFromFile: Load failed. ret = %u", ret); if (model_data.model_data != nullptr) { delete[] static_cast(model_data.model_data); model_data.model_data = nullptr; } - return ret; } - return SUCCESS; + return ret; } Status GraphLoader::CommandHandle(const Command &command) { diff --git a/ge/graph/load/graph_loader.h b/ge/graph/load/graph_loader.h index 3632a10a..4704e4e2 100755 --- a/ge/graph/load/graph_loader.h +++ b/ge/graph/load/graph_loader.h @@ -32,9 +32,9 @@ namespace ge { class GraphLoader { public: - GraphLoader(); + GraphLoader() = default; - virtual ~GraphLoader(); + virtual ~GraphLoader() = default; GraphLoader(const GraphLoader &in) = delete; diff --git a/ge/graph/load/model_manager/data_dumper.h b/ge/graph/load/model_manager/data_dumper.h index 8e612688..fbe70cf0 100755 --- a/ge/graph/load/model_manager/data_dumper.h +++ b/ge/graph/load/model_manager/data_dumper.h @@ -36,21 +36,9 @@ namespace ge { class DataDumper { public: - explicit DataDumper(const RuntimeParam &rsh) - : model_name_(), - model_id_(0), - runtime_param_(rsh), - dev_mem_load_(nullptr), - dev_mem_unload_(nullptr), - op_list_(), - input_map_(), - load_flag_(false), - device_id_(0), - global_step_(0), - loop_per_iter_(0), - loop_cond_(0), - compute_graph_(nullptr), - ref_info_() {} + DataDumper() : runtime_param_{} {} + + explicit DataDumper(const RuntimeParam &rsh) : runtime_param_(rsh) {} ~DataDumper(); @@ -105,10 +93,10 @@ class DataDumper { // for inference data dump std::string om_name_; - uint32_t model_id_; + uint32_t model_id_ = 0; const RuntimeParam &runtime_param_; - void *dev_mem_load_; - void *dev_mem_unload_; + void *dev_mem_load_ = nullptr; + void *dev_mem_unload_ = nullptr; struct InnerDumpInfo; struct InnerInputMapping; @@ -119,16 +107,15 @@ class DataDumper { uint32_t end_graph_stream_id_ = 0; bool is_end_graph_ = false; std::multimap input_map_; // release after DavinciModel::Init - bool load_flag_; - uint32_t device_id_; - uintptr_t global_step_; - uintptr_t loop_per_iter_; - uintptr_t loop_cond_; - ComputeGraphPtr compute_graph_; // release after DavinciModel::Init - std::map ref_info_; // release after DavinciModel::Init + bool load_flag_ = false; + uint32_t device_id_ = 0; + uintptr_t global_step_ = 0; + uintptr_t loop_per_iter_ = 0; + uintptr_t loop_cond_ = 0; + ComputeGraphPtr compute_graph_ = nullptr; // release after DavinciModel::Init + std::map ref_info_; // release after DavinciModel::Init void *l1_fusion_addr_ = nullptr; - uint32_t op_debug_task_id_ = 0; uint32_t op_debug_stream_id_ = 0; void *op_debug_addr_ = nullptr; @@ -144,20 +131,16 @@ class DataDumper { Status DumpOutputWithTask(const InnerDumpInfo &inner_dump_info, aicpu::dump::Task &task); Status DumpInput(const InnerDumpInfo &inner_dump_info, aicpu::dump::Task &task); Status DumpRefInput(const DataDumper::InnerDumpInfo &inner_dump_info, aicpu::dump::Input &input, size_t i, - const std::string &node_name_index); + const std::string &node_name_index); Status ExecuteLoadDumpInfo(aicpu::dump::OpMappingInfo &op_mapping_info); void SetEndGraphIdToAicpu(uint32_t task_id, uint32_t stream_id, aicpu::dump::OpMappingInfo &op_mapping_info); void SetOpDebugIdToAicpu(uint32_t task_id, uint32_t stream_id, void *op_debug_addr, aicpu::dump::OpMappingInfo &op_mapping_info); Status ExecuteUnLoadDumpInfo(aicpu::dump::OpMappingInfo &op_mapping_info); - Status GenerateInput(aicpu::dump::Input &input, - const OpDesc::Vistor &tensor_descs, - const uintptr_t &addr, - size_t index); - Status GenerateOutput(aicpu::dump::Output &output, - const OpDesc::Vistor &tensor_descs, - const uintptr_t &addr, - size_t index); + Status GenerateInput(aicpu::dump::Input &input, const OpDesc::Vistor &tensor_descs, + const uintptr_t &addr, size_t index); + Status GenerateOutput(aicpu::dump::Output &output, const OpDesc::Vistor &tensor_descs, + const uintptr_t &addr, size_t index); void GenerateOpBuffer(const int64_t &size, aicpu::dump::Task &task); }; struct DataDumper::InnerDumpInfo { diff --git a/ge/graph/load/model_manager/davinci_model.cc b/ge/graph/load/model_manager/davinci_model.cc index e921aefe..933aba5a 100755 --- a/ge/graph/load/model_manager/davinci_model.cc +++ b/ge/graph/load/model_manager/davinci_model.cc @@ -92,12 +92,39 @@ const uint32_t kEndOfSequence = 0x0704000a; const uint32_t kEndOfSequenceNew = 507005; const int32_t kModelAbortNormal = 0x0704000e; const int32_t kModelAbortNormalNew = 507024; +const uint32_t kInteval = 2; +const char *const kModelName = "model_name"; +const char *const kModeleId = "model_id"; +const char *const kLoadStartTime = "load_start_time"; +const char *const kLoadEndTime = "load_end_time"; +const char *const kFusionOpInfo = "fusion_op_info"; +const char *const kFusionOpName = "fusion_op_name"; +const char *const kOriginalOpNum = "origin_op_num"; +const char *const kOriginalOpName = "origin_op_name"; +const char *const kStreamId = "stream_id"; +const char *const kFusionOpMemoryInfo = "memory_info"; +const char *const kInputSize = "input_size"; +const char *const kOutputSize = "output_size"; +const char *const kWeightSize = "weight_size"; +const char *const kWorkSpaceSize = "workspace_size"; +const char *const kTotalSize = "total_size"; +const char *const kTaskCount = "task_count"; +const char *const kTaskId = "task_id"; +const char* const kRequestId = "request_id"; +const char* const kThreadId = "thread_id"; +const char* const kInputBeginTime = "input_begin_time"; +const char* const kInputEndTime = "input_end_time"; +const char* const kInferBeginTime = "infer_begin_time"; +const char* const kInferEndTime = "infer_end_time"; +const char* const kOutputBeginTime = "output_start_time"; +const char* const kOutputEndTime = "output_end_time"; +const uint32_t kStringHeadElems = 2; inline bool IsDataOp(const std::string &node_type) { - return node_type == DATA_TYPE || node_type == AIPP_DATA_TYPE || node_type == ANN_DATA_TYPE; + return (node_type == DATA_TYPE) || (node_type == AIPP_DATA_TYPE) || (node_type == ANN_DATA_TYPE); } -inline bool IsTbeTask(const OpDescPtr &op_desc) { +bool IsTbeTask(const OpDescPtr &op_desc) { uint32_t run_mode = static_cast(domi::ImplyType::INVALID); if (!AttrUtils::GetInt(op_desc, ATTR_NAME_IMPLY_TYPE, run_mode)) { return false; @@ -187,12 +214,12 @@ DavinciModel::~DavinciModel() { UnbindTaskSinkStream(); for (size_t i = 0; i < label_list_.size(); ++i) { if (label_list_[i] != nullptr) { - GE_LOGW_IF(rtLabelDestroy(label_list_[i]) != RT_ERROR_NONE, "Destroy label failed, index: %zu", i); + GE_LOGW_IF(rtLabelDestroy(label_list_[i]) != RT_ERROR_NONE, "Destroy label failed, index:%zu.", i); } } for (size_t i = 0; i < stream_list_.size(); ++i) { - GE_LOGW_IF(rtStreamDestroy(stream_list_[i]) != RT_ERROR_NONE, "Destroy stream failed, index: %zu", i); + GE_LOGW_IF(rtStreamDestroy(stream_list_[i]) != RT_ERROR_NONE, "Destroy stream failed, index:%zu.", i); } for (size_t i = 0; i < event_list_.size(); ++i) { @@ -205,6 +232,8 @@ DavinciModel::~DavinciModel() { FreeP2PMem(); + OpDebugUnRegister(); + if (l1_fusion_addr_ != nullptr) { GE_CHK_RT(rtFree(l1_fusion_addr_)); } @@ -215,8 +244,6 @@ DavinciModel::~DavinciModel() { } } - OpDebugUnRegister(); - ReleaseTask(); CleanTbeHandle(); @@ -251,7 +278,7 @@ void DavinciModel::UnbindHcomStream() { for (size_t i = 0; i < all_hccl_stream_list_.size(); i++) { GE_LOGW_IF(rtModelUnbindStream(rt_model_handle_, all_hccl_stream_list_[i]) != RT_ERROR_NONE, "Unbind hccl stream from model failed! Index: %zu", i); - GE_LOGW_IF(rtStreamDestroy(all_hccl_stream_list_[i]) != RT_ERROR_NONE, "Destroy hccl stream for rt_model failed!") + GE_LOGW_IF(rtStreamDestroy(all_hccl_stream_list_[i]) != RT_ERROR_NONE, "Destroy hccl stream for rt_model failed") } } return; @@ -337,7 +364,7 @@ Status DavinciModel::InitWeightMem(void *dev_ptr, void *weight_ptr, size_t weigh Status DavinciModel::InitFeatureMapAndP2PMem(void *dev_ptr, size_t mem_size) { if (is_feature_map_mem_has_inited_) { - GELOGE(PARAM_INVALID, "call InitFeatureMapMem more than once."); + GELOGE(PARAM_INVALID, "call InitFeatureMapMem more than once"); return PARAM_INVALID; } is_feature_map_mem_has_inited_ = true; @@ -391,7 +418,7 @@ Status DavinciModel::InitFeatureMapAndP2PMem(void *dev_ptr, size_t mem_size) { Status DavinciModel::InitVariableMem() { // malloc variable memory base var_mem_base_ = VarManager::Instance(session_id_)->GetVarMemoryBase(RT_MEMORY_HBM); - if (TotalVarMemSize() && var_mem_base_ == nullptr) { + if (TotalVarMemSize() && (var_mem_base_ == nullptr)) { Status ret = VarManager::Instance(session_id_)->MallocVarMemory(TotalVarMemSize()); if (ret != SUCCESS) { GELOGE(ret, "Malloc variable memory failed."); @@ -453,7 +480,7 @@ void DavinciModel::CheckHasHcomOp(const ComputeGraphPtr &compute_graph) { for (const auto &node : compute_graph->GetAllNodes()) { OpDescPtr op_desc = node->GetOpDesc(); - GE_IF_BOOL_EXEC(op_desc == nullptr, GELOGW("Node OpDesc is nullptr"); continue); + GE_IF_BOOL_EXEC(op_desc == nullptr, GELOGW("Node OpDesc is nullptr."); continue); if (hcom_opp_types.count(op_desc->GetType()) > 0) { uint32_t stream_id = static_cast(op_desc->GetStreamId()); hcom_streams_.emplace(stream_id); @@ -500,25 +527,25 @@ Status DavinciModel::DoTaskSink() { } GE_CHK_RT_RET(rtGetAicpuDeploy(&deploy_type_)); - GELOGI("do task_sink. AiCpu deploy type is: %x.", deploy_type_); + GELOGI("Do task_sink. AiCpu deploy type is: %x.", deploy_type_); GE_CHK_STATUS_RET(BindModelStream(), "Bind model stream failed."); if (known_node_) { - GE_CHK_STATUS_RET(MallocKnownArgs(), "Mallloc known node args failed."); + GE_CHK_STATUS_RET(MallocKnownArgs(), "Mallloc known node's args failed"); } - GE_CHK_STATUS_RET(InitTaskInfo(*model_task_def.get()), "InitTaskInfo failed."); + GE_CHK_STATUS_RET(InitTaskInfo(*model_task_def.get()), "InitTaskInfo failed"); - GE_CHK_STATUS_RET(ModelManager::GetInstance()->LaunchCustAicpuSo(), "Launch cust aicpu so failed."); + GE_CHK_STATUS_RET(ModelManager::GetInstance()->LaunchCustAicpuSo(), "Launch cust aicpu so failed"); - GE_CHK_STATUS_RET(ModelManager::GetInstance()->CheckAicpuOpList(ge_model_), "Check aicpu op type failed."); + GE_CHK_STATUS_RET(ModelManager::GetInstance()->CheckAicpuOpList(ge_model_), "Check aicpu op type failed"); - GE_CHK_STATUS_RET(InitEntryTask(), "InitEntryTask failed."); + GE_CHK_STATUS_RET(InitEntryTask(), "InitEntryTask failed"); - GE_CHK_STATUS_RET(InitL1DataDumperArgs(), "InitL1DataDumperArgs failed."); + GE_CHK_STATUS_RET(InitL1DataDumperArgs(), "InitL1DataDumperArgs failed"); - GE_CHK_STATUS_RET(DistributeTask(), "Distribute failed."); + GE_CHK_STATUS_RET(DistributeTask(), "Distribute failed"); GE_CHK_RT_RET(rtModelLoadComplete(rt_model_handle_)); @@ -531,7 +558,7 @@ Status DavinciModel::SetTSDevice() { int64_t value = 0; bool ret = ge::AttrUtils::GetInt(ge_model_, ATTR_MODEL_CORE_TYPE, value); uint32_t core_type = ret ? static_cast(value) : 0; - GELOGD("SetTSDevice: %u", core_type); + GELOGD("SetTSDevice: %u.", core_type); rtError_t rt_ret = rtSetTSDevice(core_type); if (rt_ret != RT_ERROR_NONE) { GELOGE(RT_FAILED, "SetTSDevice failed, ret: 0x%X", rt_ret); @@ -541,77 +568,21 @@ Status DavinciModel::SetTSDevice() { } Status DavinciModel::OpDebugRegister() { - bool is_op_debug = false; - (void)ge::AttrUtils::GetBool(ge_model_, ATTR_OP_DEBUG_FLAG, is_op_debug); - GELOGD("The value of op debug in ge_model is %d.", is_op_debug); - if (is_op_debug) { - debug_reg_mutex_.lock(); - rtError_t rt_ret = rtMalloc(&op_debug_addr_, kOpDebugMemorySize, RT_MEMORY_DDR); - if (rt_ret != RT_ERROR_NONE) { - GELOGE(RT_FAILED, "rtMalloc error, ret: 0x%X", rt_ret); - return RT_ERROR_TO_GE_STATUS(rt_ret); - } - - uint64_t debug_addrs_tmp = static_cast(reinterpret_cast(op_debug_addr_)); - - // For data dump, aicpu needs the pointer to pointer that save the real debug address. - rt_ret = rtMalloc(&p2p_debug_addr_, kDebugP2pSize, RT_MEMORY_HBM); - if (rt_ret != RT_ERROR_NONE) { - GELOGE(RT_FAILED, "rtMalloc error, ret: 0x%X", rt_ret); - return RT_ERROR_TO_GE_STATUS(rt_ret); - } - rt_ret = rtMemcpy(p2p_debug_addr_, sizeof(uint64_t), &debug_addrs_tmp, sizeof(uint64_t), RT_MEMCPY_HOST_TO_DEVICE); - if (rt_ret != RT_ERROR_NONE) { - GELOGE(RT_FAILED, "rtMemcpy to p2p_addr error: 0x%X", rt_ret); - return RT_ERROR_TO_GE_STATUS(rt_ret); - } - - uint32_t op_debug_mode = 0; - (void)ge::AttrUtils::GetInt(ge_model_, ATTR_OP_DEBUG_MODE, op_debug_mode); - GELOGD("The value of op_debug_mode in ge_model_ is %u.", op_debug_mode); - uint32_t debug_task_id = 0; - uint32_t debug_stream_id = 0; - rt_ret = rtDebugRegister(rt_model_handle_, op_debug_mode, op_debug_addr_, &debug_stream_id, &debug_task_id); - if (rt_ret != RT_ERROR_NONE) { - GELOGE(RT_FAILED, "rtDebugRegister error, ret: 0x%X", rt_ret); - return RT_ERROR_TO_GE_STATUS(rt_ret); + if (GetDumpProperties().IsOpDebugOpen()) { + uint32_t op_debug_mode = GetDumpProperties().GetOpDebugMode(); + auto ret = opdebug_register_.RegisterDebugForModel(rt_model_handle_, op_debug_mode, data_dumper_); + if (ret != SUCCESS) { + GELOGE(ret,"Register known shape op debug failed, ret: 0x%X",ret); + return ret; } - GELOGI("debug_task_id:%d, debug_stream_id:%u", debug_task_id, debug_stream_id); is_op_debug_reg_ = true; - - data_dumper_.SaveOpDebugId(debug_task_id, debug_stream_id, p2p_debug_addr_, is_op_debug); } - return SUCCESS; } void DavinciModel::OpDebugUnRegister() { if (is_op_debug_reg_) { - debug_reg_mutex_.unlock(); - rtError_t rt_ret = RT_ERROR_NONE; - if (rt_model_handle_ != nullptr) { - GELOGD("start call debug_unregister."); - rt_ret = rtDebugUnRegister(rt_model_handle_); - if (rt_ret != RT_ERROR_NONE) { - GELOGW("rtDebugUnRegister failed, ret: 0x%X", rt_ret); - } - } - - if (op_debug_addr_ != nullptr) { - rt_ret = rtFree(op_debug_addr_); - if (rt_ret != RT_ERROR_NONE) { - GELOGW("rtFree failed, ret: 0x%X", rt_ret); - } - op_debug_addr_ = nullptr; - } - - if (p2p_debug_addr_ != nullptr) { - rt_ret = rtFree(p2p_debug_addr_); - if (rt_ret != RT_ERROR_NONE) { - GELOGW("rtFree failed, ret: 0x%X", rt_ret); - } - p2p_debug_addr_ = nullptr; - } + opdebug_register_.UnregisterDebugForModel(rt_model_handle_); is_op_debug_reg_ = false; } return; @@ -620,9 +591,9 @@ void DavinciModel::OpDebugUnRegister() { // initialize op sequence and call initialization function of each op respectively Status DavinciModel::Init(void *dev_ptr, size_t mem_size, void *weight_ptr, size_t weight_size) { // validating params - GELOGI("Priority is %d", priority_); + GELOGI("Priority is %d.", priority_); GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(priority_ < 0 || priority_ > 7, return PARAM_INVALID, - "Priority must between 0-7, now is %d", priority_); + "Priority must between 0-7, now is %d.", priority_); GE_CHK_BOOL_RET_STATUS(ge_model_ != nullptr, PARAM_INVALID, "GeModel is null."); Graph graph = ge_model_->GetGraph(); ComputeGraphPtr compute_graph = GraphUtils::GetComputeGraph(graph); @@ -632,7 +603,7 @@ Status DavinciModel::Init(void *dev_ptr, size_t mem_size, void *weight_ptr, size InitRuntimeParams(); // RTS set aicore or vectorcore - GE_CHK_STATUS_RET(SetTSDevice(), "SetTSDevice failed"); + GE_CHK_STATUS_RET(SetTSDevice(), "SetTSDevice failed."); version_ = ge_model_->GetVersion(); name_ = ge_model_->GetName(); @@ -683,7 +654,7 @@ Status DavinciModel::Init(void *dev_ptr, size_t mem_size, void *weight_ptr, size runtime_param_.graph_id = compute_graph->GetGraphID(); // op debug register - GE_CHK_STATUS_RET(OpDebugRegister(), "OpDebugRegister failed"); + GE_CHK_STATUS_RET(OpDebugRegister(), "OpDebugRegister failed."); GE_TIMESTAMP_START(TransAllVarData); GE_CHK_STATUS_RET(TransAllVarData(compute_graph, runtime_param_.graph_id), "TransAllVarData failed."); @@ -691,7 +662,7 @@ Status DavinciModel::Init(void *dev_ptr, size_t mem_size, void *weight_ptr, size GE_CHK_STATUS_RET(TransVarDataUtils::CopyVarData(compute_graph, session_id_, device_id_), "copy var data failed."); GE_TIMESTAMP_START(InitModelMem); - GELOGD("Known node is %d", known_node_); + GELOGD("Known node is %d.", known_node_); GE_CHK_STATUS_RET_NOLOG(InitWeightMem(dev_ptr, weight_ptr, weight_size)); if (!known_node_) { GE_CHK_STATUS_RET_NOLOG(InitFeatureMapAndP2PMem(dev_ptr, mem_size)); @@ -709,10 +680,10 @@ Status DavinciModel::Init(void *dev_ptr, size_t mem_size, void *weight_ptr, size (void)ge::AttrUtils::SetStr(op_desc, VAR_ATTR_VAR_IS_BROADCAST, "var_is_restore");); } - GE_CHK_STATUS_RET(InitNodes(compute_graph), "Init nodes failed"); + GE_CHK_STATUS_RET(InitNodes(compute_graph), "Init nodes failed."); GE_TIMESTAMP_START(DoTaskSink); - GE_CHK_STATUS_RET(DoTaskSink(), "Task sink failed"); + GE_CHK_STATUS_RET(DoTaskSink(), "Task sink failed."); GE_TIMESTAMP_END(DoTaskSink, "GraphLoader::DoTaskSink"); /// In zero copy model, if a aicpu operator is connected to the first or last layer, before model execution, @@ -739,18 +710,12 @@ Status DavinciModel::Init(void *dev_ptr, size_t mem_size, void *weight_ptr, size } } - CREATE_STD_THREAD(shrink_id_, &DavinciModel::Shrink, this); + Shrink(); return SUCCESS; } Status DavinciModel::ReportProfilingData() { - std::vector compute_graph_desc_info; - Status ret = GetComputeGraphInfo(compute_graph_desc_info); - if (ret != SUCCESS) { - GELOGE(ret, "GetComputeGraphInfo failed."); - return ret; - } - ProfilingManager::Instance().ReportProfilingData(model_id_, GetTaskDescInfo(), compute_graph_desc_info); + ProfilingManager::Instance().ReportProfilingData(model_id_, GetTaskDescInfo()); GE_CHK_STATUS(SinkModelProfile(), "Sink model profiler failed."); return SUCCESS; @@ -1193,7 +1158,7 @@ void DavinciModel::GetAllGearsInfo(const NodePtr &node) { } if (!gear_info.empty()) { all_gears_info_.emplace_back(gear_info); - GELOGD("Init all gears info from %s, gaer info is %s.", node->GetName().c_str(), + GELOGD("Init all gears info from %s, gaer info is %s", node->GetName().c_str(), formats::JoinToString(gear_info).c_str()); } } @@ -1262,7 +1227,7 @@ Status DavinciModel::GetGearAndRealOutSizeInfo(const ComputeGraphPtr &graph, con Status DavinciModel::GetRealOutputSizeOfCase(const ComputeGraphPtr &graph, size_t input_index, const NodePtr &case_node) { - GELOGD("Start get output size of %s, which is %zu input to netoutput.", case_node->GetName().c_str(), input_index); + GELOGD("Start get output size of %s, which is %zu input to netoutput", case_node->GetName().c_str(), input_index); const auto &func_desc = case_node->GetOpDesc(); GE_CHECK_NOTNULL(func_desc); std::map, int64_t> gear_and_real_out_size_info; @@ -1307,7 +1272,7 @@ Status DavinciModel::GetRealOutputSizeOfCase(const ComputeGraphPtr &graph, size_ } Status DavinciModel::GetGearAndRealOutShapeInfo(const ComputeGraphPtr &graph, const NodePtr &node) { - GELOGD("Start to get dynamic output dims of %s.", node->GetName().c_str()); + GELOGD("Start to get dynamic output dims of %s", node->GetName().c_str()); merge_nodes_gear_and_real_out_shape_info_.clear(); size_t idx = 0; for (const auto &in_anchor : node->GetAllInDataAnchors()) { @@ -1321,7 +1286,7 @@ Status DavinciModel::GetGearAndRealOutShapeInfo(const ComputeGraphPtr &graph, co if ((peer_node->GetType() == CASE) && (op_desc->HasAttr(ATTR_INSERT_BY_MBATCH))) { std::vector dynamic_output_shape_info; if (!AttrUtils::GetListStr(node->GetOpDesc(), ATTR_NAME_DYNAMIC_OUTPUT_DIMS, dynamic_output_shape_info)) { - GELOGD("Can not get dynamic output dims attr from %s.", node->GetName().c_str()); + GELOGD("Can not get dynamic output dims attr from %s", node->GetName().c_str()); return SUCCESS; } GELOGI("Dynamic output shape info is %s", formats::JoinToString(dynamic_output_shape_info).c_str()); @@ -1341,7 +1306,7 @@ Status DavinciModel::GetGearAndRealOutShapeInfo(const ComputeGraphPtr &graph, co output_shape.emplace_back(it[i]); } gear_and_real_out_shape_info[all_gears_info_[gear_index]] = output_shape; - GELOGD("Get real gear index is: %zu, gear info is %s, output shape is %s.", + GELOGD("Get real gear index is: %zu, gear info is %s, output shape is %s", gear_index, formats::JoinToString(all_gears_info_[gear_index]).c_str(), formats::JoinToString(output_shape).c_str()); } @@ -1364,7 +1329,7 @@ void DavinciModel::ParseDynamicOutShape(const std::vector &str_info } shape.emplace_back(std::strtol(dim.c_str(), nullptr, kDecimal)); } - GELOGI("Shape from attr is %s.", formats::JoinToString(shape).c_str()); + GELOGI("Shape from attr is %s", formats::JoinToString(shape).c_str()); vec_info.emplace_back(shape); } } @@ -1407,7 +1372,7 @@ Status DavinciModel::InitLabelSet(const OpDescPtr &op_desc) { return INTERNAL_ERROR; } - GELOGI("InitLabelSet: label[%u]=%p stream[%u]=%p.", label_index, rt_label, stream_id, stream); + GELOGI("InitLabelSet: label[%u]=%p stream[%u]=%p", label_index, rt_label, stream_id, stream); label_id_indication_.insert(label_index); label_list_[label_index] = rt_label; return SUCCESS; @@ -1810,7 +1775,7 @@ void DavinciModel::GetUserDesignateShapeOrder(std::vector &user_inp /// Status DavinciModel::InitAippInfo(uint32_t index, const OpDescPtr &op_desc) { if (!op_desc->HasAttr(ATTR_NAME_AIPP)) { - GELOGW("There is not AIPP related with index %u.", index); + GELOGW("There is not AIPP related with index %u", index); return SUCCESS; } @@ -1840,7 +1805,7 @@ Status DavinciModel::InitAippInfo(uint32_t index, const OpDescPtr &op_desc) { Status DavinciModel::GetAippInfo(uint32_t index, AippConfigInfo &aipp_info) const { const auto it = aipp_info_list_.find(index); if (it == aipp_info_list_.end()) { - GELOGW("there is not AIPP related with index %u.", index); + GELOGW("there is not AIPP related with index %u", index); return ACL_ERROR_GE_AIPP_NOT_EXIST; } @@ -1850,7 +1815,7 @@ Status DavinciModel::GetAippInfo(uint32_t index, AippConfigInfo &aipp_info) cons Status DavinciModel::InitAippType(uint32_t index, const OpDescPtr &op_desc, const map &data_list) { if (!op_desc->HasAttr(ATTR_DATA_RELATED_AIPP_MODE)) { - GELOGW("There is no aipp releated info with index %u.", index); + GELOGW("There is no aipp releated info with index %u", index); return SUCCESS; } @@ -1895,7 +1860,7 @@ Status DavinciModel::GetAippType(uint32_t index, InputAippType &aipp_type, size_ GE_CHK_BOOL_RET_STATUS(index < input_addrs_list_.size(), PARAM_INVALID, "Index %u is invalid", index); const auto it = aipp_type_list_.find(index); if (it == aipp_type_list_.end()) { - GELOGW("There is no aipp releated info with index %u.", index); + GELOGW("There is no aipp releated info with index %u", index); aipp_type = DATA_WITHOUT_AIPP; aipp_index = 0xFFFFFFFF; return SUCCESS; @@ -2202,173 +2167,101 @@ Status DavinciModel::InitModelProfile() { } Status DavinciModel::SinkModelProfile() { - // profiling plugin must be registered auto &prof_mgr = ProfilingManager::Instance(); - ReporterData reporter_data{}; - // report model data tag name - std::string tag_name("model_load_info_" + std::to_string(this->Id())); - GE_CHK_BOOL_EXEC(memcpy_s(reporter_data.tag, MSPROF_ENGINE_MAX_TAG_LEN, tag_name.c_str(), tag_name.size()) == EOK, - return FAILED, "Sink model tag memcpy error."); - // Model Header std::string name = om_name_.empty() ? name_ : om_name_; - size_t name_len = name.size(); - reporter_data.deviceId = device_id_; - reporter_data.data = (unsigned char *)&name_len; - reporter_data.dataLen = sizeof(int32_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - - reporter_data.data = (unsigned char *)name.c_str(); - reporter_data.dataLen = name.size(); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - uint32_t model_id = this->Id(); - reporter_data.data = (unsigned char *)&model_id; - reporter_data.dataLen = sizeof(uint32_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - - // Load Start/End Time int64_t start_time = this->GetLoadBeginTime(); - reporter_data.data = (unsigned char *)&start_time; - reporter_data.dataLen = sizeof(int64_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - int64_t end_time = this->GetLoadEndTime(); - reporter_data.data = (unsigned char *)&end_time; - reporter_data.dataLen = sizeof(int64_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); + Json model_load_info; + model_load_info[kModelName] = name; + model_load_info[kModeleId] = model_id; + model_load_info[kLoadStartTime] = start_time; + model_load_info[kLoadEndTime] = end_time; + // fusion op info using CIT = std::multimap::const_iterator; using Range = std::pair; for (const ProfileInfo &profile : profile_list_) { - // op name after fusion + Json fusion_op_info; string fusion_op_name = profile.fusion_info.op_name; - int32_t fusion_op_name_len = fusion_op_name.size() == 0 ? 1 : fusion_op_name.size(); - reporter_data.data = (unsigned char *)&fusion_op_name_len; - reporter_data.dataLen = sizeof(int32_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - - reporter_data.data = (unsigned char *)fusion_op_name.c_str(); - reporter_data.dataLen = fusion_op_name_len; - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - - // original op name before fusion uint32_t op_num = profile.fusion_info.original_op_names.size(); - reporter_data.data = (unsigned char *)&op_num; - reporter_data.dataLen = sizeof(int32_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - + vector original_name; for (uint32_t k = 0; k < op_num; k++) { - std::string op_name = profile.fusion_info.original_op_names[k]; - int32_t op_name_len = op_name.size() == 0 ? 1 : op_name.size(); - reporter_data.data = (unsigned char *)&op_name_len; - reporter_data.dataLen = sizeof(int32_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - reporter_data.data = (unsigned char *)op_name.c_str(); - reporter_data.dataLen = op_name_len; - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - } - - // stream id info + original_name.emplace_back(profile.fusion_info.original_op_names[k]); + } uint32_t stream_id = 0; auto iter = profiler_report_op_info_.find(fusion_op_name); if (iter != profiler_report_op_info_.end()) { stream_id = iter->second.second; } - reporter_data.data = (unsigned char *)&stream_id; - reporter_data.dataLen = sizeof(int32_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - - // memory info - reporter_data.data = (unsigned char *)&profile.memory_info; - reporter_data.dataLen = sizeof(profile.memory_info); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - - // task info - reporter_data.data = (unsigned char *)&profile.task_count; - reporter_data.dataLen = sizeof(uint32_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - + fusion_op_info[kFusionOpName] = fusion_op_name; + fusion_op_info[kOriginalOpNum] = op_num; + fusion_op_info[kOriginalOpName] = original_name; + fusion_op_info[kStreamId] = stream_id; + fusion_op_info[kFusionOpMemoryInfo][kInputSize] = profile.memory_info.input_size; + fusion_op_info[kFusionOpMemoryInfo][kOutputSize] = profile.memory_info.output_size; + fusion_op_info[kFusionOpMemoryInfo][kWeightSize] = profile.memory_info.weight_size; + fusion_op_info[kFusionOpMemoryInfo][kWorkSpaceSize] = profile.memory_info.workspace_size; + fusion_op_info[kFusionOpMemoryInfo][kTotalSize] = profile.memory_info.total_size; + fusion_op_info[kTaskCount] = profile.task_count; + vector task_id; Range task_range = op_id_map_.equal_range(profile.fusion_info.op_index); for (CIT idx = task_range.first; idx != task_range.second; ++idx) { - uint32_t task_id = idx->second; - reporter_data.data = (unsigned char *)&task_id; - reporter_data.dataLen = sizeof(uint32_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); + task_id.push_back(idx->second); } + fusion_op_info[kTaskId] = task_id; + model_load_info[kFusionOpInfo] += fusion_op_info; } + std::string tag_name("model_load_info_" + std::to_string(this->Id())); + std::string reported_data; + try { + reported_data = model_load_info.dump(kInteval, ' ', false, Json::error_handler_t::ignore); + } catch (std::exception &e) { + GELOGE(FAILED, "Failed to convert JSON to string, reason: %s.", e.what()); + } catch (...) { + GELOGE(FAILED, "Failed to convert JSON to string."); + } + reported_data.append(",") + .append("\n"); + prof_mgr.ReportData(device_id_, reported_data, tag_name); return SUCCESS; } Status DavinciModel::SinkTimeProfile(const InputData ¤t_data) { - // profiling plugin must be registered auto &prof_mgr = ProfilingManager::Instance(); - ReporterData reporter_data{}; + + string name = om_name_.empty() ? name_ : om_name_; + Json model_time_info; + model_time_info[kModelName] = name; + model_time_info[kModeleId] = this->Id(); + model_time_info[kRequestId] = current_data.request_id; + model_time_info[kThreadId] = mmGetTid(); + model_time_info[kInputBeginTime] = time_info_.processBeginTime; + model_time_info[kInputEndTime] = time_info_.processEndTime; + model_time_info[kInferBeginTime] = time_info_.inferenceBeginTime; + model_time_info[kInferEndTime] = time_info_.inferenceEndTime; + model_time_info[kOutputBeginTime] = time_info_.dumpBeginTime; + model_time_info[kOutputEndTime] = time_info_.dumpEndTime; + // report model data tag name std::string tag_name; tag_name.append("model_time_info_") - .append(std::to_string(this->Id())) - .append("_") - .append(std::to_string(current_data.index)); - - GE_CHK_BOOL_EXEC(memcpy_s(reporter_data.tag, MSPROF_ENGINE_MAX_TAG_LEN, tag_name.c_str(), tag_name.size()) == EOK, - return FAILED, "Sink model tag memcpy error."); - // device id - reporter_data.deviceId = device_id_; - - // Model Header - string name; - if (!om_name_.empty()) { - name = om_name_; - } else { - name = name_; - } - size_t name_len = name.size(); - reporter_data.data = (unsigned char *)&name_len; - reporter_data.dataLen = sizeof(int32_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - - reporter_data.data = (unsigned char *)name.c_str(); - reporter_data.dataLen = name.size(); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u.", this->Id()); - - // request id - uint64_t request_id = current_data.request_id; - reporter_data.data = (unsigned char *)&request_id; - reporter_data.dataLen = sizeof(uint32_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u, data index:%u.", this->Id(), current_data.index); - - // thread id - int32_t thread_id = GetDataInputTid(); - reporter_data.data = (unsigned char *)&thread_id; - reporter_data.dataLen = sizeof(int32_t); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u, data index:%u.", this->Id(), current_data.index); - - // time info - time_info_.modelId = this->Id(); - reporter_data.data = (unsigned char *)&time_info_; - reporter_data.dataLen = sizeof(struct timeInfo); - GE_CHK_BOOL_EXEC(prof_mgr.CallMsprofReport(reporter_data) == 0, return FAILED, - "Reporter data fail, model id:%u, data index:%u.", this->Id(), current_data.index); + .append(std::to_string(this->Id())) + .append("_") + .append(std::to_string(current_data.index)); + std::string reported_data; + try { + reported_data = model_time_info.dump(kInteval, ' ', false, Json::error_handler_t::ignore); + } catch (std::exception &e) { + GELOGE(FAILED, "Failed to convert JSON to string, reason: %s.", e.what()); + } catch (...) { + GELOGE(FAILED, "Failed to convert JSON to string."); + } + reported_data.append(",") + .append("\n"); + prof_mgr.ReportData(device_id_, reported_data, tag_name); return SUCCESS; } @@ -2626,7 +2519,7 @@ Status DavinciModel::ReturnResult(uint32_t data_id, const bool rslt_flg, const b /// @return Status result /// Status DavinciModel::ReturnNoOutput(uint32_t data_id) { - GELOGI("ReturnNoOutput model id:%u", model_id_); + GELOGI("ReturnNoOutput model id:%u.", model_id_); GE_CHK_BOOL_EXEC(listener_ != nullptr, return PARAM_INVALID, "listener_ is null!"); std::vector outputs; @@ -2641,6 +2534,7 @@ void *DavinciModel::Run(DavinciModel *model) { bool seq_end_flag = false; uint32_t model_id = model->Id(); uint32_t device_id = model->GetDeviceId(); + ErrorManager::GetInstance().SetErrorContext(model->GetErrorContext()); GELOGI("Model Run thread start, model_id:%u.", model_id); rtError_t rt_ret = rtSetDevice(static_cast(device_id)); @@ -2651,6 +2545,7 @@ void *DavinciModel::Run(DavinciModel *model) { // DeviceReset before thread run finished! GE_MAKE_GUARD(not_used_var, [&] { GE_CHK_RT(rtDeviceReset(device_id)); }); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelExecute, ErrorMessage::kModelExecute); while (model->RunFlag()) { bool rslt_flg = true; if (model->GetDataInputer() == nullptr) { @@ -2773,10 +2668,6 @@ Status DavinciModel::DestroyThread() { thread_id_.join(); } - if (shrink_id_.joinable()) { - shrink_id_.join(); - } - return SUCCESS; } @@ -2807,6 +2698,7 @@ Status DavinciModel::ModelRunStart() { int64_t maxDumpOpNum = std::strtol(opt.c_str(), nullptr, kDecimal); maxDumpOpNum_ = maxDumpOpNum; + error_context_ = ErrorManager::GetInstance().GetErrorContext(); CREATE_STD_THREAD(thread_id_, DavinciModel::Run, this); GELOGI("model tread create success, model id:%u.", model_id_); return SUCCESS; @@ -3069,13 +2961,15 @@ void DavinciModel::SaveProfilingTaskDescInfo(const OpDescPtr &op, const TaskInfo task_desc_info.model_name = name_; } task_desc_info.op_name = op->GetName(); + task_desc_info.op_type = op->GetType(); task_desc_info.block_dim = task_def.kernel().block_dim(); task_desc_info.task_id = task->GetTaskID(); task_desc_info.stream_id = task->GetStreamId(); task_desc_info.shape_type = "static"; task_desc_info.cur_iter_num = 0; - // task type task_desc_info.task_type = kTaskTypeInvalid; + auto &prof_mgr = ProfilingManager::Instance(); + prof_mgr.GetOpInputOutputInfo(op, task_desc_info); auto model_task_type = static_cast(task_def.type()); if (model_task_type == RT_MODEL_TASK_KERNEL) { const domi::KernelDef &kernel_def = task_def.kernel(); @@ -3107,7 +3001,6 @@ void DavinciModel::SaveProfilingTaskDescInfo(const OpDescPtr &op, const TaskInfo task_desc_info_.emplace_back(task_desc_info); } } - return; } Status DavinciModel::DistributeTask() { @@ -3332,7 +3225,7 @@ Status DavinciModel::CopyModelData(const InputData &input_data, OutputData &outp /// Status DavinciModel::UpdateIoTaskArgs(const std::map &data_info, bool is_input, const vector &blobs, bool is_dynamic, const string &batch_label) { - string input_or_output = "input"; + string input_or_output; is_input ? input_or_output = "input" : input_or_output = "output"; if (blobs.size() != data_info.size()) { GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Verify %s data num failed: model requires %zu, but user actually feeds %zu", @@ -3342,7 +3235,8 @@ Status DavinciModel::UpdateIoTaskArgs(const std::map & for (const auto &data : data_info) { if (data.first >= blobs.size()) { // check data index. - GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Verify %s data num failed: can not find No.%u data, because user only feeds %zu", + GELOGE(ACL_ERROR_GE_PARAM_INVALID, + "Verify %s data num failed: can not find No.%u data, because user only feeds %zu", input_or_output.c_str(), data.first, blobs.size()); return ACL_ERROR_GE_PARAM_INVALID; } @@ -3472,14 +3366,16 @@ Status DavinciModel::InitConstant(const OpDescPtr &op_desc) { elem_num = 1; } uint64_t *buff = reinterpret_cast(tensor->MutableData().data()); - GE_CHK_BOOL_RET_STATUS(ge::CheckInt64Uint32MulOverflow(elem_num, kBytes) == SUCCESS, FAILED, - "Shape size is invalid"); - uint64_t offset = static_cast(elem_num * kBytes); + if (ge::CheckInt64Uint32MulOverflow(elem_num, kBytes * kStringHeadElems) != SUCCESS) { + GELOGE(FAILED, "Shape size is invalid"); + return FAILED; + } + uint64_t offset = elem_num * kBytes * kStringHeadElems; uint64_t hbm_raw_data_base_addr = static_cast(reinterpret_cast(v_output_addr[0])) + offset; for (int64_t i = elem_num - 1; i >= 0; --i) { - buff[i] = hbm_raw_data_base_addr + (buff[i] - buff[0]); + buff[i * kStringHeadElems] = hbm_raw_data_base_addr + (buff[i * kStringHeadElems] - buff[0]); } } GELOGI("[IMAS]InitConstant memcpy graph_%u type[V] name[%s] output[%d] memaddr[%p] mem_size[%lu] datasize[%zu]", @@ -4007,41 +3903,6 @@ void DavinciModel::SaveHcclFollowStream(int64_t main_stream_id, rtStream_t strea main_follow_stream_mapping_[main_stream_id].emplace_back(stream); } -Status DavinciModel::GetComputeGraphInfo(vector &graph_desc_info) { - auto &all_op_desc = data_dumper_.GetAllOpDescInfo(); - for (auto &op_desc : all_op_desc) { - ComputeGraphDescInfo compute_graph_info; - if (!om_name_.empty()) { - compute_graph_info.model_name = om_name_; - } else { - compute_graph_info.model_name = name_; - } - - std::vector format = { FORMAT_NULL }; - std::vector> shape = { {0} }; - std::vector data_type = { DT_UNDEFINED }; - compute_graph_info.op_name = op_desc.op_name; - compute_graph_info.op_type = op_desc.op_type; - compute_graph_info.input_format = op_desc.input_format.empty() ? format : op_desc.input_format; - compute_graph_info.input_shape = op_desc.input_shape.empty() ? shape : op_desc.input_shape; - compute_graph_info.input_data_type = op_desc.input_data_type.empty() ? data_type : op_desc.input_data_type; - compute_graph_info.output_format = op_desc.output_format.empty() ? format : op_desc.output_format; - compute_graph_info.output_shape = op_desc.output_shape.empty() ? shape : op_desc.output_shape; - compute_graph_info.output_data_type = op_desc.output_data_type.empty() ? data_type : op_desc.output_data_type; - uint32_t task_id = 0; - uint32_t stream_id = 0; - auto iter = profiler_report_op_info_.find(op_desc.op_name); - if (iter != profiler_report_op_info_.end()) { - task_id = iter->second.first; - stream_id = iter->second.second; - } - compute_graph_info.task_id = task_id; - compute_graph_info.stream_id = stream_id; - graph_desc_info.emplace_back(compute_graph_info); - } - return SUCCESS; -} - void DavinciModel::SetTotalFixedAddrsSize(string tensor_name, int64_t fix_addr_size) { if (tensor_name_to_fixed_addr_size_.find(tensor_name) == tensor_name_to_fixed_addr_size_.end()) { tensor_name_to_fixed_addr_size_[tensor_name] = total_fixed_addr_size_; @@ -4058,7 +3919,7 @@ Status DavinciModel::InitOrigInputInfo(uint32_t index, const OpDescPtr &op_desc) vector inputs; if (AttrUtils::GetListStr(op_desc, ATTR_NAME_AIPP_INPUTS, inputs) && !inputs.empty()) { std::string input = inputs[kAippOriginInputIndex]; - GELOGI("origin input str: %s", input.c_str()); + GELOGI("origin input str: %s.", input.c_str()); std::vector infos = ge::StringUtils::Split(input, ':'); if (infos.size() != kAippInfoNum) { GELOGE(ACL_ERROR_GE_AIPP_MODE_INVALID, "origin input str is invalid[%zu, %u].", infos.size(), kAippInfoNum); @@ -4132,11 +3993,11 @@ Status DavinciModel::InitAippInputOutputDims(uint32_t index, const OpDescPtr &op ConstGeTensorDescPtr data_input_desc = op_desc->GetInputDescPtr(kDataIndex); int64_t data_input_size; (void)TensorUtils::GetSize(*(op_desc->GetInputDescPtr(kDataIndex)), data_input_size); - GELOGD("related Data[%d]: tensor_name: %s, dim_num: %zu, tensor_size: %zu, format: %s, data_type: %s, shape: %s", - index, op_desc->GetName().c_str(), data_input_desc->GetShape().GetDimNum(), data_input_size, - TypeUtils::FormatToSerialString(data_input_desc->GetFormat()).c_str(), - TypeUtils::DataTypeToSerialString(data_input_desc->GetDataType()).c_str(), - formats::JoinToString(data_input_desc->GetShape().GetDims()).c_str()); + GELOGD("related Data[%d]: tensor_name: %s, dim_num: %zu, tensor_size: %zu, format: %s, data_type: %s, shape: %s.", + index, op_desc->GetName().c_str(), data_input_desc->GetShape().GetDimNum(), data_input_size, + TypeUtils::FormatToSerialString(data_input_desc->GetFormat()).c_str(), + TypeUtils::DataTypeToSerialString(data_input_desc->GetDataType()).c_str(), + formats::JoinToString(data_input_desc->GetShape().GetDims()).c_str()); } } diff --git a/ge/graph/load/model_manager/davinci_model.h b/ge/graph/load/model_manager/davinci_model.h index 5bc3a68e..70c0f687 100755 --- a/ge/graph/load/model_manager/davinci_model.h +++ b/ge/graph/load/model_manager/davinci_model.h @@ -29,6 +29,7 @@ #include "common/helper/om_file_helper.h" #include "common/opskernel/ge_task_info.h" #include "common/properties_manager.h" +#include "common/dump/opdebug_register.h" #include "common/types.h" #include "framework/common/util.h" #include "graph/debug/ge_attr_define.h" @@ -412,6 +413,8 @@ class DavinciModel { /// uint64_t GetSessionId() const { return session_id_; } + const struct ErrorMessage::Context &GetErrorContext() const { return error_context_; } + /// /// @ingroup ge /// @brief SetDeviceId @@ -536,7 +539,7 @@ class DavinciModel { vector &output_dims) const; // om file name - void SetOmName(string om_name) { om_name_ = om_name; } + void SetOmName(const string &om_name) { om_name_ = om_name; } void SetDumpProperties(const DumpProperties &dump_properties) { data_dumper_.SetDumpProperties(dump_properties); } const DumpProperties &GetDumpProperties() const { return data_dumper_.GetDumpProperties(); } @@ -840,9 +843,6 @@ class DavinciModel { Status TransAllVarData(ComputeGraphPtr &graph, uint32_t graph_id); - // get desc info of graph for profiling - Status GetComputeGraphInfo(vector &graph_desc_info); - void SetDataDumperArgs(const ComputeGraphPtr &graph, const map &variable_by_name); Status InitL1DataDumperArgs(); @@ -907,7 +907,6 @@ class DavinciModel { vector output_memory_size_list_; thread thread_id_; - thread shrink_id_; shared_ptr listener_; @@ -960,6 +959,7 @@ class DavinciModel { vector output_mbuf_list_; // output mbuf created by dequeue task. uint64_t session_id_; + struct ErrorMessage::Context error_context_; uint32_t device_id_; @@ -985,6 +985,7 @@ class DavinciModel { int64_t maxDumpOpNum_; // for data dump DataDumper data_dumper_; + OpdebugRegister opdebug_register_; uint64_t iterator_count_; bool is_l1_fusion_enable_; map saved_task_addrs_; // release after DavinciModel::Init @@ -1022,8 +1023,6 @@ class DavinciModel { // for op debug mutex debug_reg_mutex_; bool is_op_debug_reg_ = false; - void *op_debug_addr_ = nullptr; - void *p2p_debug_addr_ = nullptr; bool is_online_infer_dynamic_ = false; bool is_getnext_sink_dynamic_ = false; vector cur_dynamic_dims_; diff --git a/ge/graph/load/model_manager/model_manager.cc b/ge/graph/load/model_manager/model_manager.cc index 512c6e72..e46bef88 100755 --- a/ge/graph/load/model_manager/model_manager.cc +++ b/ge/graph/load/model_manager/model_manager.cc @@ -18,23 +18,15 @@ #include -#include "mmpa/mmpa_api.h" #include "aicpu/aicpu_schedule/aicpu_op_type_list.h" +#include "common/model_parser/model_parser.h" #include "common/dump/dump_manager.h" #include "common/l2_cache_optimize.h" #include "common/profiling/profiling_manager.h" -#include "common/properties_manager.h" -#include "framework/common/debug/ge_log.h" -#include "framework/common/util.h" #include "graph/common/ge_call_wrapper.h" -#include "graph/debug/ge_attr_define.h" #include "graph/load/model_manager/davinci_model.h" -#include "graph/load/model_manager/davinci_model_parser.h" #include "model/ge_root_model.h" -#include "graph/common/local_context.h" -#include "graph/utils/attr_utils.h" #include "common/formats/utils/formats_trans_utils.h" -#include "hybrid/hybrid_davinci_model.h" namespace ge { thread_local uint32_t device_count = 0; @@ -55,6 +47,7 @@ const char *const kDeleteCustOp = "deleteCustOp"; const int kTimeSpecNano = 1000000000; const int kTimeSpecMiro = 1000000; const int kOpNameMaxSize = 100; +const uint64_t kInferSessionId = 0; #pragma pack(push, 1) struct CustAicpuSoBuf { uint64_t kernelSoBuf; @@ -278,13 +271,15 @@ ge::Status ModelManager::SetDynamicSize(uint32_t model_id, const std::vector &ge_root_model, +ge::Status ModelManager::DoLoadHybridModelOnline(uint32_t model_id, const string &model_name, + const shared_ptr &ge_root_model, const shared_ptr &listener) { auto hybrid_model = hybrid::HybridDavinciModel::Create(ge_root_model); GE_CHECK_NOTNULL(hybrid_model); hybrid_model->SetListener(listener); hybrid_model->SetModelId(model_id); hybrid_model->SetDeviceId(GetContext().DeviceId()); + hybrid_model->SetModelName(model_name); GE_CHK_STATUS_RET(hybrid_model->Init(), "Failed to init hybrid model. model_id = %u", model_id); auto shared_model = std::shared_ptr(hybrid_model.release()); InsertModel(model_id, shared_model); @@ -304,10 +299,11 @@ Status ModelManager::LoadModelOnline(uint32_t &model_id, const shared_ptrCheckIsUnknownShape(is_shape_unknown), "CheckIsUnknownShape failed, model id:%u", model_id); if (is_shape_unknown || GetContext().GetHostExecFlag()) { - return DoLoadHybridModelOnline(model_id, ge_root_model, listener); + return DoLoadHybridModelOnline(model_id, model_name, ge_root_model, listener); } mmTimespec timespec = mmGetTickCount(); @@ -321,7 +317,7 @@ Status ModelManager::LoadModelOnline(uint32_t &model_id, const shared_ptrSetId(model_id); davinci_model->SetDeviceId(GetContext().DeviceId()); - const DumpProperties &dump_properties = PropertiesManager::Instance().GetDumpProperties(GetContext().SessionId()); + const DumpProperties &dump_properties = DumpManager::GetInstance().GetDumpProperties(GetContext().SessionId()); davinci_model->SetDumpProperties(dump_properties); dump_properties_ = dump_properties; @@ -1036,7 +1032,7 @@ Status ModelManager::GenSessionId(uint64_t &session_id) { Status ModelManager::LoadModelOffline(uint32_t &model_id, const ModelData &model, shared_ptr listener, void *dev_ptr, size_t mem_size, void *weight_ptr, size_t weight_size) { GE_CHK_BOOL_RET_STATUS(model.key.empty() || mmAccess2(model.key.c_str(), M_F_OK) == EN_OK, - ACL_ERROR_GE_PARAM_INVALID, "input key file path %s is invalid, %s", model.key.c_str(), strerror(errno)); + ACL_ERROR_GE_PARAM_INVALID, "Input key file path %s is invalid, %s", model.key.c_str(), strerror(errno)); GenModelId(&model_id); mmTimespec timespec = mmGetTickCount(); @@ -1053,7 +1049,7 @@ Status ModelManager::LoadModelOffline(uint32_t &model_id, const ModelData &model GE_CHK_STATUS_RET(model_helper.GetGeRootModel()->CheckIsUnknownShape(is_shape_unknown), "CheckIsUnknownShape failed, model id:%u", model_id); if (is_shape_unknown || GetContext().GetHostExecFlag()) { - return DoLoadHybridModelOnline(model_id, model_helper.GetGeRootModel(), listener); + return DoLoadHybridModelOnline(model_id, model.om_name, model_helper.GetGeRootModel(), listener); } } @@ -1081,8 +1077,8 @@ Status ModelManager::LoadModelOffline(uint32_t &model_id, const ModelData &model } davinci_model->SetDeviceId(device_id); davinci_model->SetOmName(model.om_name); - if (DumpManager::GetInstance().GetDumpProperties().IsDumpOpen()) { - davinci_model->SetDumpProperties(DumpManager::GetInstance().GetDumpProperties()); + if (DumpManager::GetInstance().GetDumpProperties(kInferSessionId).IsDumpOpen()) { + davinci_model->SetDumpProperties(DumpManager::GetInstance().GetDumpProperties(kInferSessionId)); } else { davinci_model->SetDumpProperties(dump_properties_); } @@ -1092,9 +1088,9 @@ Status ModelManager::LoadModelOffline(uint32_t &model_id, const ModelData &model /// Update session_id for infer in load model to avoid the same session_id. uint64_t new_session_id; ret = GenSessionId(new_session_id); - GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(ret != SUCCESS, break, "Generate session_id for infer failed."); + GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(ret != SUCCESS, break, "Generate session_id for inference failed."); ret = davinci_model->UpdateSessionId(new_session_id); - GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(ret != SUCCESS, break, "Update session_id for infer failed."); + GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(ret != SUCCESS, break, "Update session_id for inference failed."); ret = davinci_model->Init(dev_ptr, mem_size, weight_ptr, weight_size); GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(ret != SUCCESS, break, "DavinciInit failed."); @@ -1403,7 +1399,7 @@ Status ModelManager::LaunchCustAicpuSo() { Status ModelManager::GetModelMemAndWeightSize(const ModelData &model, size_t &mem_size, size_t &weight_size) { uint8_t *model_data = nullptr; uint32_t model_len = 0; - Status ret = DavinciModelParser::ParseModelContent(model, model_data, model_len); + Status ret = ModelParserBase::ParseModelContent(model, model_data, model_len); GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(ret != SUCCESS, return ACL_ERROR_GE_PARAM_INVALID, "parse model content failed!"); OmFileLoadHelper om_file_helper; diff --git a/ge/graph/load/model_manager/model_manager.h b/ge/graph/load/model_manager/model_manager.h index 8aa09418..f2d55db7 100755 --- a/ge/graph/load/model_manager/model_manager.h +++ b/ge/graph/load/model_manager/model_manager.h @@ -73,7 +73,8 @@ class FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ModelManager { ge::Status LoadModelOnline(uint32_t &model_id, const std::shared_ptr &ge_root_model, std::shared_ptr listener); - ge::Status DoLoadHybridModelOnline(uint32_t model_id, const shared_ptr &ge_root_model, + ge::Status DoLoadHybridModelOnline(uint32_t model_id, const string &model_name, + const shared_ptr &ge_root_model, const std::shared_ptr &listener); /// diff --git a/ge/graph/load/model_manager/model_utils.cc b/ge/graph/load/model_manager/model_utils.cc index 410e9364..8648d892 100755 --- a/ge/graph/load/model_manager/model_utils.cc +++ b/ge/graph/load/model_manager/model_utils.cc @@ -387,7 +387,7 @@ Status ModelUtils::GetVarAddr(const RuntimeParam &model_param, const ConstOpDesc GELOGE(PARAM_INVALID, "rdma var addr is invalid, addr=%p", reinterpret_cast(offset)); return PARAM_INVALID; } - var_addr = reinterpret_cast(offset); + var_addr = reinterpret_cast(static_cast(offset)); break; case RT_MEMORY_HBM: VALIDATE_MEM_RANGE(op_desc, model_param.var_size, offset - model_param.logic_var_base); diff --git a/ge/graph/manager/graph_caching_allocator.cc b/ge/graph/manager/graph_caching_allocator.cc index bfef4001..03ca352e 100644 --- a/ge/graph/manager/graph_caching_allocator.cc +++ b/ge/graph/manager/graph_caching_allocator.cc @@ -28,10 +28,9 @@ const size_t bin_ranges[kNumBins] = {kRoundBlockSize * kKByteSize, kBinSizeUnit8 * kMByteSize, kBinSizeUnit32 * kMByteSize, kBinSizeUnit128 * kMByteSize, - kGByteSize, - kBinSizeUnit4 * kGByteSize, - kBinSizeUnit16 * kGByteSize, - kBinSizeUnit26 * kGByteSize}; + kBinSizeUnit256 * kMByteSize, + kBinSizeUnit512 * kMByteSize, + kGByteSize}; static bool BlockComparator(const Block *left, const Block *right) { if (left->size != right->size) { @@ -63,7 +62,10 @@ size_t GetBinIndex(size_t size) { size_t GetAllocationSize(size_t size) { size_t index = GetBinIndex(size); - return bin_ranges[index]; + if (bin_ranges[index] >= size) { + return bin_ranges[index]; + } + return kGByteSize * ((size + kGByteSize - 1) / kGByteSize); } /// @@ -83,6 +85,15 @@ bool ShouldSplit(const Block *block, size_t size) { return static_cast(size) <= (static_cast(block->size) * kSplitThreshold); } +void IncreaseCount(std::map &count, size_t size) { + auto it = count.find(size); + if (it != count.end()) { + it->second++; + } else { + count.emplace(size, 1); + } +} + CachingAllocator::CachingAllocator(rtMemType_t memory_type) : memory_type_(memory_type), memory_allocator_(nullptr) { for (uint32_t i = 0; i < kNumBins; ++i) { free_block_bins_[i] = nullptr; @@ -114,11 +125,13 @@ Status CachingAllocator::Initialize(uint32_t device_id) { void CachingAllocator::Finalize(uint32_t device_id) { GELOGI("Device id %u", device_id); + PrintStatics(); FreeBlocks(); FreeBlockBins(); } uint8_t *CachingAllocator::Malloc(size_t size, uint8_t *org_ptr, uint32_t device_id) { + GELOGI("Start malloc pool memory, size = %zu, device id = %u", size, device_id); uint8_t *ptr = nullptr; size = GetBlockSize(size); Block *block = FindFreeBlock(size, org_ptr, device_id); @@ -202,8 +215,7 @@ BlockBin *CachingAllocator::GetBlockBin(size_t size) { } Block *CachingAllocator::FindFreeBlock(size_t size, uint8_t *org_ptr, uint32_t device_id) { - // org_ptr - 1, try to find ptr same as org_ptr - Block key(device_id, size, (org_ptr == nullptr ? nullptr : org_ptr - 1)); + Block key(device_id, size, org_ptr); BlockBin *bin = GetBlockBin(size); if (bin == nullptr) { GELOGE(ge::FAILED, "Get block bin failed size = %zu", size); @@ -253,23 +265,28 @@ Block *CachingAllocator::SplitBlock(Block *block, size_t size, BlockBin &bin, ui } Status CachingAllocator::TryExtendCache(size_t size, uint32_t device_id) { + GELOGI("Try to extend cache. size = %zu, device id = %u", size, device_id); auto memory_size = GetAllocationSize(size); const std::string purpose = "Memory for caching."; auto memory_addr = memory_allocator_->MallocMemory(purpose, memory_size, device_id); // try to free caches and malloc again when malloc memory failed if (memory_addr == nullptr) { - FreeCachedBlocks(); + size_t free_cached_memory_size = FreeCachedBlocks(); memory_addr = memory_allocator_->MallocMemory(purpose, memory_size, device_id); if (memory_addr == nullptr) { GELOGE(ge::FAILED, "TryExtendCache failed, no enough memory for size = %zu, device_id = %u", memory_size, device_id); return ge::FAILED; } + GELOGT(TRACE_RUNNING, "Try to free cached memory size:%zu and malloc memory size:%zu success.", + free_cached_memory_size, memory_size); } + if (AddToBlockBin(memory_addr, memory_size, device_id) != ge::SUCCESS) { (void)memory_allocator_->FreeMemory(memory_addr); return ge::FAILED; } + PrintStatics(); return ge::SUCCESS; } @@ -290,13 +307,15 @@ Status CachingAllocator::AddToBlockBin(uint8_t *ptr, size_t size, uint32_t devic block->size = size; std::lock_guard lock(mutex_); + IncreaseCount(malloced_memory_, block->size); bin->insert(block); return ge::SUCCESS; } -void CachingAllocator::FreeCachedBlocks() { +size_t CachingAllocator::FreeCachedBlocks() { GELOGI("Free cached blocks"); std::lock_guard lock(mutex_); + size_t free_cached_memory_size = 0; for (uint32_t i = 0; i < kNumBins; ++i) { auto pool = free_block_bins_[i]; if (pool == nullptr) { @@ -307,6 +326,14 @@ void CachingAllocator::FreeCachedBlocks() { // free block memory that has not been split if ((block != nullptr) && (block->ptr != nullptr) && (block->prev == nullptr) && (block->next == nullptr) && (memory_allocator_->FreeMemory(block->ptr) == ge::SUCCESS)) { + auto itcount = malloced_memory_.find(block->size); + free_cached_memory_size += block->size; + if (itcount != malloced_memory_.end()) { + itcount->second--; + if (itcount->second == 0) { + malloced_memory_.erase(itcount); + } + } pool->erase(it++); delete block; continue; @@ -314,6 +341,7 @@ void CachingAllocator::FreeCachedBlocks() { ++it; } } + return free_cached_memory_size; } void CachingAllocator::FreeBlocks() { @@ -324,8 +352,7 @@ void CachingAllocator::FreeBlocks() { FreeBlock(it.second); } allocated_blocks_.clear(); - - FreeCachedBlocks(); + (void) FreeCachedBlocks(); } void CachingAllocator::FreeBlockBins() { @@ -338,4 +365,60 @@ void CachingAllocator::FreeBlockBins() { } } } + +void PrintCount(std::map &count, const std::string &name, size_t total_size, size_t total_count) { + GELOGI("%6s total[size:%10zu count:%10zu]", name.c_str(), total_size, total_count); + for (auto &it : count) { + GELOGI(" |- block[size:%10zu count:%10zu]", it.first, it.second); + } +} + +void CachingAllocator::PrintStatics() { + if (!IsLogEnable(GE_MODULE_NAME, DLOG_INFO)) { + return; + } + size_t total_using_size = 0; + size_t total_using_count = 0; + size_t total_free_size = 0; + size_t total_free_count = 0; + size_t total_malloc_size = 0; + size_t total_malloc_count = 0; + std::map using_block; + std::map free_block; + std::map malloc_block; + do { + std::lock_guard lock(mutex_); + for (uint32_t i = 0; i < kNumBins; ++i) { + auto pool = free_block_bins_[i]; + if (pool == nullptr) { + continue; + } + for (auto it = pool->begin(); it != pool->end(); ++it) { + if ((*it) != nullptr) { + total_free_size += (*it)->size; + IncreaseCount(free_block, (*it)->size); + total_free_count++; + } + } + } + + for (auto &it : allocated_blocks_) { + if (it.second != nullptr) { + total_using_size += it.second->size; + IncreaseCount(using_block, it.second->size); + total_using_count++; + } + } + + for (auto &it : malloced_memory_) { + total_malloc_size += it.first * it.second; + total_malloc_count += it.second; + malloc_block[it.first] = it.second; + } + } while (0); + + PrintCount(malloc_block, "Malloc", total_malloc_size, total_malloc_count); + PrintCount(using_block, "Using", total_using_size, total_using_count); + PrintCount(free_block, "Free", total_free_size, total_free_count); +} } // namespace ge diff --git a/ge/graph/manager/graph_caching_allocator.h b/ge/graph/manager/graph_caching_allocator.h index e024d5cd..27563c2d 100644 --- a/ge/graph/manager/graph_caching_allocator.h +++ b/ge/graph/manager/graph_caching_allocator.h @@ -36,17 +36,17 @@ namespace ge { constexpr size_t kRoundBlockSize = 512; // all block sizes are rounded to at least 512 bytes constexpr size_t kBinSizeUnit4 = 4; constexpr size_t kBinSizeUnit8 = 8; -constexpr size_t kBinSizeUnit16 = 16; -constexpr size_t kBinSizeUnit26 = 26; constexpr size_t kBinSizeUnit32 = 32; constexpr size_t kBinSizeUnit128 = 128; +constexpr size_t kBinSizeUnit256 = 256; +constexpr size_t kBinSizeUnit512 = 512; -constexpr double kSplitThreshold = 0.75; // split when malloc size <= small block size * kSpliThreshold +constexpr double kSplitThreshold = 0.5; // split when malloc size <= small block size * kSpliThreshold constexpr size_t kKByteSize = 1024; constexpr size_t kMByteSize = 1048576; // 1024 * 1024 constexpr size_t kGByteSize = 1073741824; // 1024 * 1024 * 1024 -static const uint32_t kNumBins = 8; +static const uint32_t kNumBins = 7; class MemoryAllocator; @@ -143,9 +143,9 @@ class CachingAllocator { /// /// @ingroup ge_graph /// @brief free all cached blocks to right bin and release the memory when memory is not enough - /// @return void + /// @return free cached memory size /// - void FreeCachedBlocks(); + size_t FreeCachedBlocks(); /// /// @ingroup ge_graph @@ -182,6 +182,13 @@ class CachingAllocator { /// Block *SplitBlock(Block *block, size_t size, BlockBin &bin, uint32_t device_id); + /// + /// @ingroup ge_graph + /// @brief print the memory info in pool + /// @return void + /// + void PrintStatics(); + private: rtMemType_t memory_type_; @@ -196,6 +203,9 @@ class CachingAllocator { // block bins by different block size BlockBin *free_block_bins_[kNumBins]; + + // malloced memorys from device + std::map malloced_memory_; }; } // namespace ge #endif // GE_GRAPH_MANAGER_GRAPH_CACHING_ALLOCATOR_H_ diff --git a/ge/graph/manager/graph_manager.cc b/ge/graph/manager/graph_manager.cc index a57f0e61..5c97b12e 100755 --- a/ge/graph/manager/graph_manager.cc +++ b/ge/graph/manager/graph_manager.cc @@ -26,6 +26,7 @@ #include "common/math/math_util.h" #include "common/thread_pool.h" +#include "common/dump/dump_manager.h" #include "analyzer/analyzer.h" #include "graph/common/ge_call_wrapper.h" #include "graph/common/local_context.h" @@ -141,7 +142,7 @@ ge::Status CheckFpCeilingMode() { GELOGI("The parameter fp_ceiling_mode is set to %s.", mode.c_str()); return ge::SUCCESS; } - GELOGW("The parameter fp_ceiling_mode is not set."); + GELOGW("The parameter fp_ceiling_mode is not set"); return ge::SUCCESS; } } // namespace @@ -154,6 +155,7 @@ GraphManager::GraphManager() } Status GraphManager::Initialize(const std::map &options) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOther); if (init_flag_) { GELOGW("[Initialize] GraphManager already initialized."); return SUCCESS; @@ -293,7 +295,7 @@ Status GraphManager::InitDynamicParams(ComputeGraphPtr &compute_graph) { return FAILED; } if ((op_desc->GetType() == DATA) || (op_type == kGetNextName)) { - GELOGI("Need to process multi batch for compute graph."); + GELOGI("Need to process multi batch for compute graph. op_type:%s.", op_desc->GetType().c_str()); GetLocalOmgContext().need_multi_batch = true; break; } @@ -542,6 +544,7 @@ Status GraphManager::OptimizeSubGraphWithMultiThreads(ComputeGraphPtr compute_gr std::future f = executor.commit(GraphManager::ProcessSubGraphWithMultiThreads, this, compute_graph->GetGraphID(), subgraph, compute_graph->GetName(), session_id, + ErrorManager::GetInstance().GetErrorContext(), GetThreadLocalContext()); if (!f.valid()) { GELOGE(FAILED, "Future is invalid"); @@ -558,6 +561,7 @@ Status GraphManager::OptimizeSubGraphWithMultiThreads(ComputeGraphPtr compute_gr std::future f = executor.commit(GraphManager::ProcessSubGraphWithMultiThreads, this, compute_graph->GetGraphID(), subgraph, compute_graph->GetName(), session_id, + ErrorManager::GetInstance().GetErrorContext(), GetThreadLocalContext()); if (!f.valid()) { GELOGE(FAILED, "Future is invalid"); @@ -663,6 +667,7 @@ Status GraphManager::SetSubgraph(uint64_t session_id, ComputeGraphPtr compute_gr Status GraphManager::PreRunOptimizeOriginalGraph(const GraphNodePtr &graph_node, const std::vector &inputs, ge::ComputeGraphPtr &compute_graph, uint64_t session_id) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kPrepareOptimize); GE_CHECK_NOTNULL(graph_node); GE_CHECK_NOTNULL(compute_graph); @@ -671,8 +676,10 @@ Status GraphManager::PreRunOptimizeOriginalGraph(const GraphNodePtr &graph_node, GM_RUN_AND_DUMP_PERF("HandleSummaryOp", stages.optimizer.HandleSummaryOp, compute_graph); GM_RUN_AND_DUMP_PERF("Prepare", stages.preparer.PrepareDynShape, graph_node, inputs, compute_graph, session_id); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOriginOptimize); GM_RUN_AND_DUMP_PERF("OptimizeOriginalGraph", stages.optimizer.OptimizeOriginalGraph, compute_graph); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kPrepareOptimize); GM_RUN_AND_DUMP_PERF("PrepareRunningFormatRefiner", stages.preparer.PrepareRunningFormatRefiner); GM_RUN_AND_DUMP_PERF("RefineRunningFormat", stages.optimizer.OptimizeOriginalGraphJudgeInsert, compute_graph); GM_RUN_AND_DUMP_PERF("SubexpressionMigration", SubexpressionMigration, compute_graph); @@ -715,6 +722,7 @@ Status GraphManager::PreRunAfterOptimizeSubGraph(const GraphNodePtr &graph_node, GE_CHECK_NOTNULL(graph_node); GE_CHECK_NOTNULL(compute_graph); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kMergeGraphOptimize); CompilerStages &stages = GetCompilerStages(graph_node->GetGraphId()); GM_RUN_AND_DUMP_PERF("OptimizeWholeGraph", stages.optimizer.OptimizeWholeGraph, compute_graph); GM_RUN_AND_DUMP_PERF("Optimize2", OptimizeStage2, compute_graph); @@ -734,8 +742,8 @@ Status GraphManager::PreRunAfterOptimizeSubGraph(const GraphNodePtr &graph_node, } Status GraphManager::SetRtContext(rtContext_t rt_context, rtCtxMode_t mode, uint64_t session_id, uint32_t graph_id) { - GELOGD("set rt_context, session id: %lu, graph id: %u, mode %d, device id:%u.", session_id, graph_id, - static_cast(mode), ge::GetContext().DeviceId()); + GELOGD("set rt_context: session id: %lu, graph id: %u, mode %d, device id:%u.", + session_id, graph_id, static_cast(mode), ge::GetContext().DeviceId()); rtError_t rt_ret = rtCtxCreate(&rt_context, mode, ge::GetContext().DeviceId()); if (rt_ret != RT_ERROR_NONE) { @@ -776,7 +784,7 @@ Status GraphManager::PreRun(const GraphNodePtr &graph_node, const std::vectorBuildJsonObject(session_id, compute_graph->GetGraphID()), "BuildJsonObject Failed") - GEEVENT("PreRun start, graph node size %zu, session id %lu, graph id %u, graph name %s", + GEEVENT("PreRun start: graph node size %zu, session id %lu, graph id %u, graph name %s", compute_graph->GetDirectNodesSize(), session_id, compute_graph->GetGraphID(), compute_graph->GetName().c_str()); GE_DUMP(compute_graph, "PreRunBegin"); @@ -797,11 +805,12 @@ Status GraphManager::PreRun(const GraphNodePtr &graph_node, const std::vectorGetName().c_str()); + GELOGE(ret, "Run PreRunOptimizeOriginalGraph failed for graph:%s", compute_graph->GetName().c_str()); return ret; } } + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kPrepareOptimize); ret = PreRunOptimizeSubGraph(graph_node, compute_graph, session_id); if (ret != SUCCESS) { GELOGE(ret, "Run PreRunOptimizeSubGraph failed for graph:%s.", compute_graph->GetName().c_str()); @@ -823,6 +832,7 @@ Status GraphManager::PreRun(const GraphNodePtr &graph_node, const std::vectorGetGraphId(), compute_graph, ge_model); @@ -854,6 +864,7 @@ Status GraphManager::StartForRunGraph(const GraphNodePtr &graph_node, const std: // it will not execute graph prreprocess, optimize, parition, build if the graph has built successful. Status ret = SUCCESS; if (IsGraphNeedBuild(graph_node)) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); if (graph_node->GetBuildFlag()) { GELOGE(PARAM_INVALID, "The graph %u need to re-build, you should remove it from GE " @@ -869,10 +880,11 @@ Status GraphManager::StartForRunGraph(const GraphNodePtr &graph_node, const std: // release rts generate context RtContextUtil::GetInstance().DestroyRtContexts(session_id, graph_node->GetGraphId()); if (ret != SUCCESS) { - GELOGE(ret, "PreRun Failed."); + GELOGE(ret, "PreRun Failed. graph_id:%u.", graph_node->GetGraphId()); return ret; } } + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelLoad, ErrorMessage::kModelLoad); if (!graph_node->IsAsync()) { ret = LoadGraph(ge_root_model, graph_node); } else { @@ -885,6 +897,7 @@ Status GraphManager::StartForRunGraph(const GraphNodePtr &graph_node, const std: graph_node->SetBuildFlag(true); var_acc_ctrl_.SetGraphBuildEnd(graph_node->GetGraphId()); } else if (!graph_node->GetLoadFlag()) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelLoad, ErrorMessage::kModelLoad); GeRootModelPtr ge_root_model_ptr = graph_node->GetGeRootModel(); if (!graph_node->IsAsync()) { ret = LoadGraph(ge_root_model_ptr, graph_node); @@ -1042,6 +1055,7 @@ Status GraphManager::InnerRunGraph(GraphNodePtr &graph_node, const GraphId &grap Status GraphManager::RunGraph(const GraphId &graph_id, const std::vector &inputs, std::vector &outputs, uint64_t session_id) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); std::lock_guard lock(run_mutex_); GELOGI("[RunGraph] start to run graph, graph_id = %u, is_train_graph: %d", graph_id, GetTrainFlag()); @@ -1094,6 +1108,7 @@ Status GraphManager::RunGraph(const GraphId &graph_id, const std::vector &inputs, GeRootModelPtr &ge_root_model, uint64_t session_id, bool async) { - GELOGD("[BuildGraph] start to build graph, graph_id=%u.", graph_id); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); + GELOGD("[BuildGraph] start to build graph, graph_id:%u", graph_id); if (inputs.empty()) { GELOGW("[BuildGraph] BuildGraph warning: empty GeTensor inputs"); } @@ -1241,7 +1257,7 @@ Status GraphManager::BuildGraph(const GraphId &graph_id, const std::vectorSetRunFlag(false); if (ret != SUCCESS) { - GELOGE(GE_GRAPH_PRERUN_FAILED, "[BuildGraph] StartForRunGraph failed!"); + GELOGE(GE_GRAPH_PRERUN_FAILED, "[BuildGraph] StartForRunGraph failed! graph_id:%u.", graph_id); return GE_GRAPH_PRERUN_FAILED; } @@ -1495,7 +1511,7 @@ Status GraphManager::ParseOptions(const std::map &opti ParseOption(options, INPUT_SHAPE, options_.input_shape); ParseOption(options, kDynamicDims, options_.dynamic_dims); ParseOption(options, DYNAMIC_NODE_TYPE, options_.dynamic_node_type); - GELOGD("Dynamic dims params: input shape is %s, dynamic dims is %s, dynamic node type is %d.", + GELOGD("Dynamic dims params: input shape is %s, dynamic dims is %s, dynamic node type is %d", options_.input_shape.c_str(), options_.dynamic_dims.c_str(), options_.dynamic_node_type); // Set Build model and step @@ -1508,7 +1524,7 @@ Status GraphManager::ParseOptions(const std::map &opti Status GraphManager::ParseTrainGraphFlag(bool &options, bool &option) { std::shared_ptr ge_instance_ptr = ge::GELib::GetInstance(); if (ge_instance_ptr == nullptr) { - GELOGW("[Initialize] set train_graph_flag_ to 0 when GE is not initialized or finalized."); + GELOGW("[Initialize] set train_graph_flag to 0 when GE is not initialized or finalized"); option = false; } else if (!ge_instance_ptr->isTrainMode()) { option = false; @@ -1525,7 +1541,8 @@ Status GraphManager::ParseTrainGraphFlag(bool &options, bool &option) { bool GraphManager::IsPerfLevelInvalid(int32_t perf_level) { return ((perf_level != static_cast(GEN_TASK_WITHOUT_L2FUSION)) && - (perf_level != static_cast(GEN_TASK_WITHOUT_FUSION)) && (perf_level != -1)); + (perf_level != static_cast(GEN_TASK_WITHOUT_FUSION)) && + (perf_level != -1)); } void GraphManager::ParseOption(const std::map &options, const std::string &key, @@ -2254,9 +2271,8 @@ Status GraphManager::OptimizeStage2(ge::ComputeGraphPtr &compute_graph) { GE_CHK_STATUS_RET(after_merge_passes.AddPass("OptimizeStage2::AfterMergePasses::LinkGenMaskNodesPass", new (std::nothrow) LinkGenMaskNodesPass(options_.stream_max_parallel_num))); - GE_CHK_STATUS_RET( - after_merge_passes.AddPass("OptimizeStage2::HcclContinuousMemcpyPass", - new (std::nothrow) HcclContinuousMemcpyPass)); + GE_CHK_STATUS_RET(after_merge_passes.AddPass("OptimizeStage2::HcclContinuousMemcpyPass", + new (std::nothrow) HcclContinuousMemcpyPass)); GE_TIMESTAMP_START(after_merge_passes); auto ret = after_merge_passes.Run(compute_graph); @@ -2509,8 +2525,10 @@ Status GraphManager::ProcessSubGraphWithMultiThreads(GraphManager *graph_manager const SubGraphInfoPtr &sub_graph_info_ptr, const std::string &root_graph_name, uint64_t session_id, + const struct ErrorMessage::Context &error_context, const GEThreadLocalContext &ge_context) { if (sub_graph_info_ptr != nullptr && graph_manager != nullptr) { + ErrorManager::GetInstance().SetErrorContext(error_context); GetContext().SetSessionId(session_id); GetThreadLocalContext() = ge_context; graph_manager->UpdateLocalOmgContext(root_graph_id); @@ -2555,9 +2573,12 @@ Status GraphManager::ProcessSubGraphWithMultiThreads(GraphManager *graph_manager // run graph async on session Status GraphManager::RunGraphAsync(const GraphId &graph_id, const std::vector &inputs, uint64_t session_id, RunAsyncCallback callback) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelExecute, ErrorMessage::kModelExecute); GELOGI("[GraphManager] Start to run graph async, graph_id=%u, inputsSize=%zu.", graph_id, inputs.size()); - bool ret = prerun_args_q_.Push(PreRunArgs({graph_id, inputs, session_id, GetThreadLocalContext(), callback})); + bool ret = prerun_args_q_.Push(PreRunArgs({graph_id, inputs, session_id, + ErrorManager::GetInstance().GetErrorContext(), + GetThreadLocalContext(), callback})); if (!ret) { GELOGE(FAILED, "[GraphManager] Run graph async failed, graph_id=%u.", graph_id); return FAILED; @@ -2644,6 +2665,8 @@ void GraphManager::PreRunThread(GraphManager *graph_manager) { GELOGI("A new loop start."); + ErrorManager::GetInstance().SetErrorContext(args.error_context); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); GetContext().SetSessionId(args.session_id); GetThreadLocalContext() = args.context; graph_manager->UpdateLocalOmgContext(args.graph_id); @@ -2725,8 +2748,8 @@ void GraphManager::PreRunThread(GraphManager *graph_manager) { ge_root_model = graph_node->GetGeRootModel(); } - graph_manager->run_args_q_.Push(RunArgs( { graph_node, args.graph_id, args.session_id, args.input_tensor, - ge_root_model, GetThreadLocalContext(), args.callback })); + graph_manager->run_args_q_.Push(RunArgs( { graph_node, args.graph_id, args.session_id, args.error_context, + args.input_tensor, ge_root_model, GetThreadLocalContext(), args.callback })); GELOGI("Loop end."); } } @@ -2812,6 +2835,7 @@ Status GraphManager::ParseInputsDims(const std::vector &input_t } void GraphManager::RunThread(GraphManager *graph_manager) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelExecute, ErrorMessage::kModelExecute); if (prctl(PR_SET_NAME, ("GE_Run")) != 0) { GELOGW("Set thread name failed."); } @@ -2825,6 +2849,7 @@ void GraphManager::RunThread(GraphManager *graph_manager) { GELOGI("A new loop start."); + ErrorManager::GetInstance().SetErrorContext(args.error_context); GetContext().SetSessionId(args.session_id); GetThreadLocalContext() = args.context; graph_manager->UpdateLocalOmgContext(args.graph_id); @@ -2842,6 +2867,7 @@ void GraphManager::RunThread(GraphManager *graph_manager) { } if (!args.graph_node->GetLoadFlag()) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelLoad, ErrorMessage::kModelLoad); ret = graph_manager->LoadGraphAsync(args.ge_root_model, args.graph_node); if (ret != SUCCESS || args.ge_root_model == nullptr) { StopQueue(graph_manager); @@ -2854,6 +2880,7 @@ void GraphManager::RunThread(GraphManager *graph_manager) { args.ge_root_model->GetModelId()); } + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelExecute, ErrorMessage::kModelExecute); if (graph_manager->GetTrainFlag()) { ret = graph_manager->graph_executor_.SetGraphContext(graph_manager->GetGraphContext()); if (ret != SUCCESS) { @@ -3063,6 +3090,15 @@ Status GraphManager::OptimizeSubgraph(const GraphNodePtr &graph_node, ComputeGra sub_graph->SetSessionID(session_id); sub_graph->SetGraphID(graph_node->GetGraphId()); } + bool off_superkernel = false; + if (AttrUtils::GetBool(compute_graph, ATTR_NAME_OFF_SUPERKERNEL_ATTR, off_superkernel)) { + GELOGI("Compute graph %s get superkernel flag %d.", compute_graph->GetName().c_str(), off_superkernel); + if (!AttrUtils::SetBool(merged_compute_graph, ATTR_NAME_OFF_SUPERKERNEL_ATTR, off_superkernel)) { + GELOGE(FAILED, "Compute graph %s set superkernel flag %d failed", merged_compute_graph->GetName().c_str(), + off_superkernel); + return FAILED; + } + } GE_TIMESTAMP_EVENT_END(MergeSubgraph, "OptimizeSubgraph::MergeSubGraph"); GE_DUMP(merged_compute_graph, "mergedComputeGraph"); compute_graph = merged_compute_graph; @@ -3101,6 +3137,7 @@ Status GraphManager::ConvertGraphToFile(ComputeGraphPtr &compute_graph, GraphPar Status GraphManager::Build(const GraphNodePtr &graph_node, ComputeGraphPtr &compute_graph, GeRootModelPtr &ge_root_model, uint64_t session_id) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); // build if (compute_graph != nullptr) { std::string graph_name = compute_graph->GetName(); @@ -3116,7 +3153,7 @@ Status GraphManager::Build(const GraphNodePtr &graph_node, ComputeGraphPtr &comp } bool is_always_dump = false; - if (!PropertiesManager::Instance().GetDumpProperties(session_id).GetDumpPath().empty()) { + if (!DumpManager::GetInstance().GetDumpProperties(session_id).GetDumpPath().empty()) { is_always_dump = true; } @@ -3168,7 +3205,7 @@ Status GraphManager::SaveVariables(const Graph &graph, const std::vectorfirst; auto var_tensor = iter->second.GetTensorDesc(); - var_tensor.SetName(var_name); + var_tensor.SetName(var_name.c_str()); iter->second.SetTensorDesc(var_tensor); var_values.emplace_back(iter->second); } diff --git a/ge/graph/manager/graph_manager.h b/ge/graph/manager/graph_manager.h index 31e8799f..661cf9d8 100644 --- a/ge/graph/manager/graph_manager.h +++ b/ge/graph/manager/graph_manager.h @@ -196,6 +196,7 @@ class GraphManager { GraphId graph_id; std::vector input_tensor; uint64_t session_id; + struct ErrorMessage::Context error_context; GEThreadLocalContext context; RunAsyncCallback callback; }; @@ -204,6 +205,7 @@ class GraphManager { GraphNodePtr graph_node; GraphId graph_id; uint64_t session_id; + struct ErrorMessage::Context error_context; std::vector input_tensor; GeRootModelPtr ge_root_model; GEThreadLocalContext context; @@ -221,6 +223,7 @@ class GraphManager { const SubGraphInfoPtr &sub_graph_info_ptr, const std::string &root_graph_name, uint64_t session_id, + const struct ErrorMessage::Context &error_context, const GEThreadLocalContext &ge_context); Status ParseInputsDims(const std::vector &input_tensor); void ParseInputsDimsForData(const std::vector &input_tensor); diff --git a/ge/graph/manager/graph_mem_allocator.h b/ge/graph/manager/graph_mem_allocator.h index d3468e75..d5e8cf8d 100644 --- a/ge/graph/manager/graph_mem_allocator.h +++ b/ge/graph/manager/graph_mem_allocator.h @@ -26,6 +26,7 @@ #include "framework/common/debug/ge_log.h" #include "framework/common/ge_inner_error_codes.h" +#include "graph/manager/host_mem_allocator.h" #include "graph/node.h" #include "runtime/mem.h" @@ -139,7 +140,6 @@ class MemoryAllocator { using MemoryAllocatorPtr = std::shared_ptr; class CachingAllocator; class RdmaPoolAllocator; -class HostMemAllocator; class MemManager { public: MemManager(); diff --git a/ge/graph/optimize/common/params.h b/ge/graph/optimize/common/params.h index c174a4d1..d5b66b8f 100644 --- a/ge/graph/optimize/common/params.h +++ b/ge/graph/optimize/common/params.h @@ -55,7 +55,7 @@ class Params : public Singleton { Params() : target_("MINI") {} string target_; - uint8_t target_8bit_ = 0; + uint8_t target_8bit_ = TARGET_TYPE_MINI_8BIT; }; } // namespace ge diff --git a/ge/graph/partition/dynamic_shape_partition.cc b/ge/graph/partition/dynamic_shape_partition.cc index 2a60765f..5736e39a 100755 --- a/ge/graph/partition/dynamic_shape_partition.cc +++ b/ge/graph/partition/dynamic_shape_partition.cc @@ -601,6 +601,8 @@ std::string Cluster::DebugString() const { case KNOWN_SHAPE: ss << "KNOW"; break; + default: + break; } ss << "[" << id_ << "](size:" << nodes_.size() << ")"; ss << "(" << min_ << "," << max_ << ")("; diff --git a/ge/graph/passes/assign_remove_pass.cc b/ge/graph/passes/assign_remove_pass.cc index e198c2db..4faa04f6 100644 --- a/ge/graph/passes/assign_remove_pass.cc +++ b/ge/graph/passes/assign_remove_pass.cc @@ -24,9 +24,9 @@ namespace { constexpr uint32_t kValidInputNodeOutputNum = 1; constexpr int32_t kAssignRefInputIndex = 0; constexpr int32_t kAssignValueInputIndex = 1; -static const std::set kNoTaskNodeTypes = { ge::DATA, ge::ANN_DATA, ge::AIPPDATA, - ge::CONSTANT, ge::CONSTANTOP, - ge::VARIABLE, ge::VARIABLEV2 }; +const std::set kNoTaskNodeTypes = { ge::DATA, ge::ANN_DATA, ge::AIPPDATA, + ge::CONSTANT, ge::CONSTANTOP, + ge::VARIABLE, ge::VARIABLEV2 }; } Status AssignRemovePass::Run(NodePtr &node) { diff --git a/ge/graph/passes/cast_translate_pass.cc b/ge/graph/passes/cast_translate_pass.cc index 01b5c96b..2e95c19f 100644 --- a/ge/graph/passes/cast_translate_pass.cc +++ b/ge/graph/passes/cast_translate_pass.cc @@ -167,7 +167,7 @@ bool CastTranslatePass::IsOpSupportedOptimize(NodePtr &cast_node, NodePtr &trans trans_op_outdesc->SetDataType(cast_out_datatype); } - if (!TranslateCheckAccuracySupported(trans_op_desc)) { + if (!TranslateCheckAccuracySupported(trans_node)) { if (is_src_cast) { trans_op_desc->MutableInputDesc(0)->SetDataType(trans_in_datatype); } else { @@ -271,7 +271,8 @@ Status CastTranslatePass::FuseDstNTranslates(NodePtr &node) { return SUCCESS; } -bool CastTranslatePass::TranslateCheckAccuracySupported(const OpDescPtr &op_desc) { +bool CastTranslatePass::TranslateCheckAccuracySupported(NodePtr &node) { + const OpDescPtr &op_desc = node->GetOpDesc(); std::shared_ptr instance_ptr = ge::GELib::GetInstance(); if ((instance_ptr == nullptr) || (!instance_ptr->InitFlag())) { GELOGW("GE is not initialized or is finalized."); @@ -293,7 +294,7 @@ bool CastTranslatePass::TranslateCheckAccuracySupported(const OpDescPtr &op_desc auto kernel_info_store = kernel_map.find(kernel_name); if (kernel_info_store != kernel_map.end()) { if (kernel_info_store->second != nullptr && - kernel_info_store->second->CheckAccuracySupported(op_desc, unsupported_reason)) { + kernel_info_store->second->CheckAccuracySupported(node, unsupported_reason)) { return true; } } diff --git a/ge/graph/passes/cast_translate_pass.h b/ge/graph/passes/cast_translate_pass.h index 04c03d42..5c1dcd9a 100755 --- a/ge/graph/passes/cast_translate_pass.h +++ b/ge/graph/passes/cast_translate_pass.h @@ -35,7 +35,7 @@ class CastTranslatePass : public BaseNodePass { bool IsOpSupportedOptimize(NodePtr &cast_node, NodePtr &trans_node, bool &is_src_cast); bool CheckOpSupportOptimize(NodePtr &node, bool &is_src_cast); Status FuseDstNTranslates(NodePtr &node); - bool TranslateCheckAccuracySupported(const OpDescPtr &op_desc); + bool TranslateCheckAccuracySupported(NodePtr &node); }; } // namespace ge #endif // GE_GRAPH_PASSES_CAST_TRANSLATE_PASS_H_ diff --git a/ge/graph/passes/compile_nodes_pass.cc b/ge/graph/passes/compile_nodes_pass.cc index 1ed9caf0..7de7fd48 100755 --- a/ge/graph/passes/compile_nodes_pass.cc +++ b/ge/graph/passes/compile_nodes_pass.cc @@ -110,7 +110,7 @@ graphStatus CompileNodesPass::GetSupportedKernel(const NodePtr &node, const std: return ge::GE_GRAPH_PARAM_NULLPTR; } // begin accuracy supported check - if (!CheckAccuracySupport(kernel_info, instance, op_desc)) { + if (!CheckAccuracySupport(kernel_info, instance, node)) { // if check accuracy support failed , try to go to other engine. GELOGD("Check Accuracy Supported return not support, node name is %s. Try to go to other engine.", op_desc->GetName().c_str()); @@ -123,7 +123,7 @@ graphStatus CompileNodesPass::GetSupportedKernel(const NodePtr &node, const std: continue; } OpsKernelInfoStorePtr tmp_kernel_info = it->second; - if (CheckAccuracySupport(tmp_kernel_info, instance, op_desc)) { + if (CheckAccuracySupport(tmp_kernel_info, instance, node)) { kernel_lib_name = tmp_kernel_name; GELOGD("Find kernel lib %s support node:%s, type:%s , get kernel lib success.", tmp_kernel_name.c_str(), node->GetName().c_str(), op_desc->GetType().c_str()); @@ -138,14 +138,9 @@ graphStatus CompileNodesPass::GetSupportedKernel(const NodePtr &node, const std: } bool CompileNodesPass::CheckAccuracySupport(const OpsKernelInfoStorePtr &kernel_info, - const std::shared_ptr instance, OpDescPtr &op_desc) { - auto ge_desc = MakeShared(op_desc); - if (ge_desc == nullptr) { - GELOGE(GE_GRAPH_MEMORY_ALLOC_FAILED, "Fail to malloc op desc."); - return false; - } + const std::shared_ptr instance, const NodePtr &node) { string reason; - if (!(kernel_info->CheckAccuracySupported(*ge_desc, reason, true))) { + if (!(kernel_info->CheckAccuracySupported(node, reason, true))) { return false; } return true; diff --git a/ge/graph/passes/compile_nodes_pass.h b/ge/graph/passes/compile_nodes_pass.h index e2fb59c2..e9a77e07 100644 --- a/ge/graph/passes/compile_nodes_pass.h +++ b/ge/graph/passes/compile_nodes_pass.h @@ -39,7 +39,7 @@ class CompileNodesPass : public GraphPass { private: graphStatus GetSupportedKernel(const NodePtr &node, const std::shared_ptr instance, string &kernel_lib_name); bool CheckAccuracySupport(const OpsKernelInfoStorePtr &kernel_info, const std::shared_ptr instance, - OpDescPtr &op_desc); + const NodePtr &node); graphStatus CompileNodes(const std::shared_ptr instance, std::unordered_map> &kernel_to_compile_nodes); }; diff --git a/ge/graph/passes/cond_remove_pass.cc b/ge/graph/passes/cond_remove_pass.cc index 9ecc79a6..5fc41714 100644 --- a/ge/graph/passes/cond_remove_pass.cc +++ b/ge/graph/passes/cond_remove_pass.cc @@ -25,8 +25,9 @@ const uint32_t kElseBranchIndex = 1; const uint32_t kTrueIndex = 1; const uint32_t kFalseIndex = 0; /// Extra 8 bytes store pointer of string +/// Extra 8 bytes store length of string /// Extra 1 byte store '\0' -const int32_t kStrHeadLen = 9; +const int32_t kStrHeadLen = sizeof(ge::StringHead) + 1; const int32_t kInvalidRetVal = -1; } diff --git a/ge/graph/passes/constant_folding_pass.cc b/ge/graph/passes/constant_folding_pass.cc index 8a0c6c3c..66e076af 100644 --- a/ge/graph/passes/constant_folding_pass.cc +++ b/ge/graph/passes/constant_folding_pass.cc @@ -50,13 +50,11 @@ Status RunOpKernelWithCheck(NodePtr &node, return FoldingPass::RunOpKernel(node, inputs, outputs); } -const std::map> - &ConstantFoldingPass::GetGeConstantFoldingPerfStatistic() const { +const map> &ConstantFoldingPass::GetGeConstantFoldingPerfStatistic() const { return statistic_of_ge_constant_folding_; } -const std::map> - &ConstantFoldingPass::GetOpConstantFoldingPerfStatistic() const { +const map> &ConstantFoldingPass::GetOpConstantFoldingPerfStatistic() const { return statistic_of_op_constant_folding_; } diff --git a/ge/graph/passes/dimension_adjust_pass.cc b/ge/graph/passes/dimension_adjust_pass.cc index 5701faf5..9677fa5f 100755 --- a/ge/graph/passes/dimension_adjust_pass.cc +++ b/ge/graph/passes/dimension_adjust_pass.cc @@ -29,13 +29,13 @@ const int kRemoveInputIndex = 1; Status DimensionAdjustPass::Run(ge::NodePtr &node) { if (node == nullptr) { - GELOGE(PARAM_INVALID, "node is nullptr"); + GELOGE(PARAM_INVALID, "node is nullptr."); return PARAM_INVALID; } OpDescPtr op_desc_ptr = node->GetOpDesc(); if (op_desc_ptr == nullptr) { - GELOGE(PARAM_INVALID, "GetOpDesc return nullptr"); + GELOGE(PARAM_INVALID, "GetOpDesc return nullptr."); return PARAM_INVALID; } diff --git a/ge/graph/passes/flow_ctrl_pass.cc b/ge/graph/passes/flow_ctrl_pass.cc index 5a294aa2..435130b3 100755 --- a/ge/graph/passes/flow_ctrl_pass.cc +++ b/ge/graph/passes/flow_ctrl_pass.cc @@ -33,11 +33,11 @@ Status FlowCtrlPass::Run(ComputeGraphPtr compute_graph) { GE_CHECK_NOTNULL(compute_graph); if (!PassUtils::IsNeedTrainIteFlowCtrl(compute_graph)) { - GELOGI("No need FlowCtrl for graph %u", compute_graph->GetGraphID()); + GELOGI("No need FlowCtrl for graph %u.", compute_graph->GetGraphID()); return NOT_CHANGED; } - GELOGI("FlowCtrl pass begin"); + GELOGI("FlowCtrl pass begin.graph is [%s].", compute_graph->GetName().c_str()); bool graph_change = false; // 1. Add FP/BP flow ctrl (big cycle) for (auto &node : compute_graph->GetDirectNode()) { @@ -80,6 +80,16 @@ Status FlowCtrlPass::Run(ComputeGraphPtr compute_graph) { graph_change = true; } } + + // add edge operation below depends on memcpy node in itertor loop set single stream,or may cause block + for (auto &active_node : active_nodes_in_iter_loop_) { + auto ret = GraphUtils::AddEdge(active_node->GetOutControlAnchor(), + assign_add_node_in_fpbp_loop_->GetInControlAnchor()); + if (ret != GRAPH_SUCCESS) { + GELOGW("add control edge between iter_loop_node:%s and fpbp_loop_node:%s fail, may cause block", + active_node->GetName().c_str(), assign_add_node_in_fpbp_loop_->GetName().c_str()); + } + } GELOGI("FlowCtrl pass end, graph is %s.", graph_change ? "changed" : "not changed"); return graph_change ? SUCCESS : NOT_CHANGED; } @@ -279,16 +289,16 @@ Status FlowCtrlPass::CreateIterCtrlTrueBranch(ComputeGraphPtr &compute_graph, co * loopIncrement */ // Insert AssignAdd node - NodePtr assign_add_node = + assign_add_node_in_fpbp_loop_ = InsertAssignOp(compute_graph, ASSIGNADD, NODE_NAME_FLOWCTRL_LOOP_ASSIGNADD, loop_cond_node, loop_inc_node); - if (assign_add_node == nullptr || switch_node == nullptr) { + if (assign_add_node_in_fpbp_loop_ == nullptr || switch_node == nullptr) { GELOGE(PARAM_INVALID, "assign add node or switch node is null"); return FAILED; } string active_name = switch_node->GetName() + "_StreamActive"; // add attr for stream assign model to break branch. - GE_CHK_STATUS_RET(SetStreamLabel(assign_add_node, active_name), "set stream label failed"); + GE_CHK_STATUS_RET(SetStreamLabel(assign_add_node_in_fpbp_loop_, active_name), "set stream label failed"); // used for stream assign to find true branch GE_CHK_STATUS_RET(SetActiveLabelList(switch_node, { active_name }), "set active label list failed"); @@ -304,13 +314,15 @@ Status FlowCtrlPass::CreateIterCtrlTrueBranch(ComputeGraphPtr &compute_graph, co DOMI_LOGE("set ATTR_NAME_IS_LOOP_ACTIVE failed"); return FAILED); // add ctrl edges - graphStatus add_ret = GraphUtils::AddEdge(switch_node->GetOutControlAnchor(), assign_add_node->GetInControlAnchor()); + graphStatus add_ret = GraphUtils::AddEdge(switch_node->GetOutControlAnchor(), + assign_add_node_in_fpbp_loop_->GetInControlAnchor()); if (add_ret != GRAPH_SUCCESS) { GELOGE(FAILED, "Add switch_node to assign_add_node ctrl edge failed, add_ret=%u.", add_ret); return FAILED; } - add_ret = GraphUtils::AddEdge(assign_add_node->GetOutControlAnchor(), active_node->GetInControlAnchor()); + add_ret = GraphUtils::AddEdge(assign_add_node_in_fpbp_loop_->GetOutControlAnchor(), + active_node->GetInControlAnchor()); if (add_ret != GRAPH_SUCCESS) { GELOGE(FAILED, "Add assign_add_node to active_node ctrl edge failed, add_ret=%u.", add_ret); return FAILED; @@ -335,11 +347,11 @@ Status FlowCtrlPass::CreateIterCtrlFalseBranch(ComputeGraphPtr &compute_graph, c NodePtr assign_node = InsertAssignOp(compute_graph, ASSIGN, NODE_NAME_FLOWCTRL_LOOP_ASSIGN, loop_cond_node, loop_reset_node); if (assign_node == nullptr || switch_node == nullptr) { - GELOGE(PARAM_INVALID, "assign_node or switch node is null"); + GELOGE(PARAM_INVALID, "assign_node or switch node is null."); return FAILED; } - GE_CHK_STATUS_RET(SetStreamLabel(assign_node, switch_node->GetName()), "set stream label failed"); + GE_CHK_STATUS_RET(SetStreamLabel(assign_node, switch_node->GetName()), "set stream label failed."); graphStatus add_ret = GraphUtils::AddEdge(switch_node->GetOutControlAnchor(), assign_node->GetInControlAnchor()); if (add_ret != GRAPH_SUCCESS) { @@ -358,7 +370,7 @@ Status FlowCtrlPass::CreateIterCtrlFalseBranch(ComputeGraphPtr &compute_graph, c } GE_CHK_STATUS_RET(SetStreamLabel(active_node, switch_node->GetName()), "set stream label failed"); GE_CHK_STATUS_RET(SetSwitchBranchNodeLabel(active_node, switch_node->GetName()), - "set switch branch node label failed"); + "set switch branch node label failed."); string model_exit_name = switch_node->GetName() + "_ModelExit"; GE_CHK_STATUS_RET(SetActiveLabelList(active_node, { model_exit_name }), "set active label list failed"); @@ -389,7 +401,7 @@ Status FlowCtrlPass::CreateIterCtrlFalseBranch(ComputeGraphPtr &compute_graph, c } Status FlowCtrlPass::AddFpBpIteratorCtrl(ComputeGraphPtr &compute_graph, NodePtr &pre_node) { - GE_IF_BOOL_EXEC(pre_node == nullptr, DOMI_LOGE("pre_node is nullptr"); return FAILED); + GE_IF_BOOL_EXEC(pre_node == nullptr, DOMI_LOGE("pre_node is nullptr."); return FAILED); string pre_node_name = pre_node->GetName(); GELOGI("Add FpBp Iterator ctrl, pre node:%s.", pre_node_name.c_str()); // 1. Get or add variables @@ -465,7 +477,7 @@ Status FlowCtrlPass::AddSpecialNodeIteratorCtrl(ComputeGraphPtr &compute_graph, * itersPerLoop loopCond */ GE_IF_BOOL_EXEC(loop_after_node == nullptr || compute_graph == nullptr, - DOMI_LOGE("loop after node or compute graph is null"); return FAILED); + DOMI_LOGE("loop after node or compute graph is null."); return FAILED); InDataAnchorPtr in_anchor = loop_after_node->GetInDataAnchor(0); if (in_anchor == nullptr || in_anchor->GetPeerOutAnchor() == nullptr) { GELOGE(FAILED, "Find %s in data anchor failed.", loop_after_node->GetName().c_str()); @@ -486,7 +498,7 @@ Status FlowCtrlPass::AddSpecialNodeIteratorCtrl(ComputeGraphPtr &compute_graph, } // 2. Add StreamSwitch and edges to switch_node. - GE_IF_BOOL_EXEC(loop_pre_node == nullptr, DOMI_LOGE("loop pre node is null"); return FAILED); + GE_IF_BOOL_EXEC(loop_pre_node == nullptr, DOMI_LOGE("loop pre node is null."); return FAILED); string switch_name = loop_pre_node->GetName() + "_" + NODE_NAME_STREAM_SWITCH; NodePtr switch_node = InsertStreamSwitchOp(compute_graph, switch_name, loop_cond_node, iter_per_loop_node); if (switch_node == nullptr) { @@ -494,7 +506,7 @@ Status FlowCtrlPass::AddSpecialNodeIteratorCtrl(ComputeGraphPtr &compute_graph, return FAILED; } - GE_CHK_STATUS_RET(SetStreamLabel(switch_node, switch_name), "set stream label failed"); + GE_CHK_STATUS_RET(SetStreamLabel(switch_node, switch_name), "set stream label failed."); graphStatus add_ret = GraphUtils::AddEdge(loop_pre_node->GetOutControlAnchor(), switch_node->GetInControlAnchor()); if (add_ret != GRAPH_SUCCESS) { @@ -517,7 +529,7 @@ Status FlowCtrlPass::AddSpecialNodeIteratorCtrl(ComputeGraphPtr &compute_graph, return FAILED; } - GE_CHK_STATUS_RET(SetStreamLabel(active_node, active_name), "set stream label failed"); + GE_CHK_STATUS_RET(SetStreamLabel(active_node, active_name), "set stream label failed."); GE_IF_BOOL_EXEC(!AttrUtils::SetBool(active_node->GetOpDesc(), ATTR_NAME_IS_LOOP_ACTIVE, true), DOMI_LOGE("set ATTR_NAME_IS_LOOP_ACTIVE failed"); return FAILED); @@ -530,9 +542,10 @@ Status FlowCtrlPass::AddSpecialNodeIteratorCtrl(ComputeGraphPtr &compute_graph, } // used for stream assign to find true branch - GE_CHK_STATUS_RET(SetActiveLabelList(switch_node, { active_name }), "set active label list failed"); + GE_CHK_STATUS_RET(SetActiveLabelList(switch_node, { active_name }), "set active label list failed."); // used for stream assign to find active stream GE_CHK_STATUS_RET(SetActiveLabelList(active_node, { loop_pre_node->GetName() }), "set active label list failed"); + active_nodes_in_iter_loop_.push_back(active_node); return SUCCESS; } } // namespace ge diff --git a/ge/graph/passes/flow_ctrl_pass.h b/ge/graph/passes/flow_ctrl_pass.h index 35270946..74f3cce0 100755 --- a/ge/graph/passes/flow_ctrl_pass.h +++ b/ge/graph/passes/flow_ctrl_pass.h @@ -142,6 +142,9 @@ class FlowCtrlPass : public GraphPass { /// false: only one dataSet exist /// bool CheckMultiDataSet(ComputeGraphPtr &compute_graph); + + NodePtr assign_add_node_in_fpbp_loop_ = nullptr; + std::vector active_nodes_in_iter_loop_; }; } // namespace ge diff --git a/ge/graph/passes/hccl_continuous_memcpy_pass.cc b/ge/graph/passes/hccl_continuous_memcpy_pass.cc index cc928479..1931baf0 100644 --- a/ge/graph/passes/hccl_continuous_memcpy_pass.cc +++ b/ge/graph/passes/hccl_continuous_memcpy_pass.cc @@ -140,7 +140,8 @@ bool HcclContinuousMemcpyPass::IsDataNode(const std::string& node_type) { /// @param [in] ge::OutDataAnchorPtr in_node /// @return ge::NodePtr /// -NodePtr HcclContinuousMemcpyPass::CreateIdentityNode(const ComputeGraphPtr &graph, const OutDataAnchorPtr &out_data_anchor) { +NodePtr HcclContinuousMemcpyPass::CreateIdentityNode(const ComputeGraphPtr &graph, + const OutDataAnchorPtr &out_data_anchor) { GE_CHECK_NOTNULL_EXEC(graph, return nullptr); NodePtr pre_node = out_data_anchor->GetOwnerNode(); OpDescPtr pre_op_desc = pre_node->GetOpDesc(); @@ -205,8 +206,9 @@ std::string HcclContinuousMemcpyPass::CheckDuplicateName(const std::string &node /// @param [in] InDataAnchorPtr hccl_in_anchor /// @return status /// -Status HcclContinuousMemcpyPass::ModifyEdgeConnection(const ComputeGraphPtr &graph, const OutDataAnchorPtr &src_out_anchor, - const InDataAnchorPtr &hccl_in_anchor) { +Status HcclContinuousMemcpyPass::ModifyEdgeConnection(const ComputeGraphPtr &graph, + const OutDataAnchorPtr &src_out_anchor, + const InDataAnchorPtr &hccl_in_anchor) { GE_CHECK_NOTNULL(src_out_anchor->GetOwnerNode()); GE_CHECK_NOTNULL(hccl_in_anchor->GetOwnerNode()); @@ -235,8 +237,9 @@ Status HcclContinuousMemcpyPass::ModifyEdgeConnection(const ComputeGraphPtr &gra /// @param [in] InDataAnchorPtr hccl_in_anchor /// @return status /// -Status HcclContinuousMemcpyPass::InsertIdentityBeforeHccl(const ComputeGraphPtr &graph, const OutDataAnchorPtr &src_out_anchor, - const InDataAnchorPtr &hccl_in_anchor) { +Status HcclContinuousMemcpyPass::InsertIdentityBeforeHccl(const ComputeGraphPtr &graph, + const OutDataAnchorPtr &src_out_anchor, + const InDataAnchorPtr &hccl_in_anchor) { GELOGI("Between op %s and op %s need insert memcpy async op.", src_out_anchor->GetOwnerNode()->GetName().c_str(), hccl_in_anchor->GetOwnerNode()->GetName().c_str()); NodePtr memcpy_node = CreateIdentityNode(graph, src_out_anchor); @@ -274,8 +277,8 @@ Status HcclContinuousMemcpyPass::InsertIdentityBeforeHccl(const ComputeGraphPtr /// @return status /// Status HcclContinuousMemcpyPass::InsertAssignAfterBroadcastIfNeed(const ComputeGraphPtr &graph, - const OutDataAnchorPtr &var_out_anchor, - const InDataAnchorPtr &hccl_in_anchor) { + const OutDataAnchorPtr &var_out_anchor, + const InDataAnchorPtr &hccl_in_anchor) { if (hccl_in_anchor->GetOwnerNode()->GetType() != HCOMBROADCAST) { GELOGD("%s not broadcast, no need to insert assign node", hccl_in_anchor->GetOwnerNode()->GetName().c_str()); return SUCCESS; @@ -354,8 +357,9 @@ Status HcclContinuousMemcpyPass::InsertAssignAfterBroadcastIfNeed(const ComputeG /// @param [in] ge::OutDataAnchorPtr variable node out anchor /// @return ge::NodePtr /// -NodePtr HcclContinuousMemcpyPass::CreateAssignNode(const ComputeGraphPtr &graph, const OutDataAnchorPtr &out_data_anchor) { - GE_CHECK_NOTNULL_EXEC(graph , return nullptr); +NodePtr HcclContinuousMemcpyPass::CreateAssignNode(const ComputeGraphPtr &graph, + const OutDataAnchorPtr &out_data_anchor) { + GE_CHECK_NOTNULL_EXEC(graph, return nullptr); NodePtr pre_node = out_data_anchor->GetOwnerNode(); OpDescPtr pre_op_desc = pre_node->GetOpDesc(); if (pre_op_desc == nullptr) { diff --git a/ge/graph/passes/inplace_support_check_pass.cc b/ge/graph/passes/inplace_support_check_pass.cc index 44ad8361..44a0b3ef 100644 --- a/ge/graph/passes/inplace_support_check_pass.cc +++ b/ge/graph/passes/inplace_support_check_pass.cc @@ -23,9 +23,9 @@ namespace ge { namespace { constexpr uint32_t kInplaceSupportOutputIndex = 0; constexpr uint32_t kInplaceSupportOutputNum = 1; -static const std::set kSrcNodeTypes = { ge::DATA, ge::ANN_DATA, ge::AIPPDATA, - ge::CONSTANT, ge::CONSTANTOP, - ge::VARIABLE, ge::VARIABLEV2 }; +const std::set kSrcNodeTypes = { ge::DATA, ge::ANN_DATA, ge::AIPPDATA, + ge::CONSTANT, ge::CONSTANTOP, + ge::VARIABLE, ge::VARIABLEV2 }; } Status InplaceSupportCheckPass::Run(NodePtr &node) { GELOGD("InplaceSupportCheckPass running"); diff --git a/ge/graph/passes/net_output_pass.cc b/ge/graph/passes/net_output_pass.cc index c6ab062a..c553607f 100644 --- a/ge/graph/passes/net_output_pass.cc +++ b/ge/graph/passes/net_output_pass.cc @@ -458,7 +458,7 @@ Status NetOutputPass::Run(ge::ComputeGraphPtr graph) { GELOGE(GE_GRAPH_PARAM_NULLPTR, "Compute graph is null."); return GE_GRAPH_PARAM_NULLPTR; } - GELOGI("NetOutputPass Run."); + GELOGI("NetOutputPass Run.graph is [%s]", graph->GetName().c_str()); NodePtr output_node = graph->FindFirstNodeMatchType(NETOUTPUT); // save user targets node SaveAndRemoveTargets(graph); diff --git a/ge/graph/passes/no_use_reshape_remove_pass.cc b/ge/graph/passes/no_use_reshape_remove_pass.cc index 66a798a5..1da939c6 100644 --- a/ge/graph/passes/no_use_reshape_remove_pass.cc +++ b/ge/graph/passes/no_use_reshape_remove_pass.cc @@ -82,14 +82,41 @@ Status NoUseReshapeRemovePass::Run(ge::NodePtr &node) { } } if (to_be_deleted) { - GELOGI("NoUseReshapeRemovePass remove useless node:%s", node->GetName().c_str()); - auto ret = PassUtils::UnlinkNodeWithControlCopy(node, kReshapeShapeIndex); - if (ret != SUCCESS) { - GELOGE(ret, "DimensionAdjustPass unlink node with control copy fail."); - return ret; - } + auto ret = TryRemoveConstShapeInput(node); + GE_CHK_STATUS_RET_NOLOG(ret); + GELOGI("NoUseReshapeRemovePass remove useless reshape node:%s", node->GetName().c_str()); return IsolateAndDeleteNode(node, {kReshapeDataIndex}); } return SUCCESS; } + +Status NoUseReshapeRemovePass::TryRemoveConstShapeInput(ge::NodePtr &reshape_node) { + auto shape_input_anchor = reshape_node->GetInDataAnchor(kReshapeShapeIndex); + if (shape_input_anchor == nullptr) { + return SUCCESS; + } + GE_CHECK_NOTNULL(shape_input_anchor->GetPeerOutAnchor()); + auto shape_input = shape_input_anchor->GetPeerOutAnchor()->GetOwnerNode(); + GE_CHECK_NOTNULL(shape_input); + if (shape_input->GetType() != CONSTANT && shape_input->GetType() != CONSTANTOP) { + return SUCCESS; + } + // op(x) const(shape) + // \ / + // reshape + // const input can unlink but should copy control_dependency + auto ret = PassUtils::UnlinkNodeWithControlCopy(reshape_node, kReshapeShapeIndex); + if (ret != SUCCESS) { + GELOGE(ret, "Unlink node %s with control copy failed.", shape_input->GetName().c_str()); + return ret; + } + + // remove const without any data_output + if (shape_input->GetOutDataNodesSize() == 0) { + auto ret = IsolateAndDeleteNode(shape_input, {}); + GE_CHK_GRAPH_STATUS_RET(ret, "Fail to remove node %s", shape_input->GetName().c_str()); + GELOGI("Remove useless shape input const %s.", shape_input->GetName().c_str()); + } + return SUCCESS; +} } // namespace ge diff --git a/ge/graph/passes/no_use_reshape_remove_pass.h b/ge/graph/passes/no_use_reshape_remove_pass.h index c142d8d2..3eb6770b 100755 --- a/ge/graph/passes/no_use_reshape_remove_pass.h +++ b/ge/graph/passes/no_use_reshape_remove_pass.h @@ -32,6 +32,9 @@ class NoUseReshapeRemovePass : public BaseNodePass { /// @author /// Status Run(ge::NodePtr &node) override; + + private: + Status TryRemoveConstShapeInput(NodePtr &reshape_node); }; } // namespace ge diff --git a/ge/graph/passes/prune_pass.cc b/ge/graph/passes/prune_pass.cc index f5f4cbcb..3c95f3b1 100644 --- a/ge/graph/passes/prune_pass.cc +++ b/ge/graph/passes/prune_pass.cc @@ -27,12 +27,11 @@ namespace ge { Status PrunePass::Run(ge::ComputeGraphPtr graph) { - GELOGD("PrunePass Start"); + GELOGD("PrunePass Start, graph is [%s]", graph->GetName().c_str()); if (graph == nullptr) { GELOGE(GE_GRAPH_ISNULL, "input compute graph is NULL."); return GE_GRAPH_ISNULL; } - std::vector out_nodes; std::unordered_set nodes; for (NodePtr &node_ptr : graph->GetDirectNode()) { @@ -42,7 +41,6 @@ Status PrunePass::Run(ge::ComputeGraphPtr graph) { out_nodes.push_back(node_ptr); } } - if (out_nodes.empty()) { GELOGW("graph [%s] does not contain NETOUTPUT type node,no return value. Do nothing!", graph->GetName().c_str()); return ge::SUCCESS; diff --git a/ge/graph/passes/replace_with_empty_const_pass.cc b/ge/graph/passes/replace_with_empty_const_pass.cc index f3887867..5962fe0e 100644 --- a/ge/graph/passes/replace_with_empty_const_pass.cc +++ b/ge/graph/passes/replace_with_empty_const_pass.cc @@ -33,7 +33,7 @@ Status ReplaceWithEmptyConstPass::Run(NodePtr &node) { GELOGE(PARAM_INVALID, "Param [opDesc] must not be null."); return PARAM_INVALID; } - if (node->GetType() == CONSTANT || node->GetType() == CONSTANTOP) { + if (node->GetType() == CONSTANT || node->GetType() == CONSTANTOP || node->GetType() == DATA) { GELOGI("Node %s is const. Ignore current pass.", node->GetName().c_str()); return SUCCESS; } diff --git a/ge/graph/passes/reshape_remove_pass.cc b/ge/graph/passes/reshape_remove_pass.cc index 80573e79..10937cf1 100755 --- a/ge/graph/passes/reshape_remove_pass.cc +++ b/ge/graph/passes/reshape_remove_pass.cc @@ -43,7 +43,7 @@ Status ReshapeRemovePass::Run(NodePtr &node) { GE_CHECK_NOTNULL(node); GE_CHECK_NOTNULL(node->GetOpDesc()); int key = kToBeDeleteOp.find(node->GetType()) == kToBeDeleteOp.end() ? kOpNoDelete : kToBeDeleteOp[node->GetType()]; - switch(key) { + switch (key) { case kReshapeType: { bool is_shape_unknown = false; if (NodeUtils::GetNodeUnknownShapeStatus(*node, is_shape_unknown) == GRAPH_SUCCESS) { diff --git a/ge/graph/passes/resource_pair_add_control_pass.cc b/ge/graph/passes/resource_pair_add_control_pass.cc index 432bff9e..29a19f26 100755 --- a/ge/graph/passes/resource_pair_add_control_pass.cc +++ b/ge/graph/passes/resource_pair_add_control_pass.cc @@ -63,16 +63,17 @@ Status ResourcePairAddControlPass::Run(ComputeGraphPtr graph) { NodePtr from_node = prefix_2_node.second; GE_CHECK_NOTNULL(from_node); auto to_item_prefix_2_node = prefix_2_node_per_type.find(resource_type_pair.second); + // stackpush and stackpop may exist in two subgraphs, no necessary to report error if (to_item_prefix_2_node == prefix_2_node_per_type.end()) { - GELOGE(PARAM_INVALID, "find peer type node fail, suffix:%s, from_type:%s, to_type:%s", prefix.c_str(), + GELOGW("find peer type node fail, suffix:%s, from_type:%s, to_type:%s", prefix.c_str(), resource_type_pair.first.c_str(), resource_type_pair.second.c_str()); - return PARAM_INVALID; + continue; } auto to_prefix_2_node = to_item_prefix_2_node->second.find(prefix); if (to_prefix_2_node == to_item_prefix_2_node->second.end()) { - GELOGE(PARAM_INVALID, "find peer prefix node fail, suffix:%s, from_type:%s, to_type:%s", prefix.c_str(), + GELOGW("find peer prefix node fail, suffix:%s, from_type:%s, to_type:%s", prefix.c_str(), resource_type_pair.first.c_str(), resource_type_pair.second.c_str()); - return PARAM_INVALID; + continue; } NodePtr to_node = to_prefix_2_node->second; GE_CHECK_NOTNULL(to_node); diff --git a/ge/graph/passes/resource_pair_remove_control_pass.cc b/ge/graph/passes/resource_pair_remove_control_pass.cc index 83fc7081..7048ed1d 100755 --- a/ge/graph/passes/resource_pair_remove_control_pass.cc +++ b/ge/graph/passes/resource_pair_remove_control_pass.cc @@ -63,16 +63,17 @@ Status ResourcePairRemoveControlPass::Run(ComputeGraphPtr graph) { NodePtr from_node = prefix_2_node.second; GE_CHECK_NOTNULL(from_node); auto to_item_prefix_2_node = prefix_2_node_per_type.find(resource_type_pair.second); + // stackpush and stackpop may exist in two subgraphs, no necessary to report error if (to_item_prefix_2_node == prefix_2_node_per_type.end()) { - GELOGE(INTERNAL_ERROR, "find peer type node fail, suffix:%s, from_type:%s, to_type:%s", prefix.c_str(), + GELOGW("find peer type node fail, suffix:%s, from_type:%s, to_type:%s", prefix.c_str(), resource_type_pair.first.c_str(), resource_type_pair.second.c_str()); - return domi::PARAM_INVALID; + continue; } auto to_prefix_2_node = to_item_prefix_2_node->second.find(prefix); if (to_prefix_2_node == to_item_prefix_2_node->second.end()) { - GELOGE(INTERNAL_ERROR, "find peer prefix node fail, suffix:%s, from_type:%s, to_type:%s", prefix.c_str(), + GELOGW("find peer prefix node fail, suffix:%s, from_type:%s, to_type:%s", prefix.c_str(), resource_type_pair.first.c_str(), resource_type_pair.second.c_str()); - return domi::PARAM_INVALID; + continue; } NodePtr to_node = to_prefix_2_node->second; GE_CHECK_NOTNULL(to_node); diff --git a/ge/graph/passes/same_transdata_breadth_fusion_pass.cc b/ge/graph/passes/same_transdata_breadth_fusion_pass.cc index ad8819e5..44778dd3 100644 --- a/ge/graph/passes/same_transdata_breadth_fusion_pass.cc +++ b/ge/graph/passes/same_transdata_breadth_fusion_pass.cc @@ -67,7 +67,7 @@ OpDescPtr SameTransdataBreadthFusionPass::GetCastOp(const GeTensorDesc &in_desc, auto fusion_cast_op_count = atomic_fusion_cast_op_count.fetch_add(1); std::stringstream cast_op_name; cast_op_name << "fusion_cast_" << fusion_cast_op_count; - auto node_op = ge::OperatorFactory::CreateOperator(cast_op_name.str(), CAST); + auto node_op = ge::OperatorFactory::CreateOperator(cast_op_name.str().c_str(), CAST); auto cast_op = ge::OpDescUtils::GetOpDescFromOperator(node_op); node_op.BreakConnect(); if (cast_op == nullptr) { diff --git a/ge/graph/passes/subexpression_migration_pass.cc b/ge/graph/passes/subexpression_migration_pass.cc index d2831f5c..dc4d2185 100755 --- a/ge/graph/passes/subexpression_migration_pass.cc +++ b/ge/graph/passes/subexpression_migration_pass.cc @@ -165,14 +165,6 @@ Status SubexpressionMigrationPass::ClassifyDataNodes(const ComputeGraphPtr &grap } } - for (const auto &data_nodes : graph_nodes) { - if (data_nodes.second.size() != graph_nodes.begin()->second.size()) { - GELOGE(FAILED, "Subgraph %s has invalid Data nodes[%zu != %zu]", - data_nodes.first->GetName().c_str(), data_nodes.second.size(), graph_nodes.begin()->second.size()); - return FAILED; - } - } - return SUCCESS; } diff --git a/ge/graph/passes/subgraph_const_migration_pass.cc b/ge/graph/passes/subgraph_const_migration_pass.cc index d2effd44..d27cacf7 100644 --- a/ge/graph/passes/subgraph_const_migration_pass.cc +++ b/ge/graph/passes/subgraph_const_migration_pass.cc @@ -385,7 +385,7 @@ Status SubgraphConstMigrationPass::DetachParallelNode(const ComputeGraphPtr &gra // Break Move and follow, Link Data and follow. const auto &out_anchor = const_node->GetOutDataAnchor(kZeroIndex); - const auto in_anchors =out_anchor->GetPeerInDataAnchors(); + const auto in_anchors = out_anchor->GetPeerInDataAnchors(); for (const auto in_anchor : in_anchors) { GE_CHK_GRAPH_STATUS_RET(GraphUtils::RemoveEdge(out_anchor, in_anchor), "Remove edge failed"); GELOGI("Remove Edge: %s %s", const_node->GetName().c_str(), in_anchor->GetOwnerNode()->GetName().c_str()); diff --git a/ge/graph/passes/transpose_transdata_pass.cc b/ge/graph/passes/transpose_transdata_pass.cc index 2178eac7..810f5639 100644 --- a/ge/graph/passes/transpose_transdata_pass.cc +++ b/ge/graph/passes/transpose_transdata_pass.cc @@ -86,7 +86,7 @@ Status TransposeTransDataPass::Run(NodePtr &node) { if (CheckOneInAndOneOutDataAnchor(out_node)) { return FAILED; } - if (!FusionIfNeed(op_desc, out_op_desc)) { + if (!FusionIfNeed(op_desc, out_node)) { continue; } CopyInputEdges(node, out_node); @@ -152,7 +152,8 @@ Status TransposeTransDataPass::RemoveTranspose(NodePtr &node) { return SUCCESS; } -bool TransposeTransDataPass::FusionIfNeed(OpDescPtr &op_desc, OpDescPtr &transdata_op_desc) { +bool TransposeTransDataPass::FusionIfNeed(OpDescPtr &op_desc, NodePtr &node) { + auto transdata_op_desc = node->GetOpDesc(); GE_CHECK_NOTNULL(op_desc); GE_CHECK_NOTNULL(transdata_op_desc); auto out_input_desc = transdata_op_desc->MutableInputDesc(0); @@ -187,7 +188,7 @@ bool TransposeTransDataPass::FusionIfNeed(OpDescPtr &op_desc, OpDescPtr &transda out_input_desc->SetFormat(src_format); out_input_desc->SetShape(src_shape); - if (!TransDataCheckAccuracySupported(transdata_op_desc)) { + if (!TransDataCheckAccuracySupported(node)) { out_input_desc->SetFormat(out_input_format); out_input_desc->SetShape(out_input_shape); return false; @@ -224,7 +225,8 @@ void TransposeTransDataPass::CopyInputEdges(NodePtr &origin_node, NodePtr &new_n GraphUtils::CopyInCtrlEdges(origin_node, new_node) != GRAPH_SUCCESS, GELOGW("Copy in ctrl edges failed"); return); } -bool TransposeTransDataPass::TransDataCheckAccuracySupported(const OpDescPtr &op_desc) { +bool TransposeTransDataPass::TransDataCheckAccuracySupported(NodePtr &node) { + const OpDescPtr &op_desc = node->GetOpDesc(); std::shared_ptr instance_ptr = ge::GELib::GetInstance(); if ((instance_ptr == nullptr) || (!instance_ptr->InitFlag())) { GELOGW("GELib not initialized"); @@ -244,7 +246,7 @@ bool TransposeTransDataPass::TransDataCheckAccuracySupported(const OpDescPtr &op auto &kernel_name = it.opKernelLib; auto kernel_info_store = kernel_map.find(kernel_name); if (kernel_info_store != kernel_map.end()) { - if (kernel_info_store->second->CheckAccuracySupported(op_desc, unsupported_reason, true)) { + if (kernel_info_store->second->CheckAccuracySupported(node, unsupported_reason, true)) { return true; } } diff --git a/ge/graph/passes/transpose_transdata_pass.h b/ge/graph/passes/transpose_transdata_pass.h index a72893f6..c6ef0b36 100644 --- a/ge/graph/passes/transpose_transdata_pass.h +++ b/ge/graph/passes/transpose_transdata_pass.h @@ -26,9 +26,9 @@ class TransposeTransDataPass : public BaseNodePass { private: Status CheckOneInAndOneOutDataAnchor(NodePtr &node) const; Status RemoveTranspose(NodePtr &node); - bool FusionIfNeed(OpDescPtr &op_desc, OpDescPtr &transdata_op_desc); + bool FusionIfNeed(OpDescPtr &op_desc, NodePtr &node); void CopyInputEdges(NodePtr &origin_node, NodePtr &new_node); - bool TransDataCheckAccuracySupported(const OpDescPtr &op_desc); + bool TransDataCheckAccuracySupported(NodePtr &node); }; } // namespace ge #endif // GE_GRAPH_PASSES_TRANSPOSE_TRANSDATA_PASS_H_ diff --git a/ge/graph/preprocess/graph_preprocess.cc b/ge/graph/preprocess/graph_preprocess.cc index 499e1897..db17e091 100644 --- a/ge/graph/preprocess/graph_preprocess.cc +++ b/ge/graph/preprocess/graph_preprocess.cc @@ -991,7 +991,6 @@ Status ParseDynamicInputShapeRange(const std::string &shape_range, Status GetDynamicInputShapeRange(const std::vector &user_input, const std::map &graph_option, vector>> &range_vec) { // check both mode and shape_range option are all enabled - auto mode_iter = graph_option.find(OPTION_EXEC_DYNAMIC_EXECUTE_MODE); bool enable_dynamic_execute_mode = (mode_iter != graph_option.end()) && (mode_iter->second == "dynamic_execute"); if (!enable_dynamic_execute_mode) { @@ -1272,9 +1271,10 @@ Status GraphPrepare::AdjustDataOpOutput(const NodePtr &node) { return SUCCESS; } -Status GraphPrepare::UpdateInput(const std::vector &user_input, const std::map &graph_option) { +Status GraphPrepare::UpdateInput(const std::vector &user_input, + const std::map &graph_option) { // Get shape range of input in dynamic_execute mode - vector>> dynamic_shape_range_vec; + vector>> dynamic_shape_range_vec; auto ret = GetDynamicInputShapeRange(user_input, graph_option, dynamic_shape_range_vec); GE_CHK_STATUS_RET(ret, "Graph option is not right on Dynamic execute mode."); compute_graph_->SaveDataFormat(ge::TypeUtils::DomiFormatToFormat(GetLocalOmgContext().format)); @@ -2012,7 +2012,8 @@ Status GraphPrepare::ProcessNetOutput() { return SUCCESS; } -Status GraphPrepare::CheckAndUpdateInput(const std::vector &user_input,const std::map &graph_option) { +Status GraphPrepare::CheckAndUpdateInput(const std::vector &user_input, + const std::map &graph_option) { compute_graph_->SetInputSize(user_input.size()); if (user_input.empty()) { return SUCCESS; diff --git a/ge/graph/preprocess/graph_preprocess.h b/ge/graph/preprocess/graph_preprocess.h index de755418..9dc3e679 100755 --- a/ge/graph/preprocess/graph_preprocess.h +++ b/ge/graph/preprocess/graph_preprocess.h @@ -23,7 +23,7 @@ #include #include "common/debug/log.h" #include "common/debug/memory_dumper.h" -#include "common/model_parser/base.h" +#include "common/model_parser/model_parser.h" #include "common/properties_manager.h" #include "common/string_util.h" #include "common/types.h" @@ -63,8 +63,8 @@ class GraphPrepare { Status CheckRefOp(); Status SetRtContext(rtContext_t rt_context, rtCtxMode_t mode); Status AdjustDataOpOutput(const NodePtr &node); - Status UpdateInput(const std::vector &user_input, const std::map &graph_option); - Status CheckAndUpdateInput(const std::vector &user_input, const std::map &graph_option); + Status UpdateInput(const std::vector &user_input, const std::map &graph_option); + Status CheckAndUpdateInput(const std::vector &user_input, const std::map &graph_option); Status CheckConstOp(); Status VerifyConstOp(const NodePtr &node); Status CheckUserInput(const std::vector &user_input); diff --git a/ge/graph/preprocess/multi_batch_copy_graph.cc b/ge/graph/preprocess/multi_batch_copy_graph.cc index 215b31ee..12987f29 100644 --- a/ge/graph/preprocess/multi_batch_copy_graph.cc +++ b/ge/graph/preprocess/multi_batch_copy_graph.cc @@ -600,7 +600,7 @@ Status MultiBatchGraphCopyer::LabelInBatchBranchStatus() { for (auto &in_node : node->GetInDataNodes()) { if (origin_nodes_status_.find(in_node.get()) != origin_nodes_status_.end()) { if (origin_nodes_status_.find(node.get()) == origin_nodes_status_.end()) { - origin_nodes_status_[node.get()] == kNodeInBatchBranch; + origin_nodes_status_[node.get()] = kNodeInBatchBranch; ResetEnterStatus(frame_enters, node); changed = true; } diff --git a/ge/graph/preprocess/multi_batch_options.h b/ge/graph/preprocess/multi_batch_options.h index 0ddaea0d..ace92ce6 100644 --- a/ge/graph/preprocess/multi_batch_options.h +++ b/ge/graph/preprocess/multi_batch_options.h @@ -105,7 +105,7 @@ GE_FUNC_VISIBILITY bool CheckDynamicBatchShape(const vector &shape, con /// @return 0: true/false /// GE_FUNC_VISIBILITY bool CheckDynamicImageSizeShape(const vector &shape, const string &data_name, - const std::string &input_format); + const std::string &input_format); } // namespace multibatch } // namespace ge diff --git a/ge/host_kernels/dynamic_stitch_kernel.cc b/ge/host_kernels/dynamic_stitch_kernel.cc index 3037934e..52f6cdcf 100644 --- a/ge/host_kernels/dynamic_stitch_kernel.cc +++ b/ge/host_kernels/dynamic_stitch_kernel.cc @@ -111,8 +111,9 @@ void DynamicStitchKernel::ComputeMergedShape(const vector &inp int32_t merged_first_dim = 0; int64_t indices_shape_size = 0; for (int i = 0; i < n_; i++) { - indices_shape_size = input[i]->GetTensorDesc().GetShape().GetShapeSize(); - indices_shape_size = indices_shape_size == 0 ? 1 : indices_shape_size; + // shape is [] means scalar + indices_shape_size = + input[i]->GetTensorDesc().GetShape().GetDims().empty() ? 1 : input[i]->GetTensorDesc().GetShape().GetShapeSize(); const int32_t *input_indices = reinterpret_cast(input[i]->GetData().data()); for (int64_t j = 0; j < indices_shape_size; j++) { merged_first_dim = std::max(merged_first_dim, input_indices[j]); diff --git a/ge/host_kernels/slice_kernel.cc b/ge/host_kernels/slice_kernel.cc index c3274465..025d7f66 100644 --- a/ge/host_kernels/slice_kernel.cc +++ b/ge/host_kernels/slice_kernel.cc @@ -16,6 +16,8 @@ #include "host_kernels/slice_kernel.h" +#include + #include "common/ge_inner_error_codes.h" #include "common/op/ge_op_utils.h" #include "common/types.h" @@ -31,6 +33,30 @@ const size_t kSliceInputSize = 3; const size_t kSliceInputIndexX = 0; const size_t kSliceInputIndexBegin = 1; const size_t kSliceInputIndexSize = 2; +const std::set kSupportedDataTypeToLength = { + DT_BOOL, + DT_INT64, + DT_UINT64, + DT_FLOAT, + DT_INT32, + DT_UINT32, + DT_INT8, + DT_UINT8, + DT_INT16, + DT_UINT16, + DT_FLOAT16, + DT_DOUBLE, + DT_DUAL, + DT_DUAL_SUB_INT8, + DT_DUAL_SUB_UINT8, + DT_COMPLEX64, + DT_COMPLEX128, + DT_QINT8, + DT_QINT16, + DT_QINT32, + DT_QUINT8, + DT_QUINT16, +}; } // namespace Status SliceKernel::Compute(const OpDescPtr attr, const std::vector &input, @@ -56,6 +82,16 @@ Status SliceKernel::Compute(const OpDescPtr attr, const std::vectorGetTensorDesc().GetDataType(); + // check supported + if (kSupportedDataTypeToLength.count(data_type) == 0) { + GELOGW("input_x data_type is [%s], does not supported!", TypeUtils::DataTypeToSerialString(data_type).c_str()); + return NOT_CHANGED; + } + uint32_t type_size = 0; + bool is_success = TypeUtils::GetDataTypeLength(data_type, type_size); + if (!is_success) { + return NOT_CHANGED; + } // check data type of begin and size if (begin->GetTensorDesc().GetDataType() != DT_INT32 || size->GetTensorDesc().GetDataType() != DT_INT32) { GELOGW("Data type of begin and size for slice are not DT_INT32."); @@ -69,7 +105,7 @@ Status SliceKernel::Compute(const OpDescPtr attr, const std::vectorGetData().size() / sizeof(int32_t); + size_t data_size = x_->GetData().size() / type_size; size_t begin_size = begin->GetData().size() / sizeof(int32_t); size_t size_size = size->GetData().size() / sizeof(int32_t); const ge::GeShape &x_shape = x_->GetTensorDesc().GetShape(); diff --git a/ge/hybrid/executor/hybrid_execution_context.h b/ge/hybrid/executor/hybrid_execution_context.h index 5e4e4f9a..4dc010df 100644 --- a/ge/hybrid/executor/hybrid_execution_context.h +++ b/ge/hybrid/executor/hybrid_execution_context.h @@ -62,9 +62,9 @@ struct GraphExecutionContext { rtStream_t stream = nullptr; rtContext_t rt_context = nullptr; rtContext_t rt_gen_context = nullptr; - std::unique_ptr callback_manager; + std::unique_ptr callback_manager = nullptr; NpuMemoryAllocator *allocator = nullptr; - mutable std::unique_ptr profiler; + mutable std::unique_ptr profiler = nullptr; DumpProperties dump_properties; bool trace_enabled = false; bool dump_enabled = false; diff --git a/ge/hybrid/executor/hybrid_model_async_executor.cc b/ge/hybrid/executor/hybrid_model_async_executor.cc index 1b5afb83..b6c4dc9e 100644 --- a/ge/hybrid/executor/hybrid_model_async_executor.cc +++ b/ge/hybrid/executor/hybrid_model_async_executor.cc @@ -26,6 +26,7 @@ namespace hybrid { namespace { const int kDataOutputIndex = 0; const size_t kMinimumPiplineStages = 2; +const int kDefaultLoopCount = 10; } HybridModelAsyncExecutor::HybridModelAsyncExecutor(HybridModel *model) : model_(model), run_flag_(false) { @@ -45,6 +46,10 @@ void HybridModelAsyncExecutor::SetModelId(uint32_t model_id) { model_id_ = model_id; } +void HybridModelAsyncExecutor::SetModelName(const string &model_name) { + om_name_ = model_name; +} + Status HybridModelAsyncExecutor::EnqueueData(const shared_ptr &data) { GE_CHK_STATUS_EXEC(data_inputer_->Push(data), return domi::DATA_QUEUE_ISFULL, "Data queue is full, please call again later, model_id %u ", model_id_); @@ -80,6 +85,10 @@ Status HybridModelAsyncExecutor::Stop() { ret = future_.get(); } + if (is_op_debug_reg_) { + op_debug_register_.UnregisterDebugForStream(stream_); + } + if (stream_ != nullptr) { GE_CHK_RT(rtStreamDestroy(stream_)); stream_ = nullptr; @@ -96,6 +105,7 @@ Status HybridModelAsyncExecutor::Init() { executor_ = std::unique_ptr(new(std::nothrow) HybridModelExecutor(model_, device_id_, stream_)); GE_CHECK_NOTNULL(executor_); GE_CHK_STATUS_RET(executor_->Init(), "Failed to init hybrid engine"); + GE_CHK_STATUS_RET(DumpOpDebug(),"Dump op debug failed in hybrid engine"); GELOGI("HybridModel stage nums:%zu", model_->GetRootGraphItem()->NumGroups()); if (model_->GetRootGraphItem()->NumGroups() >= kMinimumPiplineStages) { @@ -150,7 +160,7 @@ Status HybridModelAsyncExecutor::RunInternal() { GELOGI("HybridModel will execute in pipeline mode"); auto iter_per_run = std::getenv("ITER_NUM"); if (iter_per_run) { - args.num_loops = static_cast(strtol(iter_per_run, nullptr, 10)); + args.num_loops = static_cast(strtol(iter_per_run, nullptr, kDefaultLoopCount)); } ret = pipe_executor_->Execute(args); } else { @@ -250,7 +260,8 @@ Status HybridModelAsyncExecutor::PrepareInputs(const InputData ¤t_data, Hy if (k >= shape.GetDimNum()) { break; } - if (shape.GetDim(k) < range[k].first || shape.GetDim(k) > range[k].second) { + // range[k].second can be -1 + if (shape.GetDim(k) < range[k].first || (range[k].second >= 0 && shape.GetDim(k) > range[k].second)) { GELOGE(PARAM_INVALID, "Dim out of range, shape idx = %zu, dim idx = %zu, dim = %ld, range = [%ld, %ld]", input_index, k, shape.GetDim(k), range[k].first, range[k].second); return PARAM_INVALID; @@ -452,8 +463,8 @@ Status HybridModelAsyncExecutor::Execute(const std::vector &inputs, i, outputs[i].length, output_real_size); return FAILED; } - GE_CHK_RT_RET(rtMemcpy(outputs[i].data, outputs[i].length, args.outputs[i].GetData(), output_real_size, - RT_MEMCPY_DEVICE_TO_DEVICE)); + GE_CHK_RT_RET(rtMemcpy(outputs[i].data, outputs[i].length, args.outputs[i].GetData(), output_real_size, + RT_MEMCPY_DEVICE_TO_DEVICE)); } outputs[i].length = output_real_size; } @@ -502,5 +513,40 @@ Status HybridModelAsyncExecutor::Execute(const vector &inputs, vector< return SUCCESS; } +Status HybridModelAsyncExecutor::DumpOpDebug() { + const DumpProperties &dump_properties = executor_->GetContext()->dump_properties; + if (dump_properties.IsOpDebugOpen()) { + GELOGD("Opdebug is open in hybrid engine"); + uint32_t op_debug_mode = dump_properties.GetOpDebugMode(); + GE_CHK_RT_RET(op_debug_register_.RegisterDebugForStream(stream_, op_debug_mode, data_dumper_)); + is_op_debug_reg_ = true; + data_dumper_.SetDumpProperties(dump_properties); + data_dumper_.SetModelName(model_->GetModelName()); + data_dumper_.SetModelId(model_->GetModelId()); + data_dumper_.SetDeviceId(model_->GetDeviceId()); + void *global_step = nullptr; + TensorValue *varible_global_step = model_->GetVariable(NODE_NAME_GLOBAL_STEP); + if (varible_global_step != nullptr) { + global_step = const_cast(varible_global_step->GetData()); + } + + void *loop_per_iter = nullptr; + TensorValue *varible_loop_per_iter = model_->GetVariable(NODE_NAME_FLOWCTRL_LOOP_PER_ITER); + if (varible_loop_per_iter != nullptr) { + loop_per_iter = const_cast(varible_loop_per_iter->GetData()); + } + + void *loop_cond = nullptr; + TensorValue *varible_loop_cond = model_->GetVariable(NODE_NAME_FLOWCTRL_LOOP_COND); + if (varible_loop_cond != nullptr) { + loop_cond = const_cast(varible_loop_cond->GetData()); + } + data_dumper_.SetLoopAddr(global_step, loop_per_iter, loop_cond); + GE_CHK_STATUS_RET(data_dumper_.LoadDumpInfo(), "LoadDumpInfo failed in hybrid engine"); + GELOGD("Dump op debug SUCCESS in hybrid engine"); + } + return SUCCESS; +} + } // namespace hybrid } // namespace ge diff --git a/ge/hybrid/executor/hybrid_model_async_executor.h b/ge/hybrid/executor/hybrid_model_async_executor.h index dec7e384..69d8a3f4 100644 --- a/ge/hybrid/executor/hybrid_model_async_executor.h +++ b/ge/hybrid/executor/hybrid_model_async_executor.h @@ -21,7 +21,9 @@ #include #include "external/ge/ge_api_error_codes.h" #include "external/ge/ge_api_types.h" +#include "common/dump/opdebug_register.h" #include "graph/load/model_manager/data_inputer.h" +#include "graph/load/model_manager/data_dumper.h" #include "hybrid/executor/hybrid_model_executor.h" #include "hybrid/executor/hybrid_model_pipeline_executor.h" #include "runtime/stream.h" @@ -49,6 +51,8 @@ class HybridModelAsyncExecutor { void SetModelId(uint32_t model_id); + void SetModelName(const string &model_name); + Status Stop(); Status EnqueueData(const std::shared_ptr &data); @@ -75,6 +79,8 @@ class HybridModelAsyncExecutor { Status PrepareInputs(const InputData ¤t_data, HybridModelExecutor::ExecuteArgs &args); + Status DumpOpDebug(); + std::mutex mu_; HybridModel *model_; uint32_t device_id_ = 0U; @@ -91,6 +97,10 @@ class HybridModelAsyncExecutor { std::map input_tensor_desc_; std::vector is_input_dynamic_; std::shared_ptr listener_; + string om_name_; + DataDumper data_dumper_; + bool is_op_debug_reg_ = false; + OpdebugRegister op_debug_register_; }; } // namespace hybrid } // namespace ge diff --git a/ge/hybrid/executor/hybrid_model_executor.cc b/ge/hybrid/executor/hybrid_model_executor.cc index c4154abb..80b8983a 100755 --- a/ge/hybrid/executor/hybrid_model_executor.cc +++ b/ge/hybrid/executor/hybrid_model_executor.cc @@ -17,6 +17,7 @@ #include "hybrid_model_executor.h" #include "graph/ge_context.h" #include "graph/runtime_inference_context.h" +#include "common/dump/dump_manager.h" namespace ge { namespace hybrid { @@ -107,7 +108,7 @@ Status HybridModelExecutor::InitExecutionContext() { GE_CHECK_NOTNULL(context_.allocator); context_.callback_manager = std::unique_ptr(new(std::nothrow)CallbackManager()); GE_CHECK_NOTNULL(context_.callback_manager); - context_.dump_properties = PropertiesManager::Instance().GetDumpProperties(context_.session_id); + context_.dump_properties = DumpManager::GetInstance().GetDumpProperties(context_.session_id); const char *profiling_level = std::getenv(kEnvProfilingLevel); if (profiling_level != nullptr) { context_.profiling_level = std::strtol(profiling_level, nullptr, kIntBase); diff --git a/ge/hybrid/executor/hybrid_model_pipeline_executor.cc b/ge/hybrid/executor/hybrid_model_pipeline_executor.cc index b043ca7f..4706fa97 100644 --- a/ge/hybrid/executor/hybrid_model_pipeline_executor.cc +++ b/ge/hybrid/executor/hybrid_model_pipeline_executor.cc @@ -1,6 +1,7 @@ #include "hybrid_model_pipeline_executor.h" #include "common/math/math_util.h" +#include "common/dump/dump_manager.h" #include "graph/ge_context.h" #include "graph/runtime_inference_context.h" @@ -8,6 +9,7 @@ namespace ge { namespace hybrid { namespace { constexpr int kNumExecutors = 2; +const int kMinLoopCount = 2; const int kIntBase = 10; const char *const kEnvProfilingLevel = "HYBRID_PROFILING_LEVEL"; } @@ -144,7 +146,7 @@ Status StageExecutor::InitExecutionContext() { GE_CHECK_NOTNULL(context_.allocator); context_.callback_manager = std::unique_ptr(new (std::nothrow) CallbackManager()); GE_CHECK_NOTNULL(context_.callback_manager); - context_.dump_properties = PropertiesManager::Instance().GetDumpProperties(context_.session_id); + context_.dump_properties = DumpManager::GetInstance().GetDumpProperties(context_.session_id); if (IsLogEnable(GE_MODULE_NAME, DLOG_DEBUG)) { context_.trace_enabled = true; } @@ -208,7 +210,7 @@ Status HybridModelPipelineExecutor::InitStageExecutors() { Status HybridModelPipelineExecutor::Execute(HybridModelExecutor::ExecuteArgs &args) { int loop_count = args.num_loops; - GE_CHECK_GE(loop_count, 2); + GE_CHECK_GE(loop_count, kMinLoopCount); auto &inputs = args.inputs; auto &input_desc = args.input_desc; diff --git a/ge/hybrid/executor/hybrid_model_pipeline_executor.h b/ge/hybrid/executor/hybrid_model_pipeline_executor.h index 3cb1fd23..cb08d872 100644 --- a/ge/hybrid/executor/hybrid_model_pipeline_executor.h +++ b/ge/hybrid/executor/hybrid_model_pipeline_executor.h @@ -60,7 +60,7 @@ class StageExecutor { BlockingQueue task_queue_; std::unique_ptr root_graph_executor_; GraphExecutionContext context_; - StageExecutor *next_executor_; + StageExecutor *next_executor_ = nullptr; rtStream_t stream_ = nullptr; }; diff --git a/ge/hybrid/executor/node_state.h b/ge/hybrid/executor/node_state.h index ef348a69..84a52abd 100644 --- a/ge/hybrid/executor/node_state.h +++ b/ge/hybrid/executor/node_state.h @@ -30,7 +30,7 @@ class NodeTask; struct GraphExecutionContext; class SubgraphContext; class TaskContext; -class NodeState; +struct NodeState; class ShapeFuture { public: diff --git a/ge/hybrid/executor/subgraph_executor.cc b/ge/hybrid/executor/subgraph_executor.cc index 8fbc6741..45db9936 100644 --- a/ge/hybrid/executor/subgraph_executor.cc +++ b/ge/hybrid/executor/subgraph_executor.cc @@ -275,10 +275,10 @@ Status SubgraphExecutor::PrepareNodes(int group) { Status SubgraphExecutor::InferShape(ShapeInferenceEngine *shape_inference_engine, NodeState &node_state) const { GetContext().SetSessionId(context_->context_id); HYBRID_CHK_STATUS_RET(shape_inference_engine->InferShape(node_state), - "[%s] Failed to InferShape.", node_state.GetName().c_str()); + "[%s] Failed to InferShape.", node_state.GetName().c_str()); GetContext().SetSessionId(context_->session_id); HYBRID_CHK_STATUS_RET(shape_inference_engine->PropagateOutputShapes(node_state), - "[%s] Failed to PropagateOutputShapes.", node_state.GetName().c_str()); + "[%s] Failed to PropagateOutputShapes.", node_state.GetName().c_str()); return SUCCESS; } diff --git a/ge/hybrid/executor/worker/execution_engine.cc b/ge/hybrid/executor/worker/execution_engine.cc index 7f4fa78c..673c82dd 100755 --- a/ge/hybrid/executor/worker/execution_engine.cc +++ b/ge/hybrid/executor/worker/execution_engine.cc @@ -70,8 +70,6 @@ class NodeDoneCallback { Status PrepareConstInputs(const NodeItem &node_item); Status DumpDynamicNode(); Status ProfilingReport(); - Status GetGraphDescInfo(const NodePtr node, const HybridModel *model, - std::vector &compute_graph_info); Status GetTaskDescInfo(const NodePtr node, const HybridModel *model, std::vector &task_desc_info); GraphExecutionContext *graph_context_; @@ -159,51 +157,14 @@ Status NodeDoneCallback::GetTaskDescInfo(const NodePtr node, const HybridModel * } GELOGD("GetTaskDescInfo of node [%s] start.", node->GetName().c_str()); + auto &prof_mgr = ProfilingManager::Instance(); task_desc_info = context_->GetProfilingTaskDescInfo(); context_->ClearProfilingTaskDescInfo(); - - return SUCCESS; -} - -Status NodeDoneCallback::GetGraphDescInfo(const NodePtr node, const HybridModel *model, - std::vector &compute_graph_info) { - GE_CHECK_NOTNULL(node); - GE_CHECK_NOTNULL(model); - - GELOGD("GetComputeGraphInfo of node [%s] start.", node->GetName().c_str()); - compute_graph_info = context_->GetProfilingGraphDescInfo(); - context_->ClearProfilingGraphDescInfo(); - - auto op_desc = node->GetOpDesc(); - GE_CHECK_NOTNULL(op_desc); - for (auto &tmp_compute_graph_info : compute_graph_info) { - // default - if (op_desc->GetAllInputsSize() == 0) { - tmp_compute_graph_info.input_format = { FORMAT_NULL }; - tmp_compute_graph_info.input_shape = { {0} }; - tmp_compute_graph_info.input_data_type = { DT_UNDEFINED }; - } - for (size_t i = 0; i < op_desc->GetAllInputsSize(); ++i) { - GeTensorDescPtr input_desc = op_desc->MutableInputDesc(i); - if (input_desc == nullptr) { - continue; - } - tmp_compute_graph_info.input_format.emplace_back(input_desc->GetFormat()); - tmp_compute_graph_info.input_shape.emplace_back(input_desc->GetShape().GetDims()); - tmp_compute_graph_info.input_data_type.emplace_back(input_desc->GetDataType()); - } - - if (op_desc->GetOutputsSize() == 0) { - tmp_compute_graph_info.output_format = { FORMAT_NULL }; - tmp_compute_graph_info.output_shape = { {0} }; - tmp_compute_graph_info.output_data_type = { DT_UNDEFINED }; - } - for (size_t j = 0; j < op_desc->GetOutputsSize(); ++j) { - GeTensorDesc output_desc = op_desc->GetOutputDesc(j); - tmp_compute_graph_info.output_format.emplace_back(output_desc.GetFormat()); - tmp_compute_graph_info.output_shape.emplace_back(output_desc.GetShape().GetDims()); - tmp_compute_graph_info.output_data_type.emplace_back(output_desc.GetDataType()); - } + for (auto &tmp_task_desc : task_desc_info) { + // save op input and output info + auto op_desc = node->GetOpDesc(); + GE_CHECK_NOTNULL(op_desc); + prof_mgr.GetOpInputOutputInfo(op_desc, tmp_task_desc); } return SUCCESS; @@ -233,15 +194,8 @@ Status NodeDoneCallback::ProfilingReport() { return profiling_ret; } - std::vector compute_graph_info; - profiling_ret = GetGraphDescInfo(node, model, compute_graph_info); - if (profiling_ret != RT_ERROR_NONE) { - GELOGE(profiling_ret, "Get graph info of node[%s] failed.", node->GetName().c_str()); - return profiling_ret; - } - auto &profiling_manager = ProfilingManager::Instance(); - profiling_manager.ReportProfilingData(model->GetModelId(), task_desc_info, compute_graph_info); + profiling_manager.ReportProfilingData(model->GetModelId(), task_desc_info); return SUCCESS; } @@ -312,9 +266,9 @@ Status NodeDoneCallback::OnNodeDone() { RECORD_CALLBACK_EVENT(graph_context_, context_->GetNodeName(), "[Compute] End"); RECORD_CALLBACK_EVENT(graph_context_, context_->GetNodeName(), "[Callback] Start"); - auto dump_path = context_->GetDumpProperties().GetDumpPath(); - if (!dump_path.empty()) { - GELOGI("Start to dump dynamic shape,dump_path is %s", dump_path.c_str()); + const DumpProperties &dump_properties = context_->GetDumpProperties(); + if (dump_properties.IsDumpOpen() || context_->IsOverFlow()) { + GELOGI("Start to dump dynamic shape op"); GE_CHK_STATUS_RET(DumpDynamicNode(), "Failed to dump dynamic node"); } @@ -323,6 +277,8 @@ Status NodeDoneCallback::OnNodeDone() { node_item.NodeName().c_str()); } + // release workspace + context_->ReleaseWorkspace(); // release inputs for (int i = 0; i < context_->NumInputs(); ++i) { context_->ReleaseInput(i); diff --git a/ge/hybrid/hybrid_davinci_model.cc b/ge/hybrid/hybrid_davinci_model.cc index 7009331c..430dfa85 100755 --- a/ge/hybrid/hybrid_davinci_model.cc +++ b/ge/hybrid/hybrid_davinci_model.cc @@ -76,6 +76,11 @@ class HybridDavinciModel::Impl { executor_.SetDeviceId(device_id); } + void SetModelName(const string &model_name) { + model_.SetModelName(model_name); + executor_.SetModelName(model_name); + } + uint64_t GetSessionId() { return model_.GetSessionId(); } @@ -176,6 +181,12 @@ void HybridDavinciModel::SetDeviceId(uint32_t device_id) { } } +void HybridDavinciModel::SetModelName(const string &model_name) { + if (impl_ != nullptr) { + impl_->SetModelName(model_name); + } +} + Status HybridDavinciModel::GetDynamicBatchInfo(std::vector> &batch_info, int32_t &dynamic_type) { GE_CHECK_NOTNULL(impl_); return impl_->GetDynamicBatchInfo(batch_info, dynamic_type); diff --git a/ge/hybrid/hybrid_davinci_model.h b/ge/hybrid/hybrid_davinci_model.h index 369c732a..74dca9ed 100644 --- a/ge/hybrid/hybrid_davinci_model.h +++ b/ge/hybrid/hybrid_davinci_model.h @@ -57,6 +57,8 @@ class HybridDavinciModel { void SetDeviceId(uint32_t device_id); + void SetModelName(const string &model_name); + uint64_t GetSessionId(); Status GetDynamicBatchInfo(std::vector> &batch_info, int32_t &dynamic_type); diff --git a/ge/hybrid/hybrid_davinci_model_stub.cc b/ge/hybrid/hybrid_davinci_model_stub.cc index 366845c5..5b10fb7a 100644 --- a/ge/hybrid/hybrid_davinci_model_stub.cc +++ b/ge/hybrid/hybrid_davinci_model_stub.cc @@ -61,6 +61,9 @@ void HybridDavinciModel::SetModelId(uint32_t model_id) { void HybridDavinciModel::SetDeviceId(uint32_t device_id) { } +void HybridDavinciModel::SetModelName(const string &model_name) { +} + uint64_t HybridDavinciModel::GetSessionId() { return 0; } diff --git a/ge/hybrid/model/hybrid_model.h b/ge/hybrid/model/hybrid_model.h index 1f973d1e..3e5bd635 100644 --- a/ge/hybrid/model/hybrid_model.h +++ b/ge/hybrid/model/hybrid_model.h @@ -61,10 +61,22 @@ class HybridModel { device_id_ = device_id; } + uint32_t GetDeviceId() { + return device_id_; + } + void SetModelId(uint32_t model_id) { model_id_ = model_id; } + void SetModelName(const string &model_name) { + om_name_ = model_name; + } + + const std::string &GetOmName() const { + return om_name_; + } + uint32_t GetModelId() const { return model_id_; } @@ -143,6 +155,7 @@ class HybridModel { uint8_t *var_mem_base_ = nullptr; std::unique_ptr weight_buffer_; RuntimeParam root_runtime_param_; + string om_name_; }; } // namespace hybrid } // namespace ge diff --git a/ge/hybrid/model/hybrid_model_builder.cc b/ge/hybrid/model/hybrid_model_builder.cc index d2862553..ac57b2ea 100755 --- a/ge/hybrid/model/hybrid_model_builder.cc +++ b/ge/hybrid/model/hybrid_model_builder.cc @@ -42,6 +42,7 @@ const uint64_t kProfilingFpStartLogid = 1U; const uint64_t kProfilingBpEndLogid = 2U; const uint64_t kProfilingIterEndLogid = 65535U; const int kBytes = 8; +const uint32_t kStringHeadElems = 2; const char *const kOwnerGraphIsUnknown = "OwnerGraphIsUnknown"; const char *const kProfilingGraph = "ProfilingGraph"; const char *const kProfilingFpNode = "ProfilingFpNode"; @@ -852,13 +853,13 @@ Status HybridModelBuilder::HandleDtString(const GeTensor &tensor, void *var_addr auto &mutable_tensor = const_cast(tensor); uint64_t *buff = reinterpret_cast(mutable_tensor.MutableData().data()); - GE_CHK_BOOL_RET_STATUS(ge::CheckInt64Uint32MulOverflow(elem_num, kBytes) == SUCCESS, FAILED, + GE_CHK_BOOL_RET_STATUS(ge::CheckInt64Uint32MulOverflow(elem_num, kBytes * kStringHeadElems) == SUCCESS, FAILED, "Shape size is invalid"); - auto offset = static_cast(elem_num * kBytes); + auto offset = static_cast(elem_num * kBytes * kStringHeadElems); auto hbm_raw_data_base_addr = static_cast(reinterpret_cast(var_addr) + offset); for (int64_t i = elem_num - 1; i >= 0; --i) { - buff[i] = hbm_raw_data_base_addr + (buff[i] - buff[0]); + buff[i * kStringHeadElems] = hbm_raw_data_base_addr + (buff[i * kStringHeadElems] - buff[0]); } } @@ -1131,23 +1132,26 @@ Status HybridModelBuilder::IndexTaskDefs(const ComputeGraphPtr &sub_graph, const op_index = task_def.kernel_ex().op_index(); } else if (task_type == RT_MODEL_TASK_HCCL) { op_index = task_def.kernel_hccl().op_index(); + } else if (task_type == RT_MODEL_TASK_ALL_KERNEL) { + op_index = task_def.kernel_with_handle().context().op_index(); } else { GELOGD("Skip task type: %d", static_cast(task_type)); continue; } + GELOGD("op_index = %u, task_type = %d.", op_index, task_type); auto iter = node_map.find(op_index); if (iter == node_map.end()) { - GELOGE(INTERNAL_ERROR, "Failed to get node by index = %u", op_index); + GELOGE(INTERNAL_ERROR, "Failed to get node by op_index = %u.", op_index); return INTERNAL_ERROR; } auto &node = iter->second; - if (task_type == RT_MODEL_TASK_KERNEL) { + if (task_type == RT_MODEL_TASK_KERNEL || task_type == RT_MODEL_TASK_ALL_KERNEL) { ge_model->GetTBEKernelStore().LoadTBEKernelBinToOpDesc(node->GetOpDesc()); } - GELOGD("Task loaded for node: %s, task type = %d, op_index = %u", node->GetName().c_str(), task_type, op_index); + GELOGD("Task loaded for node: %s, task type = %d, op_index = %u.", node->GetName().c_str(), task_type, op_index); hybrid_model_.task_defs_[node].emplace_back(task_def); } @@ -1199,6 +1203,8 @@ Status HybridModelBuilder::IndexTaskDefs() { op_index = task_def.kernel_ex().op_index(); } else if (task_type == RT_MODEL_TASK_HCCL) { op_index = task_def.kernel_hccl().op_index(); + } else if (task_type == RT_MODEL_TASK_ALL_KERNEL) { + op_index = task_def.kernel_with_handle().context().op_index(); } else { GELOGD("Skip task type: %d", static_cast(task_type)); continue; @@ -1211,7 +1217,7 @@ Status HybridModelBuilder::IndexTaskDefs() { } auto &node = iter->second; - if (task_type == RT_MODEL_TASK_KERNEL) { + if (task_type == RT_MODEL_TASK_KERNEL || task_type == RT_MODEL_TASK_ALL_KERNEL) { ge_model->GetTBEKernelStore().LoadTBEKernelBinToOpDesc(node->GetOpDesc()); } diff --git a/ge/hybrid/node_executor/aicore/aicore_node_executor.cc b/ge/hybrid/node_executor/aicore/aicore_node_executor.cc index 3174df80..119db0af 100755 --- a/ge/hybrid/node_executor/aicore/aicore_node_executor.cc +++ b/ge/hybrid/node_executor/aicore/aicore_node_executor.cc @@ -17,6 +17,7 @@ #include "aicore_node_executor.h" #include "framework/common/taskdown_common.h" #include "hybrid/executor/hybrid_execution_context.h" +#include "external/runtime/rt_error_codes.h" namespace ge { namespace hybrid { @@ -66,7 +67,7 @@ Status AiCoreNodeExecutor::LoadTask(const HybridModel &model, const NodePtr &nod } AiCoreTaskBuilder builder(node->GetOpDesc(), *task_defs); - std::unique_ptr node_task; + std::unique_ptr node_task; GE_CHK_STATUS_RET(builder.BuildTask(node_task, true, is_single_op), "[%s] Failed to build op tasks.", node->GetName().c_str()); task = std::move(node_task); @@ -99,7 +100,7 @@ Status AiCoreNodeExecutor::GenNodeKey(const NodePtr &node, std::string &node_key return SUCCESS; } -bool AiCoreNodeTaskRegistry::AddTask(const std::string &node_key, const std::shared_ptr task) { +bool AiCoreNodeTaskRegistry::AddTask(const std::string &node_key, const std::shared_ptr &task) { GE_CHECK_NOTNULL(task); std::lock_guard lock(mutex_); auto iter = reg_node_tasks_.find(node_key); @@ -111,7 +112,7 @@ bool AiCoreNodeTaskRegistry::AddTask(const std::string &node_key, const std::sha return ret.second; } -std::shared_ptr AiCoreNodeTaskRegistry::GetTask(const std::string &node_key) { +std::shared_ptr AiCoreNodeTaskRegistry::GetTask(const std::string &node_key) { std::lock_guard lock(mutex_); auto iter = reg_node_tasks_.find(node_key); return (iter != reg_node_tasks_.end()) ? iter->second : nullptr; @@ -140,9 +141,12 @@ Status AiCoreNodeExecutor::CompileTask(const HybridModel &model, auto node_key = std::to_string(model.GetModelId()) + "/" + shape_key; GELOGD("NodeKey for %s = %s", node->GetName().c_str(), node_key.c_str()); - task = registry.GetTask(node_key); - if (task != nullptr) { + auto aicore_task = registry.GetTask(node_key); + if (aicore_task != nullptr) { + // The workspaces needed by a operator may differ with different shapes + op_desc->SetWorkspaceBytes(aicore_task->GetWorkspaceSizes()); GELOGI("AiCoreNodeExecutor(%s) CompileTask Skip.", node->GetName().c_str()); + task = std::move(aicore_task); return SUCCESS; } @@ -153,16 +157,18 @@ Status AiCoreNodeExecutor::CompileTask(const HybridModel &model, GELOGD("successfully generated task_defs: %s", node->GetName().c_str()); AiCoreTaskBuilder builder(node->GetOpDesc(), task_defs); - std::unique_ptr node_task; + std::unique_ptr node_task; GE_CHK_STATUS_RET(builder.BuildTask(node_task, false), "[%s] Failed to build op tasks.", node->GetName().c_str()); - task = std::move(node_task); + node_task->SetWorkspaceSizes(op_desc->GetWorkspaceBytes()); + aicore_task = std::move(node_task); GELOGD("successfully created node task: %s", node->GetName().c_str()); - if (!registry.AddTask(node_key, task)) { + if (!registry.AddTask(node_key, aicore_task)) { GELOGE(INTERNAL_ERROR, "Add NodeTask failed, op name = %s.", node->GetName().c_str()); return INTERNAL_ERROR; } + task = std::move(aicore_task); GELOGI("AiCoreNodeExecutor(%s) CompileTask End.", node->GetName().c_str()); return SUCCESS; } @@ -184,17 +190,17 @@ Status AiCoreNodeTask::ExecuteAsync(TaskContext &context, std::function } RECORD_EXECUTION_EVENT(context.GetExecutionContext(), context.GetNodeName(), "[AiCoreNodeLaunchKernel] Start"); GE_CHK_STATUS_RET_NOLOG((*it)->LaunchKernel(context.GetStream())); + GE_CHK_STATUS_RET_NOLOG(CheckOverflow(context)); // save profiling data uint32_t task_id = 0; uint32_t stream_id = 0; rtError_t rt_ret = rtGetTaskIdAndStreamID(&task_id, &stream_id); // must be called after Launch kernel if (rt_ret != RT_ERROR_NONE) { - GELOGE(rt_ret, "Get task_id and stream_id failed."); - return FAILED; + GELOGE(RT_FAILED, "Get task_id and stream_id failed, ret: 0x%X.", rt_ret); + return RT_ERROR_TO_GE_STATUS(rt_ret); } GELOGD("Aicore node[%s] task_id: %u, stream_id: %u.", context.GetNodeName(), task_id, stream_id); (void)context.SaveProfilingTaskDescInfo(task_id, stream_id, kTaskTypeAicore, (*it)->GetBlockDim()); - (void)context.SaveProfilingGraphDescInfo(task_id, stream_id); RECORD_EXECUTION_EVENT(context.GetExecutionContext(), context.GetNodeName(), "[AiCoreNodeLaunchKernel] End"); RECORD_EXECUTION_EVENT(context.GetExecutionContext(), context.GetNodeName(), "[AiCoreNodeLaunchKernel] End"); } @@ -247,6 +253,33 @@ bool AiCoreNodeTask::IsSupportDynamicShape() { return true; } +const vector &AiCoreNodeTask::GetWorkspaceSizes() const { + return workspace_sizes_; +} + +void AiCoreNodeTask::SetWorkspaceSizes(const vector &workspace_sizes) { + workspace_sizes_ = workspace_sizes; +} + +Status AiCoreNodeTask::CheckOverflow(TaskContext &context) { + const DumpProperties &dump_properties = context.GetDumpProperties(); + if (dump_properties.IsOpDebugOpen()) { + GELOGD("Op %s is doing overflow check in hybrid engine", context.GetNodeName()); + auto rt_ret = rtStreamSynchronize(context.GetStream()); + if (rt_ret == ACL_ERROR_RT_AICORE_OVER_FLOW) { + context.SetOverFlow(true); + GELOGW("Dynamic shape op %s is over flow", context.GetNodeName()); + return SUCCESS; + } else if (rt_ret != RT_ERROR_NONE) { + GELOGE(rt_ret, "rtstreamsynchronize failed"); + return RT_ERROR_TO_GE_STATUS(rt_ret); + } + return SUCCESS; + } + GELOGD("Opdebug is not open in hybrid engine"); + return SUCCESS; +} + TaskCompilerFactory &TaskCompilerFactory::GetInstance() { static TaskCompilerFactory instance; return instance; diff --git a/ge/hybrid/node_executor/aicore/aicore_node_executor.h b/ge/hybrid/node_executor/aicore/aicore_node_executor.h index f036ce85..c352764d 100755 --- a/ge/hybrid/node_executor/aicore/aicore_node_executor.h +++ b/ge/hybrid/node_executor/aicore/aicore_node_executor.h @@ -24,7 +24,6 @@ namespace ge { namespace hybrid { - class TaskCompiler { public: TaskCompiler() = default; @@ -42,11 +41,11 @@ class AiCoreNodeTaskRegistry { return instance; } - std::shared_ptr GetTask(const std::string &node_key); - bool AddTask(const std::string &node_key, const std::shared_ptr task); + std::shared_ptr GetTask(const std::string &node_key); + bool AddTask(const std::string &node_key, const std::shared_ptr &task); private: AiCoreNodeTaskRegistry() = default; - std::map> reg_node_tasks_; + std::map> reg_node_tasks_; std::mutex mutex_; }; @@ -59,8 +58,13 @@ class AiCoreNodeTask : public NodeTask { Status UpdateArgs(TaskContext &context) override; Status ExecuteAsync(TaskContext &context, std::function done_callback) override; + + const vector &GetWorkspaceSizes() const; + void SetWorkspaceSizes(const vector &workspace_sizes); private: + Status CheckOverflow(TaskContext &context); std::vector> tasks_; + std::vector workspace_sizes_; }; class AiCoreNodeExecutor : public NodeExecutor { diff --git a/ge/hybrid/node_executor/aicore/aicore_op_task.cc b/ge/hybrid/node_executor/aicore/aicore_op_task.cc index 6ab62f3f..07c2ddb5 100644 --- a/ge/hybrid/node_executor/aicore/aicore_op_task.cc +++ b/ge/hybrid/node_executor/aicore/aicore_op_task.cc @@ -33,6 +33,20 @@ constexpr char const *kAttrOpParamSize = "op_para_size"; constexpr char const *kAttrAtomicOpParamSize = "atomic_op_para_size"; } // namespace +TbeHandleHolder::TbeHandleHolder(void *bin_handle) + : bin_handle_(bin_handle) {} + +TbeHandleHolder::~TbeHandleHolder() { + if (bin_handle_ != nullptr) { + GE_CHK_RT(rtDevBinaryUnRegister(bin_handle_)); + } +} + +bool TbeHandleRegistry::AddHandle(std::unique_ptr &&holder) { + auto ret = registered_handles_.emplace(std::move(holder)); + return ret.second; +} + Status AiCoreOpTask::Init(const OpDesc &op_desc, const domi::TaskDef &task_def) { GE_CHK_STATUS_RET_NOLOG(InitWithTaskDef(op_desc, task_def)); GE_CHK_STATUS_RET_NOLOG(InitTilingInfo(op_desc)); @@ -69,7 +83,7 @@ Status AiCoreOpTask::RegisterTbeHandle(const OpDesc &op_desc) { if (rt_ret != RT_ERROR_NONE || is_single_op_) { void *bin_handle = nullptr; if (!kernel_store.FindTBEHandle(stub_name_.c_str(), bin_handle)) { - GELOGI("TBE: can't find the kernel_name[%s] in HandleMap", stub_name_.c_str()); + GELOGI("TBE: can't find the binfile_key[%s] in HandleMap", stub_name_.c_str()); rtDevBinary_t binary; std::string json_string; GE_IF_BOOL_EXEC(AttrUtils::GetStr(op_desc_ptr, TVM_ATTR_NAME_MAGIC, json_string), @@ -96,7 +110,7 @@ Status AiCoreOpTask::RegisterTbeHandle(const OpDesc &op_desc) { GE_IF_BOOL_EXEC(!meta_data.empty(), GE_CHK_RT_RET(rtMetadataRegister(bin_handle, meta_data.c_str()))); kernel_store.StoreTBEHandle(stub_name_.c_str(), bin_handle, tbe_kernel); } else { - GELOGI("TBE: find the kernel_name[%s] in HandleMap", stub_name_.c_str()); + GELOGI("TBE: find the binfile_key[%s] in HandleMap", stub_name_.c_str()); kernel_store.ReferTBEHandle(stub_name_.c_str()); } std::string kernel_name; @@ -108,25 +122,63 @@ Status AiCoreOpTask::RegisterTbeHandle(const OpDesc &op_desc) { return SUCCESS; } -Status AiCoreOpTask::InitWithTaskDef(const OpDesc &op_desc, const domi::TaskDef &task_def) { - GE_CHK_STATUS_RET(ValidateTaskDef(task_def), - "[%s] Failed to validate task def: [%s]", - op_desc.GetName().c_str(), - task_def.DebugString().c_str()); +Status AiCoreOpTask::RegisterKernelHandle(const OpDesc &op_desc) { + TbeHandleRegistry ®istry = TbeHandleRegistry::GetInstance(); + auto tbe_kernel = op_desc.TryGetExtAttr(OP_EXTATTR_NAME_TBE_KERNEL, TBEKernelPtr()); + if (tbe_kernel == nullptr) { + GELOGE(INTERNAL_ERROR, "TBE: %s can't find tvm bin file!", op_desc.GetName().c_str()); + return INTERNAL_ERROR; + } + void *bin_handle = nullptr; + GELOGD("Start to register kernel for node: [%s].", op_desc.GetName().c_str()); + rtDevBinary_t binary; + std::string json_string; + GE_IF_BOOL_EXEC(AttrUtils::GetStr(&op_desc, TVM_ATTR_NAME_MAGIC, json_string), + GELOGI("Get original type of session_graph_id.")); + if (json_string == "RT_DEV_BINARY_MAGIC_ELF_AICPU") { + binary.magic = RT_DEV_BINARY_MAGIC_ELF_AICPU; + } else if (json_string == "RT_DEV_BINARY_MAGIC_ELF") { + binary.magic = RT_DEV_BINARY_MAGIC_ELF; + } else if (json_string == "RT_DEV_BINARY_MAGIC_ELF_AIVEC") { + binary.magic = RT_DEV_BINARY_MAGIC_ELF_AIVEC; + } else { + GELOGE(PARAM_INVALID, "TBE: Invalid parameter magic number! json: %s", json_string.c_str()); + return PARAM_INVALID; + } + binary.version = 0; + binary.data = tbe_kernel->GetBinData(); + binary.length = tbe_kernel->GetBinDataSize(); + GELOGI("TBE: binary.length: %lu", binary.length); + GE_CHK_RT_RET(rtRegisterAllKernel(&binary, &bin_handle)); + handle_ = bin_handle; + auto holder = std::unique_ptr(new (std::nothrow) TbeHandleHolder(handle_)); + if (holder == nullptr) { + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "create HandleHodler failed."); + return ACL_ERROR_GE_MEMORY_ALLOCATION; + } + if (!registry.AddHandle(std::move(holder))) { + GELOGE(ACL_ERROR_GE_INTERNAL_ERROR, "Add handle failed. node name = %s", op_desc.GetName().c_str()); + return ACL_ERROR_GE_INTERNAL_ERROR; + } + return SUCCESS; +} + +Status AiCoreOpTask::InitWithKernelDef(const OpDesc &op_desc, const domi::TaskDef &task_def) { const domi::KernelDef &kernel_def = task_def.kernel(); const domi::KernelContext &context = kernel_def.context(); stub_name_ = kernel_def.stub_func(); - GE_CHK_STATUS_RET(RegisterTbeHandle(op_desc)); - GE_CHK_RT_RET(rtGetFunctionByName(stub_name_.c_str(), &stub_func_)); args_size_ = kernel_def.args_size(); block_dim_ = kernel_def.block_dim(); - // malloc args memory args_.reset(new(std::nothrow) uint8_t[args_size_]); GE_CHECK_NOTNULL(args_); + if (kernel_def.args().size() < args_size_) { + GELOGE(INTERNAL_ERROR, "args size of kernel_def is smaller than args_size_"); + return INTERNAL_ERROR; + } errno_t err = memcpy_s(args_.get(), args_size_, kernel_def.args().data(), args_size_); if (err != EOK) { GELOGE(INTERNAL_ERROR, "AiCoreTask memcpy args failed."); @@ -157,19 +209,75 @@ Status AiCoreOpTask::InitWithTaskDef(const OpDesc &op_desc, const domi::TaskDef block_dim_, arg_base_, args_size_); + return SUCCESS; +} + +Status AiCoreOpTask::InitWithKernelDefWithHandle(const OpDesc &op_desc, const domi::TaskDef &task_def) { + const domi::KernelDefWithHandle &kernel_with_handle = task_def.kernel_with_handle(); + const domi::KernelContext &context = kernel_with_handle.context(); + + GE_CHK_STATUS_RET(RegisterKernelHandle(op_desc)); + original_kernel_key_ = kernel_with_handle.original_kernel_key() + "_"; + node_info_ = kernel_with_handle.node_info() + "/"; + args_size_ = kernel_with_handle.args_size(); + block_dim_ = kernel_with_handle.block_dim(); + // malloc args memory + args_.reset(new(std::nothrow) uint8_t[args_size_]); + GE_CHECK_NOTNULL(args_); + if (kernel_with_handle.args().size() < args_size_) { + GELOGE(INTERNAL_ERROR, "args size of kernel_def is smaller than args_size_"); + return INTERNAL_ERROR; + } + errno_t err = memcpy_s(args_.get(), args_size_, kernel_with_handle.args().data(), args_size_); + + if (err != EOK) { + GELOGE(INTERNAL_ERROR, "AiCoreTask memcpy args failed."); + return INTERNAL_ERROR; + } + if (context.args_offset().size() < sizeof(uint16_t)) { + GELOGE(INTERNAL_ERROR, "Invalid args_offset, size = %zu.", context.args_offset().size()); + return INTERNAL_ERROR; + } + + const auto *args_offset_buffer = reinterpret_cast(context.args_offset().data()); + uint32_t offset = *args_offset_buffer; + if (offset > args_size_) { + GELOGE(INTERNAL_ERROR, + "[%s] Arg offset out of range. offset = %u, arg size = %u", + GetName().c_str(), + offset, + args_size_); + return INTERNAL_ERROR; + } + + arg_base_ = reinterpret_cast(args_.get() + offset); + max_arg_count_ = (args_size_ - offset) / sizeof(void *); + return SUCCESS; +} + +Status AiCoreOpTask::InitWithTaskDef(const OpDesc &op_desc, const domi::TaskDef &task_def) { + GE_CHK_STATUS_RET(ValidateTaskDef(task_def), + "[%s] Failed to validate task def: [%s]", + op_desc.GetName().c_str(), + task_def.DebugString().c_str()); + + if (task_def.type() != RT_MODEL_TASK_ALL_KERNEL) { + GE_CHK_STATUS_RET(InitWithKernelDef(op_desc, task_def)); + } else { + GE_CHK_STATUS_RET(InitWithKernelDefWithHandle(op_desc, task_def)); + } return SUCCESS; } Status AiCoreOpTask::ValidateTaskDef(const domi::TaskDef &task_def) { auto task_type = static_cast(task_def.type()); - if (task_type != RT_MODEL_TASK_KERNEL) { + if (task_type != RT_MODEL_TASK_KERNEL && task_type != RT_MODEL_TASK_ALL_KERNEL) { GELOGE(INTERNAL_ERROR, "Invalid task type (%d) in AiCore CreateTask.", static_cast(task_type)); return INTERNAL_ERROR; } - - const domi::KernelDef &kernel_def = task_def.kernel(); - const domi::KernelContext &context = kernel_def.context(); + const auto &context = task_type == RT_MODEL_TASK_KERNEL ? task_def.kernel().context() : + task_def.kernel_with_handle().context(); auto kernel_type = static_cast(context.kernel_type()); if (kernel_type != ccKernelType::TE) { GELOGE(INTERNAL_ERROR, "Invalid kernel type(%d) in AiCore TaskDef.", static_cast(kernel_type)); @@ -180,10 +288,9 @@ Status AiCoreOpTask::ValidateTaskDef(const domi::TaskDef &task_def) { } Status AiCoreOpTask::PrepareWithShape(TaskContext &context) { - if (tiling_buffer_ != nullptr) { + if (is_dynamic_) { return UpdateTilingInfo(context); } - return SUCCESS; } @@ -212,8 +319,14 @@ Status AiCoreOpTask::UpdateTilingInfo(TaskContext &context) { clear_atomic_ = tiling_info.clear_atomic; tiling_data_ = tiling_info.tiling_data.str(); + tiling_key_ = tiling_info.tiling_key; + GELOGD("Successfully getting [tiling_key] : %u", tiling_key_); if (tiling_data_.empty()) { - GELOGE(INTERNAL_ERROR, "[%s] Tiling data is empty.", stub_name_.c_str()); + GELOGD("[%s] Tiling data is empty.", op_desc->GetName().c_str()); + return SUCCESS; + } + if (tiling_buffer_ == nullptr) { + GELOGE(INTERNAL_ERROR, "tiling_buffer is nullptr while tiling_data is not empty!"); return INTERNAL_ERROR; } @@ -238,6 +351,9 @@ Status AiCoreOpTask::CalcTilingInfo(const NodePtr &node, OpRunInfo &tiling_info) GE_CHK_STATUS_RET(OpParaCalculate(*node, tiling_info), "Failed calc tiling data of node %s.", node->GetName().c_str()); + if (is_single_op_) { + tiling_info.clear_atomic = false; + } GELOGD("[%s] Done invoking OpParaCalculate successfully.", node->GetName().c_str()); return SUCCESS; } @@ -296,16 +412,26 @@ Status AiCoreOpTask::UpdateArgs(TaskContext &task_context) { } Status AiCoreOpTask::LaunchKernel(rtStream_t stream) { - GELOGD("AiCoreOpTask LaunchKernel Start (task = %s, block_dim = %u).", stub_name_.c_str(), block_dim_); - GE_CHK_RT_RET(rtKernelLaunch(stub_func_, block_dim_, args_.get(), args_size_, nullptr, stream)); - GELOGD("AiCoreOpTask LaunchKernel End (task = %s, block_dim = %u).", stub_name_.c_str(), block_dim_); + if (handle_ != nullptr) { + std::string dev_func = original_kernel_key_ + std::to_string(tiling_key_); + std::string kernel_info = node_info_ + std::to_string(tiling_key_); + GELOGD("AiCoreOpTask rtKernelLaunchWithHandle Start (dev_func = %s, block_dim = %u).", dev_func.c_str(), + block_dim_); + GE_CHK_RT_RET(rtKernelLaunchWithHandle(handle_, dev_func.c_str(), block_dim_, args_.get(), args_size_, nullptr, + stream, kernel_info.c_str())); + GELOGD("AiCoreOpTask rtKernelLaunchWithHandle End (dev_func = %s, block_dim = %u).", dev_func.c_str(), + block_dim_); + } else { + GELOGD("AiCoreOpTask LaunchKernel Start (task = %s, block_dim = %u).", stub_name_.c_str(), block_dim_); + GE_CHK_RT_RET(rtKernelLaunch(stub_func_, block_dim_, args_.get(), args_size_, nullptr, stream)); + GELOGD("AiCoreOpTask LaunchKernel End (task = %s, block_dim = %u).", stub_name_.c_str(), block_dim_); + } return SUCCESS; } Status AiCoreOpTask::InitTilingInfo(const OpDesc &op_desc) { - bool dynamic_supported = false; - (void) AttrUtils::GetBool(op_desc, kAttrSupportDynamicShape, dynamic_supported); - if (!dynamic_supported) { + (void) AttrUtils::GetBool(op_desc, kAttrSupportDynamicShape, is_dynamic_); + if (!is_dynamic_) { GELOGD("[%s] Dynamic shape is not supported.", op_desc.GetName().c_str()); return SUCCESS; } @@ -314,22 +440,26 @@ Status AiCoreOpTask::InitTilingInfo(const OpDesc &op_desc) { int64_t max_size = -1; (void) AttrUtils::GetInt(op_desc, GetKeyForOpParamSize(), max_size); GELOGD("Got op param size by key: %s, ret = %ld", GetKeyForOpParamSize().c_str(), max_size); - if (max_size <= 0) { + if (max_size < 0) { GELOGE(PARAM_INVALID, "[%s] Invalid op_param_size: %ld.", op_desc.GetName().c_str(), max_size); return PARAM_INVALID; } auto allocator = NpuMemoryAllocator::GetAllocator(); GE_CHECK_NOTNULL(allocator); - tiling_buffer_ = TensorBuffer::Create(allocator, static_cast(max_size)); - GE_CHECK_NOTNULL(tiling_buffer_); + if (max_size > 0) { + tiling_buffer_ = TensorBuffer::Create(allocator, static_cast(max_size)); + GE_CHECK_NOTNULL(tiling_buffer_); + GELOGD("[%s] Done allocating tiling buffer, size=%ld.", op_desc.GetName().c_str(), max_size); + } else { + GELOGD("op_param_size is 0, no need to create tiling buffer."); + } - GELOGD("[%s] Done allocating tiling buffer, size=%ld.", op_desc.GetName().c_str(), max_size); return SUCCESS; } bool AiCoreOpTask::IsDynamicShapeSupported() { - return tiling_buffer_ != nullptr; + return is_dynamic_; } const std::string &AiCoreOpTask::GetName() const { diff --git a/ge/hybrid/node_executor/aicore/aicore_op_task.h b/ge/hybrid/node_executor/aicore/aicore_op_task.h index 69a74ea9..97df2335 100755 --- a/ge/hybrid/node_executor/aicore/aicore_op_task.h +++ b/ge/hybrid/node_executor/aicore/aicore_op_task.h @@ -28,6 +28,32 @@ namespace ge { namespace hybrid { +class TbeHandleHolder { + public: + explicit TbeHandleHolder(void *bin_handle); + ~TbeHandleHolder(); + + void SetBinHandle(void *bin_handle) { bin_handle_ = bin_handle; } + void *GetBinHandle() { return bin_handle_; } + + private: + friend class TbeHandleRegistry; + void *bin_handle_ = nullptr; +}; + +class TbeHandleRegistry { + public: + static TbeHandleRegistry &GetInstance() { + static TbeHandleRegistry instance; + return instance; + } + + bool AddHandle(std::unique_ptr &&holder); + + private: + std::set> registered_handles_; +}; + class AiCoreOpTask { public: AiCoreOpTask() = default; @@ -67,6 +93,9 @@ class AiCoreOpTask { Status InitWithTaskDef(const OpDesc &node, const domi::TaskDef &task_def); Status InitTilingInfo(const OpDesc &op_desc); Status RegisterTbeHandle(const OpDesc &op_desc); + Status RegisterKernelHandle(const OpDesc &op_desc); + Status InitWithKernelDef(const OpDesc &op_desc, const domi::TaskDef &task_def); + Status InitWithKernelDefWithHandle(const OpDesc &node, const domi::TaskDef &task_def); std::string stub_name_; void *stub_func_ = nullptr; @@ -76,6 +105,11 @@ class AiCoreOpTask { bool clear_atomic_ = true; bool is_single_op_ = false; std::vector output_indices_to_skip_; + string original_kernel_key_; + string node_info_; + uint32_t tiling_key_ = 0; + void *handle_ = nullptr; + bool is_dynamic_ = false; }; class AtomicAddrCleanOpTask : public AiCoreOpTask { diff --git a/ge/hybrid/node_executor/aicore/aicore_task_builder.cc b/ge/hybrid/node_executor/aicore/aicore_task_builder.cc index c3db378b..966e0910 100755 --- a/ge/hybrid/node_executor/aicore/aicore_task_builder.cc +++ b/ge/hybrid/node_executor/aicore/aicore_task_builder.cc @@ -37,7 +37,7 @@ AiCoreTaskBuilder::AiCoreTaskBuilder(const OpDescPtr &op_desc, const std::vector : op_desc_(op_desc), task_defs_(task_defs) { } -Status AiCoreTaskBuilder::BuildTask(std::unique_ptr &node_task, +Status AiCoreTaskBuilder::BuildTask(std::unique_ptr &node_task, bool ignore_failure_on_atomic, bool is_single_op) { GE_CHECK_NOTNULL(op_desc_); diff --git a/ge/hybrid/node_executor/aicore/aicore_task_builder.h b/ge/hybrid/node_executor/aicore/aicore_task_builder.h index 8f95df15..6a472a21 100755 --- a/ge/hybrid/node_executor/aicore/aicore_task_builder.h +++ b/ge/hybrid/node_executor/aicore/aicore_task_builder.h @@ -27,6 +27,7 @@ namespace ge { namespace hybrid { +class AiCoreNodeTask; class AiCoreKernelRegistry { public: ~AiCoreKernelRegistry() = default; @@ -47,7 +48,9 @@ class AiCoreTaskBuilder { AiCoreTaskBuilder(const OpDescPtr &op_desc, const std::vector &task_defs); ~AiCoreTaskBuilder() = default; - Status BuildTask(std::unique_ptr &node_task, bool ignore_failure_on_atomic, bool is_single_op = false); + Status BuildTask(std::unique_ptr &node_task, + bool ignore_failure_on_atomic, + bool is_single_op = false); private: bool ExpectAtomicAddrCleanTask(); diff --git a/ge/hybrid/node_executor/aicore/aicore_task_compiler.cc b/ge/hybrid/node_executor/aicore/aicore_task_compiler.cc index 26a41737..069c8699 100755 --- a/ge/hybrid/node_executor/aicore/aicore_task_compiler.cc +++ b/ge/hybrid/node_executor/aicore/aicore_task_compiler.cc @@ -61,11 +61,11 @@ Status AiCoreTaskCompiler::CompileOp(const NodePtr &node, std::vectorGetName().c_str()); - + auto op_desc = node->GetOpDesc(); + op_desc->SetWorkspaceBytes({}); GE_CHK_STATUS_RET_NOLOG(DoCompileOp(node)); GELOGD("successfully compiled op: %s", node->GetName().c_str()); - auto op_desc = node->GetOpDesc(); std::vector input_offsets(op_desc->GetInputsSize(), kMemBase); std::vector output_offsets(op_desc->GetOutputsSize(), kMemBase); op_desc->SetInputOffset(input_offsets); diff --git a/ge/hybrid/node_executor/aicpu/aicpu_ext_info.cc b/ge/hybrid/node_executor/aicpu/aicpu_ext_info.cc index b178b906..71a60f2f 100644 --- a/ge/hybrid/node_executor/aicpu/aicpu_ext_info.cc +++ b/ge/hybrid/node_executor/aicpu/aicpu_ext_info.cc @@ -67,6 +67,9 @@ Status AicpuExtInfoHandler::Parse(const std::string &ext_info) { case aicpu::FWKAdapter::FWK_ADPT_EXT_BITMAP: GE_CHK_STATUS_RET(ParseExtBitMap(aicpu_ext_info), "Parse ext bit map failed."); break; + case aicpu::FWKAdapter::FWK_ADPT_EXT_UPDATE_ADDR: + GE_CHK_STATUS_RET(ParseExtUpdateAddr(aicpu_ext_info), "Parse ext update_addr failed."); + break; default: GELOGD("Node[%s] ignore infoType=%d, infoLen=%u.", node_name_.c_str(), aicpu_ext_info->infoType, aicpu_ext_info->infoLen); @@ -153,6 +156,16 @@ Status AicpuExtInfoHandler::ParseExtBitMap(AicpuExtInfo *aicpu_ext_info) { return SUCCESS; } +Status AicpuExtInfoHandler::ParseExtUpdateAddr(AicpuExtInfo *aicpu_ext_info) { + GE_CHK_BOOL_RET_STATUS(aicpu_ext_info->infoLen == sizeof(uint32_t), PARAM_INVALID, + "Node[%s] parse update_addr info failed as infoLen must be %zu but %u.", + node_name_.c_str(), sizeof(uint32_t), aicpu_ext_info->infoLen); + + update_addr_ = reinterpret_cast(aicpu_ext_info->infoMsg); + GELOGI("Node[%s] update_addr info success infoLen=%u.", node_name_.c_str(), aicpu_ext_info->infoLen); + return SUCCESS; +} + Status AicpuExtInfoHandler::UpdateExecuteMode(bool flag) { if (bit_map_ == nullptr) { GELOGD("There is no bit_map in ext_info, no need update."); @@ -233,6 +246,10 @@ Status AicpuExtInfoHandler::GetOutputShapeAndType(uint32_t output_index, GeShape return SUCCESS; } +bool AicpuExtInfoHandler::IsNeedRefreshIOAddr() { + return update_addr_ != nullptr && *update_addr_ != static_cast(aicpu::FWKAdapter::FWK_ADPT_UPDATE_NULL); +} + Status AicpuExtInfoHandler::UpdateShapeAndType(const GeShape &shape, DataType data_type, AicpuShapeAndType *shape_and_type) { auto dim_num = shape.GetDimNum(); diff --git a/ge/hybrid/node_executor/aicpu/aicpu_ext_info.h b/ge/hybrid/node_executor/aicpu/aicpu_ext_info.h index e5b94452..01092204 100644 --- a/ge/hybrid/node_executor/aicpu/aicpu_ext_info.h +++ b/ge/hybrid/node_executor/aicpu/aicpu_ext_info.h @@ -61,6 +61,8 @@ class AicpuExtInfoHandler { Status GetOutputShapeAndType(uint32_t output_index, GeShape &shape, DataType &data_type); + bool IsNeedRefreshIOAddr(); + private: Status ParseExtShapeType(AicpuExtInfo *aicpu_ext_info); @@ -68,6 +70,7 @@ class AicpuExtInfoHandler { Status ParseExtOutputShape(AicpuExtInfo *aicpu_ext_info); Status ParseExtSessionInfo(AicpuExtInfo *aicpu_ext_info); Status ParseExtBitMap(AicpuExtInfo *aicpu_ext_info); + Status ParseExtUpdateAddr(AicpuExtInfo *aicpu_ext_info); static Status UpdateShapeAndType(const GeShape &shape, DataType data_type, @@ -84,6 +87,7 @@ class AicpuExtInfoHandler { UnknowShapeOpType unknown_type_; AicpuSessionInfo *session_info_ = nullptr; uint64_t *bit_map_ = nullptr; + uint32_t *update_addr_ = nullptr; std::unique_ptr ext_info_; size_t ext_info_len_ = 0; diff --git a/ge/hybrid/node_executor/aicpu/aicpu_node_executor.cc b/ge/hybrid/node_executor/aicpu/aicpu_node_executor.cc index 481507ae..1e2fbfe8 100755 --- a/ge/hybrid/node_executor/aicpu/aicpu_node_executor.cc +++ b/ge/hybrid/node_executor/aicpu/aicpu_node_executor.cc @@ -61,7 +61,9 @@ Status AicpuNodeTaskBase::InitExtInfo(const std::string &kernel_ext_info, int64_ GELOGD("To update aicpu_task ext_info session_info session_id to %lu", session_id); GE_CHK_STATUS_RET(aicpu_ext_handle_.UpdateSessionInfoSessionId(session_id), "UpdateSessionInfoSessionId failed."); - GE_CHK_STATUS_RET(aicpu_ext_handle_.UpdateExecuteMode(!node_item_->is_dynamic), "UpdateExecuteMode failed."); + + bool execute_mode = !aicpu_ext_handle_.IsNeedRefreshIOAddr() && !node_item_->is_dynamic; + GE_CHK_STATUS_RET(aicpu_ext_handle_.UpdateExecuteMode(execute_mode), "UpdateExecuteMode failed."); // copy task args buf GE_CHK_STATUS_RET(AllocTensorBuffer(aicpu_ext_handle_.GetExtInfoLen(), ext_info_addr_dev_), @@ -201,12 +203,11 @@ Status AicpuNodeTaskBase::ExecuteAsync(TaskContext &context, std::functionnode); + GE_CHECK_NOTNULL(task_defs); if (unknown_type_ == DEPEND_COMPUTE) { GE_CHK_STATUS_RET_NOLOG(SetMemCopyTask((*task_defs)[1])); } @@ -668,7 +670,7 @@ Status AicpuNodeTask::Init(const HybridModel &model) { auto kernel_type = static_cast(context.kernel_type()); if (kernel_type == ccKernelType::CUST_AI_CPU) { bool loaded = false; - GE_CHK_STATUS_RET(ModelManager::GetInstance()->LoadCustAicpuSo(op_desc, so_name, loaded), + GE_CHK_STATUS_RET(ModelManager::GetInstance()->LoadCustAicpuSo(op_desc, so_name, loaded), "load cust aicpu so failed."); if (!loaded) { GE_CHK_STATUS_RET(ModelManager::GetInstance()->LaunchCustAicpuSo(), "Launch cust aicpu so failed."); diff --git a/ge/hybrid/node_executor/compiledsubgraph/known_node_executor.cc b/ge/hybrid/node_executor/compiledsubgraph/known_node_executor.cc index 0837ffff..cf5ac851 100755 --- a/ge/hybrid/node_executor/compiledsubgraph/known_node_executor.cc +++ b/ge/hybrid/node_executor/compiledsubgraph/known_node_executor.cc @@ -124,7 +124,7 @@ Status KnownNodeTask::Init(TaskContext &context) { } if (!load_flag_) { auto dump_properties = context.GetDumpProperties(); - if (dump_properties.IsDumpOpen()) { + if (dump_properties.IsDumpOpen() || dump_properties.IsOpDebugOpen()) { davinci_model_->SetDumpProperties(dump_properties); void *global_step = nullptr; TensorValue *varible_global_step = context.GetVariable(NODE_NAME_GLOBAL_STEP); @@ -179,6 +179,7 @@ Status KnownNodeExecutor::LoadTask(const HybridModel &model, const NodePtr &node // set known node flag as true davinci_model->SetKnownNode(true); davinci_model->SetId(model.GetModelId()); + davinci_model->SetOmName(model.GetOmName()); // set model id as root node's node id davinci_model->SetSubModelId(node->GetOpDesc()->GetId()); GELOGD("KnownNodeExecutor::LoadTask node id %ld.", node->GetOpDesc()->GetId()); diff --git a/ge/hybrid/node_executor/task_context.cc b/ge/hybrid/node_executor/task_context.cc index e3cf5ae1..84dd8fd8 100644 --- a/ge/hybrid/node_executor/task_context.cc +++ b/ge/hybrid/node_executor/task_context.cc @@ -36,10 +36,6 @@ TaskContext::TaskContext(GraphExecutionContext *execution_context, TaskContext::~TaskContext() { GELOGD("[%s] TaskContext destroyed.", node_item_->NodeName().c_str()); - for (auto ws_addr : workspaces_) { - execution_context_->allocator->Deallocate(ws_addr); - } - // release output for (int i = 0; i < NumOutputs(); ++i) { auto output_tensor = MutableOutput(i); @@ -49,6 +45,13 @@ TaskContext::~TaskContext() { } } +void TaskContext::ReleaseWorkspace() { + GELOGD("[%s] Start ReleaseWorkspace.", node_item_->NodeName().c_str()); + for (auto ws_addr : workspaces_) { + execution_context_->allocator->Deallocate(ws_addr); + } +} + std::unique_ptr TaskContext::Create(NodeState *node_state, GraphExecutionContext *execution_context, SubgraphContext *subgraph_context) { @@ -347,6 +350,14 @@ void TaskContext::SetStreamId(uint32_t stream_id) { stream_id_ = stream_id; } +void TaskContext::SetOverFlow(bool is_over_flow) { + is_over_flow_ = is_over_flow; +} + +bool TaskContext::IsOverFlow() { + return is_over_flow_; +} + Status TaskContext::AllocateWorkspace(size_t size, void **buffer, void *ori_addr) { GE_CHECK_NOTNULL(buffer); if (ori_addr == nullptr) { @@ -512,21 +523,21 @@ Status TaskContext::Synchronize() { } Status TaskContext::SaveProfilingTaskDescInfo(uint32_t task_id, uint32_t stream_id, - uint32_t task_type, uint32_t block_dim) { + const std::string &task_type, uint32_t block_dim) { if (ProfilingManager::Instance().ProfilingModelExecuteOn()) { const NodeItem &node_item = GetNodeItem(); auto op_desc = node_item.GetOpDesc(); GE_CHECK_NOTNULL(op_desc); - const GraphExecutionContext * graph_context = GetExecutionContext(); + const GraphExecutionContext *graph_context = GetExecutionContext(); GE_CHECK_NOTNULL(graph_context); const HybridModel *model = graph_context->model; GE_CHECK_NOTNULL(model); - std::string op_name = op_desc->GetName(); std::string dynamic_model_name = model->GetModelName(); TaskDescInfo tmp_task_desc_info; tmp_task_desc_info.model_name = dynamic_model_name; - tmp_task_desc_info.op_name = op_name; + tmp_task_desc_info.op_name = op_desc->GetName(); + tmp_task_desc_info.op_type = op_desc->GetType(); tmp_task_desc_info.block_dim = block_dim; tmp_task_desc_info.task_type = task_type; tmp_task_desc_info.task_id = task_id; @@ -543,31 +554,5 @@ NodeState *TaskContext::GetNodeState() const { return node_state_; } -Status TaskContext::SaveProfilingGraphDescInfo(uint32_t task_id, uint32_t stream_id) { - if (ProfilingManager::Instance().ProfilingModelExecuteOn()) { - const NodeItem &node_item = GetNodeItem(); - auto op_desc = node_item.GetOpDesc(); - GE_CHECK_NOTNULL(op_desc); - const GraphExecutionContext * graph_context = GetExecutionContext(); - GE_CHECK_NOTNULL(graph_context); - const HybridModel *model = graph_context->model; - GE_CHECK_NOTNULL(model); - - std::string dynamic_model_name = model->GetModelName(); - auto op_mode = static_cast(domi::ImplyType::INVALID); - if (AttrUtils::GetInt(op_desc, ATTR_NAME_IMPLY_TYPE, op_mode) && - op_mode == static_cast(domi::ImplyType::TVM)) { - ComputeGraphDescInfo tmp_compute_graph_info; - tmp_compute_graph_info.model_name = dynamic_model_name; - tmp_compute_graph_info.op_name = op_desc->GetName(); - tmp_compute_graph_info.op_type = op_desc->GetType(); - tmp_compute_graph_info.task_id = task_id; - tmp_compute_graph_info.stream_id = stream_id; - compute_graph_info.emplace_back(tmp_compute_graph_info); - } - } - return SUCCESS; -} - } // namespace hybrid } // namespace ge diff --git a/ge/hybrid/node_executor/task_context.h b/ge/hybrid/node_executor/task_context.h index dc4ff058..e00c5048 100644 --- a/ge/hybrid/node_executor/task_context.h +++ b/ge/hybrid/node_executor/task_context.h @@ -56,6 +56,7 @@ class TaskContext { void ReleaseInputsAndOutputs(); bool NeedCallback(); void ReleaseInput(int index); + void ReleaseWorkspace(); const TensorValue *GetInput(int index) const; const TensorValue *GetOutput(int index) const; TensorValue *MutableOutput(int index); @@ -64,6 +65,7 @@ class TaskContext { int64_t GetSessionId() const; uint64_t GetIterationNumber() const; + void NodeDone(); void OnError(Status error); @@ -105,6 +107,9 @@ class TaskContext { uint32_t GetStreamId() const; void SetStreamId(uint32_t stream_id); + void SetOverFlow(bool is_over_flow); + bool IsOverFlow(); + Status Synchronize(); bool IsForceInferShape() const; @@ -112,13 +117,10 @@ class TaskContext { void *handle_ = nullptr; const std::vector& GetProfilingTaskDescInfo() const { return task_desc_info; } - Status SaveProfilingTaskDescInfo(uint32_t task_id, uint32_t stream_id, uint32_t task_type, uint32_t block_dim); + Status SaveProfilingTaskDescInfo(uint32_t task_id, uint32_t stream_id, + const std::string &task_type, uint32_t block_dim); void ClearProfilingTaskDescInfo() { task_desc_info.clear(); } - const std::vector& GetProfilingGraphDescInfo() const { return compute_graph_info; } - Status SaveProfilingGraphDescInfo(uint32_t task_id, uint32_t stream_id); - void ClearProfilingGraphDescInfo() { compute_graph_info.clear(); } - private: TaskContext(GraphExecutionContext *execution_context, NodeState *node_state, @@ -140,7 +142,7 @@ class TaskContext { uint32_t task_id_ = 0; uint32_t stream_id_ = 0; std::vector task_desc_info; - std::vector compute_graph_info; + bool is_over_flow_ = false; }; } // namespace hybrid } // namespace ge diff --git a/ge/init/gelib.cc b/ge/init/gelib.cc old mode 100755 new mode 100644 index faa06962..17e257c0 --- a/ge/init/gelib.cc +++ b/ge/init/gelib.cc @@ -31,6 +31,7 @@ #include "framework/common/debug/ge_log.h" #include "framework/common/debug/log.h" #include "framework/common/util.h" +#include "framework/omg/ge_init.h" #include "analyzer/analyzer.h" #include "ge/ge_api_types.h" #include "ge_local_engine/engine/host_cpu_engine.h" @@ -71,6 +72,7 @@ Status GELib::Initialize(const map &options) { return GE_CLI_INIT_FAILED; } + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kSystemInit); map new_options; Status ret = instancePtr_->SetRTSocVersion(options, new_options); if (ret != SUCCESS) { @@ -110,6 +112,7 @@ Status GELib::InnerInitialize(const map &options) { return SUCCESS; } + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kSystemInit); GELOGI("GE System initial."); GE_TIMESTAMP_START(SystemInitialize); Status initSystemStatus = SystemInitialize(options); @@ -120,6 +123,7 @@ Status GELib::InnerInitialize(const map &options) { return initSystemStatus; } + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kEngineInit); GELOGI("engineManager initial."); GE_TIMESTAMP_START(EngineInitialize); Status initEmStatus = engineManager_.Initialize(options); @@ -130,6 +134,7 @@ Status GELib::InnerInitialize(const map &options) { return initEmStatus; } + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOpsKernelInit); GELOGI("opsManager initial."); GE_TIMESTAMP_START(OpsManagerInitialize); Status initOpsStatus = opsManager_.Initialize(options); @@ -140,6 +145,7 @@ Status GELib::InnerInitialize(const map &options) { return initOpsStatus; } + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOpsKernelBuilderInit); GELOGI("opsBuilderManager initial."); GE_TIMESTAMP_START(OpsKernelBuilderManagerInitialize); Status initOpsBuilderStatus = OpsKernelBuilderManager::Instance().Initialize(options); @@ -150,6 +156,7 @@ Status GELib::InnerInitialize(const map &options) { return initOpsBuilderStatus; } + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOther); GELOGI("sessionManager initial."); GE_TIMESTAMP_START(SessionManagerInitialize); Status initSmStatus = sessionManager_.Initialize(options); @@ -423,6 +430,7 @@ string GELib::GetPath() { return PluginManager::GetPath(); } // Finalize all modules Status GELib::Finalize() { + ErrorManager::GetInstance().SetStage(ErrorMessage::kFinalize, ErrorMessage::kFinalize); GELOGI("finalization start"); // Finalization is not allowed before initialization if (!init_flag_) { @@ -531,4 +539,25 @@ void GELib::RollbackInit() { HostMemManager::Instance().Finalize(); VarManagerPool::Instance().Destory(); } + +Status GEInit::Initialize(const map &options) { + Status ret = SUCCESS; + std::shared_ptr instance_ptr = ge::GELib::GetInstance(); + if (instance_ptr == nullptr || !instance_ptr->InitFlag()) { + ret = GELib::Initialize(options); + } + return ret; +} + +Status GEInit::Finalize() { + std::shared_ptr instance_ptr = ge::GELib::GetInstance(); + if (instance_ptr != nullptr) { + return instance_ptr->Finalize(); + } + return SUCCESS; +} + +string GEInit::GetPath() { + return GELib::GetPath(); +} } // namespace ge diff --git a/ge/ir_build/attr_options/weight_compress_option.cc b/ge/ir_build/attr_options/weight_compress_option.cc index 06528af2..0b8af37e 100644 --- a/ge/ir_build/attr_options/weight_compress_option.cc +++ b/ge/ir_build/attr_options/weight_compress_option.cc @@ -46,18 +46,23 @@ graphStatus WeightCompressFunc(ComputeGraphPtr &graph, const string &cfg_path) { vector compress_node_vec = StringUtils::Split(compress_nodes, ';'); for (size_t i = 0; i < compress_node_vec.size(); ++i) { + bool is_find = false; for (auto &node_ptr : graph->GetDirectNode()) { GE_CHECK_NOTNULL(node_ptr); auto op_desc = node_ptr->GetOpDesc(); GE_CHECK_NOTNULL(op_desc); if ((op_desc->GetName() == compress_node_vec[i]) || IsOriginalOpFind(op_desc, compress_node_vec[i])) { + is_find = true; if (!ge::AttrUtils::SetBool(op_desc, ge::ATTR_NAME_COMPRESS_WEIGHT, true)) { GELOGE(GRAPH_FAILED, "node %s SetBool failed.", compress_node_vec[i].c_str()); return GRAPH_FAILED; } } } + if (!is_find) { + GELOGW("node %s is not in graph", compress_node_vec[i].c_str()); + } } return GRAPH_SUCCESS; } diff --git a/ge/ir_build/ge_ir_build.cc b/ge/ir_build/ge_ir_build.cc index d7daaede..62684e3a 100644 --- a/ge/ir_build/ge_ir_build.cc +++ b/ge/ir_build/ge_ir_build.cc @@ -64,7 +64,7 @@ const std::string kInputFormat = "input_format"; * @param cfg_path [IN] the config file path * @return graphStatus */ -typedef graphStatus (*SetOpAttrFun)(ComputeGraphPtr &graph, const std::string &cfg_path); +using SetOpAttrFun = graphStatus (*)(ComputeGraphPtr &graph, const std::string &cfg_path); const std::map kAttrTypeFuncMap = { {ATTR_TYPE_KEEP_DTYPE, KeepDtypeFunc}, @@ -201,10 +201,12 @@ graphStatus aclgrphBuildInitializeImpl(std::map &globa } graphStatus aclgrphBuildInitialize(std::map global_options) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOther); return aclgrphBuildInitializeImpl(global_options); } graphStatus aclgrphBuildInitialize(std::map &global_options) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOther); std::map tmp_global_options; for (auto &option : global_options) { if (option.first.GetString() == nullptr || option.second.GetString() == nullptr) { @@ -219,6 +221,7 @@ graphStatus aclgrphBuildInitialize(std::map &global_ } void aclgrphBuildFinalize() { + ErrorManager::GetInstance().SetStage(ErrorMessage::kFinalize, ErrorMessage::kFinalize); if (ge::GELib::GetInstance() != nullptr && ge::GELib::GetInstance()->InitFlag()) { (void)ge::GELib::GetInstance()->Finalize(); return; @@ -563,6 +566,7 @@ graphStatus Impl::InitDomiOmgContext(const string &input_shape, const string &in graphStatus aclgrphBuildModel(const ge::Graph &graph, const std::map &build_options, ModelBufferData &model) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); GELOGD("Enter aclmdlBuildModel process!"); Impl builder; return builder.BuildModel(graph, build_options, model); @@ -570,6 +574,7 @@ graphStatus aclgrphBuildModel(const ge::Graph &graph, const std::map &build_options, ModelBufferData &model) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); GELOGD("Enter aclmdlBuildModel process!"); std::map tmp_build_options; for (auto &option : build_options) { @@ -587,6 +592,7 @@ graphStatus aclgrphBuildModel(const ge::Graph &graph, const std::map PATH_MAX || len != strlen(file) || strlen(file) == 0) { @@ -678,6 +687,7 @@ graphStatus aclgrphDumpGraph(const ge::Graph &graph, const char *file, const siz graphStatus aclgrphGenerateForOp(const AscendString &op_type, const vector &inputs, const vector &outputs, Graph &graph) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); auto op_type_str = std::string(op_type.GetString()); auto op_name = op_type_str + "_" + std::to_string(ge::GetCurrentTimestamp()); auto op_desc = ge::MakeShared(op_name, op_type_str); @@ -737,6 +747,7 @@ static std::string AttrTypeToSerialString(aclgrphAttrType attr_type) { } graphStatus aclgrphSetOpAttr(Graph &graph, aclgrphAttrType attr_type, const char *cfg_path) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); auto compute_graph = GraphUtils::GetComputeGraph(graph); GE_CHECK_NOTNULL(compute_graph); if (cfg_path == nullptr) { diff --git a/ge/offline/main.cc b/ge/offline/main.cc index 31a9d96f..28df9969 100755 --- a/ge/offline/main.cc +++ b/ge/offline/main.cc @@ -62,19 +62,18 @@ using std::shared_ptr; using std::string; using std::vector; +namespace { static bool is_dynamic_input = false; - const char *const kModeSupport = "only support 0(model to framework model), " "1(framework model to json), 3(only pre-check), " "5(pbtxt to json), 6(display model info)"; const char *const kModelToJsonSupport = "only support 0(Caffe) 3(TensorFlow) 5(Onnx)"; - -static const char *const kCaffeFormatSupport = "only support NCHW, ND in Caffe model"; -static const char *const kTFFormatSupport = "only support NCHW, NHWC, ND, NCDHW, NDHWC in TF model"; -static const char *const kONNXFormatSupport = "only support NCHW, ND in ONNX model"; - +const char *const kCaffeFormatSupport = "only support NCHW, ND in Caffe model"; +const char *const kTFFormatSupport = "only support NCHW, NHWC, ND, NCDHW, NDHWC in TF model"; +const char *const kONNXFormatSupport = "only support NCHW, ND in ONNX model"; // limit available mem size 2G const long kMinAvailableMem = 2097152; // 2 * 1024 * 1024 +} // namespace DEFINE_string(model, "", "The model file."); DEFINE_string(output, "", "The output file path&name."); @@ -799,11 +798,17 @@ void SaveCustomCaffeProtoPath() { Status CreateInputsForInference(const ge::Graph &graph, vector &inputs) { auto compute_graph = ge::GraphUtils::GetComputeGraph(graph); GE_CHECK_NOTNULL(compute_graph); + int64_t index = 0; for (ge::NodePtr &input_node : compute_graph->GetAllNodes()) { GE_CHECK_NOTNULL(input_node); ge::OpDescPtr op = input_node->GetOpDesc(); GE_CHECK_NOTNULL(op); if (op->GetType() == ge::DATA) { + if (!op->HasAttr(ge::ATTR_NAME_INDEX)) { + (void)ge::AttrUtils::SetInt(op, ge::ATTR_NAME_INDEX, index); + GELOGD("Set attr index:%ld for data op:%s", index, op->GetName().c_str()); + } + index++; GELOGI("Data op inputDesc size is: %zu", op->GetAllInputsDesc().size()); ge::GeTensorDesc tensor = op->GetInputDesc(0); string data_op_name = op->GetName(); @@ -950,6 +955,7 @@ domi::Status GenerateModel(std::map &options, std::string output ge::Graph graph; std::vector inputs; if (FLAGS_framework == domi::MINDSPORE) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); // load model from file ge::Model load_model = ge::Model("loadmodel", "version2"); auto ret1 = load_model.LoadFromFile(FLAGS_model); @@ -988,10 +994,12 @@ domi::Status GenerateModel(std::map &options, std::string output atc_params.insert(std::pair(string(ge::OUTPUT_DATATYPE), FLAGS_output_type)); atc_params.insert(std::pair("output", output)); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kParser); Status ret = ParseGraph(graph, atc_params, FLAGS_model.c_str(), FLAGS_weight.c_str(), (domi::FrameworkType)FLAGS_framework, FLAGS_op_name_map.c_str(), FLAGS_target.c_str(), (ge::RunMode)FLAGS_mode, is_dynamic_input); + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); // in ONLY_PRE_CHECK mode, pre-checking report has already saved in ParseGraph if (FLAGS_mode == ge::ONLY_PRE_CHECK) { (void)ge_generator.Finalize(); @@ -1089,6 +1097,7 @@ domi::Status GenerateSingleOp(const std::string& json_file_path) { return domi::FAILED; } + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kParser); vector build_params; if (ge::SingleOpParser::ParseSingleOpList(json_file_path, build_params) != ge::SUCCESS) { DOMI_LOGE("parse single op json file failed"); @@ -1221,6 +1230,7 @@ domi::Status GenerateOmModel() { return domi::FAILED; } + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); if (FLAGS_display_model_info == "1") { GELOGI("need to display model info."); return ge::ConvertOm(FLAGS_output.c_str(), "", false); @@ -1230,6 +1240,7 @@ domi::Status GenerateOmModel() { } domi::Status ConvertModelToJson() { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); Status ret = GFlagUtils::CheckConverJsonParamFlags(); GE_CHK_BOOL_EXEC(ret == domi::SUCCESS, return domi::FAILED, "Check convert json params flags failed!"); @@ -1240,6 +1251,7 @@ domi::Status ConvertModelToJson() { } domi::Status DisplayModelInfo() { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); // No model path passed in GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(FLAGS_om == "", ErrorManager::GetInstance().ATCReportErrMessage("E10004", {"parameter"}, {"om"}); @@ -1288,6 +1300,7 @@ bool CheckRet(domi::Status ret) { } domi::Status ConvertPbtxtToJson() { + ErrorManager::GetInstance().SetStage(ErrorMessage::kModelCompile, ErrorMessage::kOther); Status ret = GFlagUtils::CheckConverJsonParamFlags(); if (ret != domi::SUCCESS) { GELOGE(ge::FAILED, "Check convert json params flags failed!"); @@ -1326,6 +1339,7 @@ int init(int argc, char* argv[]) { return ret; } + ErrorManager::GetInstance().GenWorkStreamIdDefault(); return 0; } @@ -1374,6 +1388,7 @@ bool CheckMemInfo() { } int main(int argc, char* argv[]) { + ErrorManager::GetInstance().SetStage(ErrorMessage::kInitialize, ErrorMessage::kOther); Status ret = domi::SUCCESS; std::cout << "ATC start working now, please wait for a moment." << std::endl; @@ -1414,6 +1429,7 @@ int main(int argc, char* argv[]) { } } while (0); + ErrorManager::GetInstance().SetStage(ErrorMessage::kFinalize, ErrorMessage::kFinalize); if (!CheckRet(ret)) { std::cout << "ATC run failed, Please check the detail log, Try \'atc --help\' for more information" << std::endl; int result = ErrorManager::GetInstance().OutputErrMessage(STDOUT_FILENO); diff --git a/ge/session/inner_session.cc b/ge/session/inner_session.cc index 6a56fc05..d11ba10e 100755 --- a/ge/session/inner_session.cc +++ b/ge/session/inner_session.cc @@ -23,6 +23,7 @@ #include "analyzer/analyzer.h" #include "adx_datadump_server.h" #include "common/dump/dump_properties.h" +#include "common/dump/dump_manager.h" #include "common/util.h" #include "framework/common/debug/ge_log.h" #include "graph/ge_context.h" @@ -374,13 +375,13 @@ Status InnerSession::AddDumpProperties(const DumpProperties &dump_properties) { is_dump_server_inited_ = true; } } - PropertiesManager::Instance().AddDumpProperties(session_id_, dump_properties); + DumpManager::GetInstance().AddDumpProperties(session_id_, dump_properties); return SUCCESS; } Status InnerSession::RemoveDumpProperties() { - PropertiesManager::Instance().RemoveDumpProperties(session_id_); - if (is_dump_server_inited_ && PropertiesManager::Instance().GetDumpPropertiesMap().empty()) { + DumpManager::GetInstance().RemoveDumpProperties(session_id_); + if (is_dump_server_inited_ && DumpManager::GetInstance().GetDumpPropertiesMap().empty()) { GE_IF_BOOL_EXEC(AdxDataDumpServerUnInit() != kDumpStatus, GELOGE(PARAM_INVALID, "Data dump server uninit failed"); return PARAM_INVALID) GELOGI("UnInit adx data dump server success"); diff --git a/ge/session/omg.cc b/ge/session/omg.cc index a82db26b..bd1fd67c 100755 --- a/ge/session/omg.cc +++ b/ge/session/omg.cc @@ -23,7 +23,7 @@ #include "common/debug/memory_dumper.h" #include "common/ge/ge_util.h" #include "common/helper/model_helper.h" -#include "common/model_parser/base.h" +#include "common/model_parser/model_parser.h" #include "common/model_saver.h" #include "common/properties_manager.h" #include "common/string_util.h" @@ -965,7 +965,8 @@ FMK_FUNC_HOST_VISIBILITY Status ConvertOm(const char *model_file, const char *js } else { ErrorManager::GetInstance().ATCReportErrMessage("E10003", {"parameter", "value", "reason"}, {"om", model_file, "invalid om file"}); - GELOGE(ACL_ERROR_GE_PARAM_INVALID, "ParseModelContent failed because of invalid om file. Please check --om param."); + GELOGE(ACL_ERROR_GE_PARAM_INVALID, + "ParseModelContent failed because of invalid om file. Please check --om param."); } if (model.model_data != nullptr) { diff --git a/ge/single_op/single_op.cc b/ge/single_op/single_op.cc index 168ca2c5..4a59a2b6 100755 --- a/ge/single_op/single_op.cc +++ b/ge/single_op/single_op.cc @@ -45,40 +45,24 @@ Status ProfilingTaskInfo(OpTask *op_task, const string &shape_type) { return SUCCESS; } - string model_name; - string op_name; + TaskDescInfo tmp_task_desc_info; uint32_t model_id; - uint32_t block_dim; - if (op_task->GetProfilingArgs(model_name, op_name, model_id, block_dim) != SUCCESS) { + if (op_task->GetProfilingArgs(tmp_task_desc_info, model_id) != SUCCESS) { GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Get profiling data of task failed"); return ACL_ERROR_GE_PARAM_INVALID; } - GELOGD("ProfilingReport of op[%s] model[%s] start.", op_name.c_str(), model_name.c_str()); - std::vector task_desc_info; - uint32_t task_id = 0; - uint32_t stream_id = 0; - auto rt_ret = rtGetTaskIdAndStreamID(&task_id, &stream_id); - if (rt_ret != RT_ERROR_NONE) { - GELOGE(rt_ret, "Get task_id and stream_id failed."); - return RT_ERROR_TO_GE_STATUS(rt_ret); - } + GELOGD("ProfilingReport of op[%s] model[%s] start.", + tmp_task_desc_info.op_name.c_str(), tmp_task_desc_info.model_name.c_str()); - TaskDescInfo tmp_task_desc_info; - tmp_task_desc_info.model_name = model_name; - tmp_task_desc_info.op_name = op_name; - tmp_task_desc_info.block_dim = block_dim; - tmp_task_desc_info.task_id = task_id; - tmp_task_desc_info.stream_id = stream_id; tmp_task_desc_info.shape_type = shape_type; tmp_task_desc_info.cur_iter_num = 0; tmp_task_desc_info.task_type = op_task->GetTaskType(); - GELOGD("GetTaskDescInfo of op [%s] end, task_id[%u], stream_id[%u]", op_name.c_str(), task_id, stream_id); - task_desc_info.emplace_back(tmp_task_desc_info); - std::vector compute_graph_info; + std::vector task_desc_info; + task_desc_info.emplace_back(tmp_task_desc_info); auto &profiling_manager = ProfilingManager::Instance(); - profiling_manager.ReportProfilingData(model_id, task_desc_info, compute_graph_info); + profiling_manager.ReportProfilingData(model_id, task_desc_info); return SUCCESS; } } // namespace @@ -199,6 +183,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status SingleOp::ExecuteAsync(c if (ret != SUCCESS) { return ret; } + GE_CHK_STATUS_RET(task->OpenDump(stream_), "Open single op %s dump filed",task->GetOpdesc()->GetName().c_str()); GE_CHK_STATUS_RET_NOLOG(ProfilingTaskInfo(task, kShapeTypeStatic)); } @@ -279,6 +264,7 @@ Status DynamicSingleOp::ExecuteAsync(const vector &input_desc, GE_CHECK_NOTNULL(op_task_); GE_CHK_STATUS_RET_NOLOG(op_task_->LaunchKernel(input_desc, input_buffers, output_desc, output_buffers, stream_)); + GE_CHK_STATUS_RET_NOLOG(op_task_->OpenDump(stream_)); GE_CHK_STATUS_RET_NOLOG(ProfilingTaskInfo(op_task_.get(), kShapeTypeDynamic)); return SUCCESS; } diff --git a/ge/single_op/single_op_manager.cc b/ge/single_op/single_op_manager.cc index ccbdbe3f..fddbeec2 100644 --- a/ge/single_op/single_op_manager.cc +++ b/ge/single_op/single_op_manager.cc @@ -30,8 +30,9 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY SingleOpManager::~SingleOpManag FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status SingleOpManager::GetOpFromModel(const std::string &model_name, const ModelData &model_data, void *stream, - SingleOp **single_op) { - GELOGI("GetOpFromModel in. model name = %s", model_name.c_str()); + SingleOp **single_op, + const uint64_t model_id) { + GELOGI("GetOpFromModel in. model name = %s, model id = %lu", model_name.c_str(), model_id); if (single_op == nullptr) { GELOGE(ACL_ERROR_GE_INTERNAL_ERROR, "single op is null"); return ACL_ERROR_GE_INTERNAL_ERROR; @@ -45,14 +46,14 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status SingleOpManager::GetOpFr return ACL_ERROR_GE_MEMORY_ALLOCATION; } - SingleOp *op = res->GetOperator(model_data.model_data); + SingleOp *op = res->GetOperator(model_id); if (op != nullptr) { GELOGD("Got operator from stream cache"); *single_op = op; return SUCCESS; } - return res->BuildOperator(model_name, model_data, single_op); + return res->BuildOperator(model_data, single_op, model_id); } FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status SingleOpManager::ReleaseResource(void *stream) { @@ -99,7 +100,9 @@ StreamResource *SingleOpManager::TryGetResource(uintptr_t resource_id) { Status SingleOpManager::GetDynamicOpFromModel(const string &model_name, const ModelData &model_data, void *stream, - DynamicSingleOp **single_op) { + DynamicSingleOp **single_op, + const uint64_t model_id) { + GELOGI("GetOpFromModel in. model name = %s, model id = %lu", model_name.c_str(), model_id); if (!tiling_func_registered_) { RegisterTilingFunc(); } @@ -113,14 +116,14 @@ Status SingleOpManager::GetDynamicOpFromModel(const string &model_name, return ACL_ERROR_GE_MEMORY_ALLOCATION; } - DynamicSingleOp *op = res->GetDynamicOperator(model_data.model_data); + DynamicSingleOp *op = res->GetDynamicOperator(model_id); if (op != nullptr) { GELOGD("Got operator from stream cache"); *single_op = op; return SUCCESS; } - return res->BuildDynamicOperator(model_name, model_data, single_op); + return res->BuildDynamicOperator(model_data, single_op, model_id); } void SingleOpManager::RegisterTilingFunc() { diff --git a/ge/single_op/single_op_manager.h b/ge/single_op/single_op_manager.h index e6d10980..c3fff3f4 100644 --- a/ge/single_op/single_op_manager.h +++ b/ge/single_op/single_op_manager.h @@ -37,12 +37,14 @@ class SingleOpManager { Status GetOpFromModel(const std::string &model_name, const ge::ModelData &model_data, void *stream, - SingleOp **single_op); + SingleOp **single_op, + const uint64_t model_id); Status GetDynamicOpFromModel(const std::string &model_name, const ge::ModelData &model_data, void *stream, - DynamicSingleOp **dynamic_single_op); + DynamicSingleOp **dynamic_single_op, + const uint64_t model_id); StreamResource *GetResource(uintptr_t resource_id, rtStream_t stream); diff --git a/ge/single_op/single_op_model.cc b/ge/single_op/single_op_model.cc index 7fcb0b8f..49dde9c4 100755 --- a/ge/single_op/single_op_model.cc +++ b/ge/single_op/single_op_model.cc @@ -48,7 +48,8 @@ bool NeedHybridModel(GeModelPtr &ge_model) { auto tasks = ge_model->GetModelTaskDefPtr()->task(); int32_t kernel_task_num = 0; for (int i = 0; i < tasks.size(); ++i) { - if (static_cast(tasks[i].type()) == RT_MODEL_TASK_KERNEL) { + auto task_type = static_cast(tasks[i].type()); + if (task_type == RT_MODEL_TASK_KERNEL || task_type == RT_MODEL_TASK_ALL_KERNEL) { kernel_task_num++; if (kernel_task_num > 1) { return true; @@ -190,7 +191,7 @@ Status SingleOpModel::LoadAllNodes() { auto node = nodes.at(i); auto op_desc = node->GetOpDesc(); GE_CHECK_NOTNULL(op_desc); - op_list_[i] = node; + op_list_[op_desc->GetId()] = node; auto op_type = op_desc->GetType(); GELOGI("[%s] node[%zu] = %s, type = %s", model_name_.c_str(), i, node->GetName().c_str(), op_type.c_str()); @@ -254,14 +255,14 @@ Status SingleOpModel::BuildTaskList(StreamResource *stream_resource, SingleOp &s GELOGI("[%s] Task[%d], type = %u, DebugString = %s", model_name_.c_str(), i, task_def.type(), task_def.DebugString().c_str()); auto task_type = static_cast(task_def.type()); - if (task_type == RT_MODEL_TASK_KERNEL) { - const domi::KernelDef &kernel_def = task_def.kernel(); - const auto &context = kernel_def.context(); + if (task_type == RT_MODEL_TASK_KERNEL || task_type == RT_MODEL_TASK_ALL_KERNEL) { + const auto &context = task_type == RT_MODEL_TASK_KERNEL ? task_def.kernel().context() : + task_def.kernel_with_handle().context(); auto kernel_type = static_cast(context.kernel_type()); if (kernel_type == ccKernelType::TE) { GELOGD("Building TBE task"); TbeOpTask *tbe_task = nullptr; - auto ret = BuildKernelTask(task_def.kernel(), &tbe_task); + auto ret = BuildKernelTask(task_def, &tbe_task); if (ret != SUCCESS) { return ret; } @@ -332,9 +333,11 @@ void SingleOpModel::ParseArgTable(OpTask *task, SingleOp &op) { } } -Status SingleOpModel::BuildKernelTask(const domi::KernelDef &kernel_def, TbeOpTask **task) { +Status SingleOpModel::BuildKernelTask(const domi::TaskDef &task_def, TbeOpTask **task) { GE_CHECK_NOTNULL(task); - const auto &context = kernel_def.context(); + auto task_type = static_cast(task_def.type()); + const auto &context = task_type == RT_MODEL_TASK_KERNEL ? task_def.kernel().context() : + task_def.kernel_with_handle().context(); auto iter = op_list_.find(context.op_index()); if (iter == op_list_.end()) { GELOGE(ACL_ERROR_GE_INTERNAL_ERROR, "op desc not found. op index = %u", context.op_index()); @@ -347,7 +350,7 @@ Status SingleOpModel::BuildKernelTask(const domi::KernelDef &kernel_def, TbeOpTa return ACL_ERROR_GE_MEMORY_ALLOCATION; } - auto builder = TbeTaskBuilder(model_name_, iter->second, kernel_def); + auto builder = TbeTaskBuilder(model_name_, iter->second, task_def); auto ret = builder.BuildTask(*tbe_task, model_params_); if (ret != SUCCESS) { delete tbe_task; @@ -418,13 +421,15 @@ Status SingleOpModel::BuildOp(StreamResource &resource, SingleOp &single_op) { } Status SingleOpModel::BuildModelTaskKernel(const TaskDef &task_def, DynamicSingleOp &single_op) { - const domi::KernelDef &kernel_def = task_def.kernel(); - const auto &context = kernel_def.context(); + auto task_type = static_cast(task_def.type()); + const auto &context = task_type == RT_MODEL_TASK_KERNEL ? task_def.kernel().context() : + task_def.kernel_with_handle().context(); + auto kernel_type = static_cast(context.kernel_type()); if (kernel_type == ccKernelType::TE) { GELOGD("Building TBE task"); TbeOpTask *tbe_task = nullptr; - GE_CHK_STATUS_RET_NOLOG(BuildKernelTask(task_def.kernel(), &tbe_task)); + GE_CHK_STATUS_RET_NOLOG(BuildKernelTask(task_def, &tbe_task)); tbe_task->SetModelArgs(model_name_, model_id_); single_op.op_task_.reset(tbe_task); } else if (kernel_type == ccKernelType::AI_CPU || kernel_type == ccKernelType::CUST_AI_CPU) { @@ -453,7 +458,7 @@ Status SingleOpModel::BuildTaskListForDynamicOp(DynamicSingleOp &single_op) { GELOGI("[%s] Task[%d], type = %u, DebugString = %s", model_name_.c_str(), i, task_def.type(), task_def.DebugString().c_str()); auto task_type = static_cast(task_def.type()); - if (task_type == RT_MODEL_TASK_KERNEL) { + if (task_type == RT_MODEL_TASK_KERNEL || task_type == RT_MODEL_TASK_ALL_KERNEL) { if (single_op.op_task_ != nullptr) { GELOGE(ACL_ERROR_GE_OP_TASK_TYPE_INVALID, "Do not support dynamic op with multiple tasks."); return ACL_ERROR_GE_OP_TASK_TYPE_INVALID; diff --git a/ge/single_op/single_op_model.h b/ge/single_op/single_op_model.h index 6637271c..b1a7d3ea 100755 --- a/ge/single_op/single_op_model.h +++ b/ge/single_op/single_op_model.h @@ -24,7 +24,6 @@ #include #include "common/helper/model_helper.h" -#include "graph/load/model_manager/davinci_model_parser.h" #include "single_op/single_op.h" #include "single_op/stream_resource.h" @@ -67,7 +66,7 @@ class SingleOpModel { Status BuildTaskList(StreamResource *stream_resource, SingleOp &single_op); Status BuildTaskListForDynamicOp(DynamicSingleOp &dynamic_single_op); - Status BuildKernelTask(const domi::KernelDef &kernel_def, TbeOpTask **task); + Status BuildKernelTask(const domi::TaskDef &task_def, TbeOpTask **task); Status BuildKernelExTask(const domi::KernelExDef &kernel_def, AiCpuTask **task, bool dynamic_flag, bool& depend_compute_flag, uint64_t kernel_id); Status BuildCpuKernelTask(const domi::KernelDef &kernel_def, OpTask **task, uint64_t kernel_id); diff --git a/ge/single_op/stream_resource.cc b/ge/single_op/stream_resource.cc index a3acf6b7..21d127ec 100755 --- a/ge/single_op/stream_resource.cc +++ b/ge/single_op/stream_resource.cc @@ -41,7 +41,7 @@ StreamResource::~StreamResource() { } } -SingleOp *StreamResource::GetOperator(const void *key) { +SingleOp *StreamResource::GetOperator(const uint64_t key) { std::lock_guard lk(mu_); auto it = op_map_.find(key); if (it == op_map_.end()) { @@ -51,7 +51,7 @@ SingleOp *StreamResource::GetOperator(const void *key) { return it->second.get(); } -DynamicSingleOp *StreamResource::GetDynamicOperator(const void *key) { +DynamicSingleOp *StreamResource::GetDynamicOperator(const uint64_t key) { std::lock_guard lk(mu_); auto it = dynamic_op_map_.find(key); if (it == dynamic_op_map_.end()) { @@ -138,11 +138,12 @@ uint8_t *StreamResource::MallocWeight(const std::string &purpose, size_t size) { return buffer; } -Status StreamResource::BuildDynamicOperator(const string &model_name, - const ModelData &model_data, - DynamicSingleOp **single_op) { +Status StreamResource::BuildDynamicOperator(const ModelData &model_data, + DynamicSingleOp **single_op, + const uint64_t model_id) { + const string &model_name = std::to_string(model_id); std::lock_guard lk(mu_); - auto it = dynamic_op_map_.find(model_data.model_data); + auto it = dynamic_op_map_.find(model_id); if (it != dynamic_op_map_.end()) { *single_op = it->second.get(); return SUCCESS; @@ -162,13 +163,14 @@ Status StreamResource::BuildDynamicOperator(const string &model_name, GE_CHK_STATUS_RET(model.BuildDynamicOp(*this, *new_op), "Build op failed. op = %s, ret = %u", model_name.c_str(), ret); *single_op = new_op.get(); - dynamic_op_map_[model_data.model_data] = std::move(new_op); + dynamic_op_map_[model_id] = std::move(new_op); return SUCCESS; } -Status StreamResource::BuildOperator(const string &model_name, const ModelData &model_data, SingleOp **single_op) { +Status StreamResource::BuildOperator(const ModelData &model_data, SingleOp **single_op, const uint64_t model_id) { + const string &model_name = std::to_string(model_id); std::lock_guard lk(mu_); - auto it = op_map_.find(model_data.model_data); + auto it = op_map_.find(model_id); if (it != op_map_.end()) { *single_op = it->second.get(); return SUCCESS; @@ -191,7 +193,7 @@ Status StreamResource::BuildOperator(const string &model_name, const ModelData & GE_CHK_STATUS_RET(model.BuildOp(*this, *new_op), "Build op failed. op = %s, ret = %u", model_name.c_str(), ret); *single_op = new_op.get(); - op_map_[model_data.model_data] = std::move(new_op); + op_map_[model_id] = std::move(new_op); return SUCCESS; } diff --git a/ge/single_op/stream_resource.h b/ge/single_op/stream_resource.h index d2c1ca36..73a6231b 100755 --- a/ge/single_op/stream_resource.h +++ b/ge/single_op/stream_resource.h @@ -40,11 +40,11 @@ class StreamResource { rtStream_t GetStream() const; void SetStream(rtStream_t stream); - SingleOp *GetOperator(const void *key); - DynamicSingleOp *GetDynamicOperator(const void *key); + SingleOp *GetOperator(const uint64_t key); + DynamicSingleOp *GetDynamicOperator(const uint64_t key); - Status BuildOperator(const std::string &model_name, const ModelData &model_data, SingleOp **single_op); - Status BuildDynamicOperator(const std::string &model_name, const ModelData &model_data, DynamicSingleOp **single_op); + Status BuildOperator(const ModelData &model_data, SingleOp **single_op, const uint64_t model_id); + Status BuildDynamicOperator(const ModelData &model_data, DynamicSingleOp **single_op, const uint64_t model_id); uint8_t *MallocMemory(const std::string &purpose, size_t size, bool holding_lock = true); uint8_t *MallocWeight(const std::string &purpose, size_t size); @@ -60,8 +60,8 @@ class StreamResource { size_t max_memory_size_ = 0; std::vector memory_list_; std::vector weight_list_; - std::unordered_map> op_map_; - std::unordered_map> dynamic_op_map_; + std::unordered_map> op_map_; + std::unordered_map> dynamic_op_map_; rtStream_t stream_ = nullptr; std::mutex mu_; std::mutex stream_mu_; diff --git a/ge/single_op/task/op_task.cc b/ge/single_op/task/op_task.cc index ff200806..f754af28 100755 --- a/ge/single_op/task/op_task.cc +++ b/ge/single_op/task/op_task.cc @@ -23,6 +23,7 @@ #include "aicpu/common/aicpu_task_struct.h" #include "common/dump/dump_manager.h" #include "common/dump/dump_op.h" +#include "common/profiling/profiling_manager.h" #include "common/formats/formats.h" #include "common/math/math_util.h" #include "framework/common/debug/log.h" @@ -36,6 +37,7 @@ constexpr int kLaunchRetryTimes = 1000; constexpr int kSleepTime = 10; constexpr uint64_t kReleaseFlag = 1; constexpr int kCopyNum = 2; +constexpr uint64_t kInferSessionId = 0; void FreeHbm(void *var) { if (var) { (void)rtFree(var); @@ -44,7 +46,7 @@ void FreeHbm(void *var) { } // namespace Status OpTask::OpenDump(rtStream_t stream) { - if (DumpManager::GetInstance().GetDumpProperties().IsSingleOpNeedDump()) { + if (DumpManager::GetInstance().GetDumpProperties(kInferSessionId).IsSingleOpNeedDump()) { GELOGI("Dump is open in single op, start to set dump info"); std::vector input_addrs; std::vector output_adds; @@ -68,7 +70,8 @@ Status OpTask::OpenDump(rtStream_t stream) { uint64_t output_addr = arg_base[input_size + j]; output_adds.emplace_back(output_addr); } - dump_op_.SetDumpInfo(DumpManager::GetInstance().GetDumpProperties(), op_desc_, input_addrs, output_adds, stream); + dump_op_.SetDumpInfo(DumpManager::GetInstance().GetDumpProperties(kInferSessionId), + op_desc_, input_addrs, output_adds, stream); auto status = dump_op_.LaunchDumpOp(); if (status != SUCCESS) { GELOGE(status, "Launch dump op failed in single op"); @@ -93,6 +96,14 @@ void TbeOpTask::SetKernelArgs(std::unique_ptr &&args, size_t arg_size op_desc_ = op_desc; } +void TbeOpTask::SetKernelWithHandleArgs(std::unique_ptr &&args, size_t arg_size, uint32_t block_dim, + const OpDescPtr &op_desc, + const domi::KernelDefWithHandle &kernel_def_with_handle) { + SetKernelArgs(std::move(args), arg_size, block_dim, op_desc); + original_kernel_key_ = kernel_def_with_handle.original_kernel_key(); + node_info_ = kernel_def_with_handle.node_info(); +} + void TbeOpTask::SetSmDesc(void *sm_desc) { sm_desc_ = sm_desc; } void OpTask::SetModelArgs(std::string model_name, uint32_t model_id) { @@ -100,15 +111,29 @@ void OpTask::SetModelArgs(std::string model_name, uint32_t model_id) { model_id_ = model_id; } -Status OpTask::GetProfilingArgs(std::string &model_name, std::string &op_name, uint32_t &model_id, - uint32_t &block_dim) { - model_name = model_name_; - model_id = model_id_; - block_dim = block_dim_; +Status OpTask::GetProfilingArgs(TaskDescInfo &task_desc_info, uint32_t &model_id) { + uint32_t task_id = 0; + uint32_t stream_id = 0; + auto rt_ret = rtGetTaskIdAndStreamID(&task_id, &stream_id); + if (rt_ret != RT_ERROR_NONE) { + GELOGE(RT_FAILED, "Get task_id and stream_id failed ret: 0x%X.", rt_ret); + return RT_ERROR_TO_GE_STATUS(rt_ret); + } GE_CHECK_NOTNULL(op_desc_); - op_name = op_desc_->GetName(); + string op_name = op_desc_->GetName(); + GELOGD("Get profiling args of op [%s] end, task_id[%u], stream_id[%u]", op_name.c_str(), task_id, stream_id); + model_id = model_id_; + task_desc_info.model_name = model_name_; + task_desc_info.block_dim = block_dim_; + task_desc_info.task_id = task_id; + task_desc_info.stream_id = stream_id; + task_desc_info.op_name = op_name; + task_desc_info.op_type = op_desc_->GetType(); + auto &prof_mgr = ProfilingManager::Instance(); + prof_mgr.GetOpInputOutputInfo(op_desc_, task_desc_info); return SUCCESS; } + Status OpTask::UpdateRunInfo(const vector &input_desc, const vector &output_desc) { return UNSUPPORTED; } @@ -145,7 +170,7 @@ Status OpTask::LaunchKernel(const vector &input_desc, return UNSUPPORTED; } -uint32_t OpTask::GetTaskType() const { return kTaskTypeInvalid; } +const std::string &OpTask::GetTaskType() const { return kTaskTypeInvalid; } TbeOpTask::~TbeOpTask() { if (sm_desc_ != nullptr) { @@ -163,7 +188,11 @@ size_t TbeOpTask::GetArgSize() const { return arg_size_; } const std::string &TbeOpTask::GetStubName() const { return stub_name_; } -uint32_t TbeOpTask::GetTaskType() const { return kTaskTypeAicore; } +const std::string &TbeOpTask::GetTaskType() const { return kTaskTypeAicore; } + +void TbeOpTask::SetHandle(void *handle) { + this->handle_ = handle; +} Status TbeOpTask::LaunchKernel(rtStream_t stream) { GELOGD("To invoke rtKernelLaunch. task = %s, block_dim = %u", this->stub_name_.c_str(), block_dim_); @@ -182,11 +211,6 @@ Status TbeOpTask::LaunchKernel(rtStream_t stream) { return RT_ERROR_TO_GE_STATUS(ret); } GELOGI("[TASK_INFO] %s", this->stub_name_.c_str()); - auto status = OpenDump(stream); - if (status != SUCCESS) { - GELOGE(status, "Open dump failed in the tbe single op %s", this->stub_name_.c_str()); - return status; - } return SUCCESS; } @@ -204,8 +228,9 @@ Status TbeOpTask::UpdateRunInfo(const vector &input_desc, const ve } block_dim_ = run_info.block_dim; tiling_data_ = run_info.tiling_data.str(); - GELOGD("Done invoking OpParaCalculate successfully. block_dim = %u, tiling size = %zu", block_dim_, - tiling_data_.size()); + tiling_key_ = run_info.tiling_key; + GELOGD("Done invoking OpParaCalculate successfully. block_dim = %u, tiling size = %zu, tiling_key = %u", block_dim_, + tiling_data_.size(), tiling_key_); GE_CHK_STATUS_RET(AllocateWorkspaces(run_info.workspaces), "Failed to allocate workspaces"); return SUCCESS; @@ -329,8 +354,17 @@ Status TbeOpTask::LaunchKernel(const vector &input_desc, } GELOGD("[%s] Start to invoke rtKernelLaunch", node_->GetName().c_str()); - GE_CHK_RT_RET(rtKernelLaunch(stub_func_, block_dim_, args_.get(), arg_size_, nullptr, stream)); - GELOGD("[%s] Done invoking rtKernelLaunch successfully", node_->GetName().c_str()); + if (handle_ == nullptr) { + GE_CHK_RT_RET(rtKernelLaunch(stub_func_, block_dim_, args_.get(), arg_size_, nullptr, stream)); + GELOGD("[%s] Done invoking rtKernelLaunch successfully", node_->GetName().c_str()); + } else { + std::string dev_func = original_kernel_key_ + "_" + std::to_string(tiling_key_); + std::string kernel_info = node_info_ + "/" + std::to_string(tiling_key_); + GE_CHK_RT_RET(rtKernelLaunchWithHandle(handle_, dev_func.c_str(), block_dim_, args_.get(), arg_size_, nullptr, + stream, kernel_info.c_str())); + GELOGD("[%s] Done invoking rtKernelLaunchWithHandle successfully", node_->GetName().c_str()); + } + return SUCCESS; } @@ -363,7 +397,8 @@ Status AiCpuBaseTask::SetExtInfoAndType(const std::string &kernel_ext_info, uint num_inputs_, num_outputs_, unknown_type_)); - GE_CHK_BOOL_RET_STATUS(aicpu_ext_handle_ != nullptr, ACL_ERROR_GE_MEMORY_ALLOCATION, "Malloc aicpu_ext_handle mem failed!"); + GE_CHK_BOOL_RET_STATUS(aicpu_ext_handle_ != nullptr, ACL_ERROR_GE_MEMORY_ALLOCATION, + "Malloc aicpu_ext_handle mem failed!"); Status ret = aicpu_ext_handle_->Parse(kernel_ext_info); if (ret != SUCCESS) { @@ -401,7 +436,7 @@ Status AiCpuBaseTask::SetInputConst() { return SUCCESS; } -Status AiCpuBaseTask::UpdateExtInfo(const std::vector &input_desc, +Status AiCpuBaseTask::UpdateExtInfo(const std::vector &input_desc, std::vector &output_desc, rtStream_t stream) { GELOGI("Update ext info begin, unknown_type=%d.", unknown_type_); @@ -456,18 +491,19 @@ Status AiCpuBaseTask::UpdateOutputShape(vector &output_desc) { } GELOGD("Start to update DEPEND_SHAPE_RANGE AiCpuBaseTask outputshape."); - GE_CHK_RT_RET(rtMemcpy(aicpu_ext_handle_->GetExtInfo(), - aicpu_ext_handle_->GetExtInfoLen(), - ext_info_addr_dev_, - aicpu_ext_handle_->GetExtInfoLen(), - RT_MEMCPY_DEVICE_TO_HOST)); + GE_CHK_RT_RET(rtMemcpy(aicpu_ext_handle_->GetExtInfo(), aicpu_ext_handle_->GetExtInfoLen(), ext_info_addr_dev_, + aicpu_ext_handle_->GetExtInfoLen(), RT_MEMCPY_DEVICE_TO_HOST)); for (size_t i = 0; i < num_outputs_; ++i) { GeShape shape; DataType data_type; aicpu_ext_handle_->GetOutputShapeAndType(i, shape, data_type); - GE_CHK_STATUS_RET(UpdateShapeToOutputDesc(shape, output_desc[i]), - "AiCpuCCTask Update [%zu]th output shape failed.", i); + GE_CHK_STATUS_RET(UpdateShapeToOutputDesc(shape, output_desc[i]), "AiCpuCCTask Update [%zu]th output shape failed.", + i); + if (DumpManager::GetInstance().GetDumpProperties(kInferSessionId).IsSingleOpNeedDump()) { + GE_CHK_STATUS_RET(op_desc_->UpdateOutputDesc(i, output_desc[i]), "AiCpuCCTask Update [%zu]th output desc failed.", + i); + } } GELOGD("Update DEPEND_SHAPE_RANGE AiCpuBaseTask outputshape finished."); return SUCCESS; @@ -578,12 +614,6 @@ Status AiCpuTask::LaunchKernel(rtStream_t stream) { } GELOGI("[TASK_INFO] %lu/%s", kernel_id_, op_type_.c_str()); - auto status = OpenDump(stream); - if (status != SUCCESS) { - GELOGE(status, "Open dump failed in aicpu single op %s", this->op_type_.c_str()); - return status; - } - GELOGD("Done launch kernel successfully. task = %s", this->op_type_.c_str()); return SUCCESS; } @@ -664,10 +694,10 @@ Status AiCpuTask::UpdateShapeByHbmBuffer(vector &output_desc) { const auto &shape_hbm = out_shape_hbm_[i]; uint32_t dim_num = result_summary.shape_data_size / sizeof(int64_t); - std::unique_ptr shape_addr(new(std::nothrow) int64_t[dim_num]()); + std::unique_ptr shape_addr(new (std::nothrow) int64_t[dim_num]()); GE_CHECK_NOTNULL(shape_addr); - GE_CHK_RT_RET(rtMemcpy(shape_addr.get(), result_summary.shape_data_size, - shape_hbm, result_summary.shape_data_size, RT_MEMCPY_DEVICE_TO_HOST)); + GE_CHK_RT_RET(rtMemcpy(shape_addr.get(), result_summary.shape_data_size, shape_hbm, + result_summary.shape_data_size, RT_MEMCPY_DEVICE_TO_HOST)); for (uint32_t dim_idx = 0; dim_idx < dim_num; ++dim_idx) { shape_dims.emplace_back(shape_addr[dim_idx]); @@ -677,10 +707,15 @@ Status AiCpuTask::UpdateShapeByHbmBuffer(vector &output_desc) { GE_CHK_STATUS_RET(UpdateShapeToOutputDesc(GeShape(shape_dims), output_desc[i]), "AiCpuTask update [%zu]th output shape failed.", i); + if (DumpManager::GetInstance().GetDumpProperties(kInferSessionId).IsSingleOpNeedDump()) { + GE_CHK_STATUS_RET(op_desc_->UpdateOutputDesc(i, output_desc[i]), "AiCpuTask update [%zu]th output desc failed.", + i); + } } return SUCCESS; } + Status AiCpuTask::UpdateShapeAndDataByResultSummary(vector &output_desc, vector &outputs, rtStream_t stream) { @@ -811,7 +846,7 @@ Status AiCpuBaseTask::UpdateArgTable(const SingleOpModelParam ¶m) { return DoUpdateArgTable(param, false); } -uint32_t AiCpuBaseTask::GetTaskType() const { return kTaskTypeAicpu; } +const std::string &AiCpuBaseTask::GetTaskType() const { return kTaskTypeAicpu; } void AiCpuTask::GetIoAddr(uintptr_t *&arg_base, size_t &arg_count) { arg_base = reinterpret_cast(io_addr_host_.data()); @@ -853,12 +888,6 @@ Status AiCpuCCTask::LaunchKernel(rtStream_t stream) { } GELOGI("[TASK_INFO] %lu/%s", kernel_id_, op_type_.c_str()); GELOGD("Invoke rtCpuKernelLaunch succeeded"); - auto status = OpenDump(stream); - if (status != SUCCESS) { - GELOGE(status, "Open dump failed in the aicpucc single op %s", this->kernel_name_.c_str()); - return status; - } - return SUCCESS; } diff --git a/ge/single_op/task/op_task.h b/ge/single_op/task/op_task.h index 78e1f6f0..8c91bd5f 100644 --- a/ge/single_op/task/op_task.h +++ b/ge/single_op/task/op_task.h @@ -43,7 +43,7 @@ class OpTask { const vector &output_desc); virtual Status UpdateArgTable(const SingleOpModelParam ¶m); void SetModelArgs(std::string model_name, uint32_t model_id); - Status GetProfilingArgs(std::string &model_name, std::string &op_name, uint32_t &model_id, uint32_t &block_dim); + Status GetProfilingArgs(TaskDescInfo &task_desc_info, uint32_t &model_id); const OpDescPtr &GetOpdesc() const {return op_desc_;} Status OpenDump(rtStream_t stream); virtual void GetIoAddr(uintptr_t *&arg_base, size_t &arg_count) = 0; @@ -52,7 +52,7 @@ class OpTask { std::vector &output_desc, std::vector &output_buffers, rtStream_t stream); - virtual uint32_t GetTaskType() const; + virtual const std::string &GetTaskType() const; protected: Status DoUpdateArgTable(const SingleOpModelParam ¶m, bool keep_workspace); @@ -78,6 +78,8 @@ class TbeOpTask : public OpTask { void SetSmDesc(void *sm_desc); void SetStubFunc(const std::string &name, const void *stub_func); void SetKernelArgs(std::unique_ptr &&args, size_t arg_size, uint32_t block_dim, const OpDescPtr &op_desc); + void SetKernelWithHandleArgs(std::unique_ptr &&args, size_t arg_size, uint32_t block_dim, + const OpDescPtr &op_desc, const domi::KernelDefWithHandle& kernel_def_with_handle); Status UpdateRunInfo(const vector &input_desc, const vector &output_desc) override; @@ -86,7 +88,8 @@ class TbeOpTask : public OpTask { size_t GetArgSize() const; const std::string &GetStubName() const; void EnableDynamicSupport(const NodePtr &node, void *tiling_buffer, size_t max_tiling_size); - uint32_t GetTaskType() const override; + const std::string &GetTaskType() const override; + void SetHandle(void *handle); private: friend class SingleOpModel; @@ -107,6 +110,11 @@ class TbeOpTask : public OpTask { std::string tiling_data_; std::vector workspaces_; NodePtr node_; + + uint32_t tiling_key_ = 0; + void* handle_ = nullptr; + std::string original_kernel_key_; + std::string node_info_; }; class AiCpuBaseTask : public OpTask { @@ -115,7 +123,7 @@ class AiCpuBaseTask : public OpTask { ~AiCpuBaseTask() override; UnknowShapeOpType GetUnknownType() const { return unknown_type_; } Status UpdateArgTable(const SingleOpModelParam ¶m) override; - uint32_t GetTaskType() const override; + const std::string &GetTaskType() const override; protected: Status UpdateIoAddr(const std::vector &inputs, const std::vector &outputs); diff --git a/ge/single_op/task/tbe_task_builder.cc b/ge/single_op/task/tbe_task_builder.cc index 6eee61d0..606f8087 100644 --- a/ge/single_op/task/tbe_task_builder.cc +++ b/ge/single_op/task/tbe_task_builder.cc @@ -49,6 +49,15 @@ KernelHolder::~KernelHolder() { } } +HandleHolder::HandleHolder(void *bin_handle) + : bin_handle_(bin_handle) {} + +HandleHolder::~HandleHolder() { + if (bin_handle_ != nullptr) { + GE_CHK_RT(rtDevBinaryUnRegister(bin_handle_)); + } +} + const char *KernelBinRegistry::GetUnique(const string &stub_func) { std::lock_guard lock(mutex_); auto it = unique_stubs_.find(stub_func); @@ -76,10 +85,17 @@ bool KernelBinRegistry::AddKernel(const std::string &stub_name, std::unique_ptr< return ret.second; } -TbeTaskBuilder::TbeTaskBuilder(const std::string &model_name, const NodePtr &node, const domi::KernelDef &kernel_def) +bool HandleRegistry::AddHandle(std::unique_ptr &&holder) { + auto ret = registered_handles_.emplace(std::move(holder)); + return ret.second; +} + +TbeTaskBuilder::TbeTaskBuilder(const std::string &model_name, const NodePtr &node, const domi::TaskDef &task_def) : node_(node), op_desc_(node->GetOpDesc()), - kernel_def_(kernel_def), + task_def_(task_def), + kernel_def_(task_def.kernel()), + kernel_def_with_handle_(task_def.kernel_with_handle()), stub_name_(model_name + "/" + node->GetName() + "_tvmbin") {} Status TbeTaskBuilder::DoRegisterBinary(const OpKernelBin &kernel_bin, void **bin_handle, @@ -89,9 +105,14 @@ Status TbeTaskBuilder::DoRegisterBinary(const OpKernelBin &kernel_bin, void **bi binary.data = kernel_bin.GetBinData(); binary.length = kernel_bin.GetBinDataSize(); binary.magic = param.core_type == 0 ? RT_DEV_BINARY_MAGIC_ELF : RT_DEV_BINARY_MAGIC_ELF_AIVEC; - auto ret = rtDevBinaryRegister(&binary, bin_handle); + Status ret = 0; + if (task_def_.type() == RT_MODEL_TASK_ALL_KERNEL) { + ret = rtRegisterAllKernel(&binary, bin_handle); + } else { + ret = rtDevBinaryRegister(&binary, bin_handle); + } if (ret != RT_ERROR_NONE) { - GELOGE(ret, "rtDevBinaryRegister failed, bin key = %s, core_type = %ld, rt ret = %d", stub_name_.c_str(), + GELOGE(ret, "DoRegisterBinary failed, bin key = %s, core_type = %ld, rt ret = %d", stub_name_.c_str(), param.core_type, static_cast(ret)); return ret; } @@ -128,14 +149,15 @@ Status TbeTaskBuilder::DoRegisterFunction(void *bin_handle, const char *stub_nam Status TbeTaskBuilder::DoRegisterKernel(const ge::OpKernelBin &tbe_kernel, const char *bin_file_key, void **bin_handle, const SingleOpModelParam ¶m) { - std::string kernel_name; - GetKernelName(op_desc_, kernel_name); - void *handle = nullptr; auto ret = DoRegisterBinary(tbe_kernel, &handle, param); if (ret != SUCCESS) { return ret; } + if (task_def_.type() == RT_MODEL_TASK_ALL_KERNEL) { + *bin_handle = handle; + return SUCCESS; + } ret = DoRegisterMeta(handle); if (ret != SUCCESS) { @@ -143,6 +165,8 @@ Status TbeTaskBuilder::DoRegisterKernel(const ge::OpKernelBin &tbe_kernel, const return ret; } + std::string kernel_name; + GetKernelName(op_desc_, kernel_name); ret = DoRegisterFunction(handle, bin_file_key, kernel_name.c_str()); if (ret != SUCCESS) { GE_CHK_RT(rtDevBinaryUnRegister(handle)); @@ -186,13 +210,15 @@ Status TbeTaskBuilder::RegisterKernel(TbeOpTask &task, const SingleOpModelParam void *bin_handle = nullptr; auto ret = DoRegisterKernel(*tbe_kernel, stub_func, &bin_handle, param); - if (ret == SUCCESS) { - holder->SetBinHandle(bin_handle); - if (!registry.AddKernel(stub_name_, std::move(holder))) { - // should not happen. only one thread can reach here - GELOGE(ACL_ERROR_GE_INTERNAL_ERROR, "Add kernel failed. stub name = %s", stub_name_.c_str()); - return ACL_ERROR_GE_INTERNAL_ERROR; - } + if (ret != SUCCESS) { + GELOGE(ACL_ERROR_GE_INTERNAL_ERROR, "RegisterKernel failed. stub name = %s", stub_name_.c_str()); + return ACL_ERROR_GE_INTERNAL_ERROR; + } + holder->SetBinHandle(bin_handle); + if (!registry.AddKernel(stub_name_, std::move(holder))) { + // should not happen. only one thread can reach here + GELOGE(ACL_ERROR_GE_INTERNAL_ERROR, "Add kernel failed. stub name = %s", stub_name_.c_str()); + return ACL_ERROR_GE_INTERNAL_ERROR; } } @@ -200,6 +226,35 @@ Status TbeTaskBuilder::RegisterKernel(TbeOpTask &task, const SingleOpModelParam return SUCCESS; } +Status TbeTaskBuilder::RegisterKernelWithHandle(TbeOpTask &task, const SingleOpModelParam ¶m) { + GELOGD("RegisterKernelWithHandle begin."); + HandleRegistry ®istry = HandleRegistry::GetInstance(); + auto tbe_kernel = GetTbeKernel(op_desc_); + if (tbe_kernel == nullptr) { + GELOGE(ACL_ERROR_GE_INTERNAL_ERROR, "OP EXT ATTR NAME TBE_KERNEL not found. op = %s", + op_desc_->GetName().c_str()); + return ACL_ERROR_GE_INTERNAL_ERROR; + } + void *bin_handle = nullptr; + auto ret = DoRegisterKernel(*tbe_kernel, nullptr, &bin_handle, param); + if (ret != SUCCESS) { + GELOGE(ACL_ERROR_GE_INTERNAL_ERROR, "RegisterKernel failed. node name = %s", op_desc_->GetName().c_str()); + return ACL_ERROR_GE_INTERNAL_ERROR; + } + handle_ = bin_handle; + auto holder = std::unique_ptr(new (std::nothrow) HandleHolder(handle_)); + if (holder == nullptr) { + GELOGE(ACL_ERROR_GE_MEMORY_ALLOCATION, "create HandleHodler failed."); + return ACL_ERROR_GE_MEMORY_ALLOCATION; + } + if (!registry.AddHandle(std::move(holder))) { + GELOGE(ACL_ERROR_GE_INTERNAL_ERROR, "Add handle failed. node name = %s", op_desc_->GetName().c_str()); + return ACL_ERROR_GE_INTERNAL_ERROR; + } + + return SUCCESS; +} + Status TbeTaskBuilder::GetSmDesc(void **sm_desc, const SingleOpModelParam ¶m) const { const std::string &sm_desc_str = kernel_def_.sm_desc(); if (sm_desc_str.empty()) { @@ -217,17 +272,17 @@ Status TbeTaskBuilder::GetSmDesc(void **sm_desc, const SingleOpModelParam ¶m } } - auto rtRet = rtMemAllocManaged(sm_desc, sm_desc_str.size(), RT_MEMORY_SPM); - if (rtRet != RT_ERROR_NONE) { - GELOGE(rtRet, "rtMemAllocManaged failed, ret: %d", static_cast(rtRet)); - return rtRet; + auto rt_ret = rtMemAllocManaged(sm_desc, sm_desc_str.size(), RT_MEMORY_SPM); + if (rt_ret != RT_ERROR_NONE) { + GELOGE(rt_ret, "rtMemAllocManaged failed, ret: %d", static_cast(rt_ret)); + return rt_ret; } - rtRet = rtMemcpy(*sm_desc, sm_desc_str.size(), sm_desc_str.data(), sm_desc_str.size(), RT_MEMCPY_HOST_TO_DEVICE); - if (rtRet != RT_ERROR_NONE) { + rt_ret = rtMemcpy(*sm_desc, sm_desc_str.size(), sm_desc_str.data(), sm_desc_str.size(), RT_MEMCPY_HOST_TO_DEVICE); + if (rt_ret != RT_ERROR_NONE) { (void)rtMemFreeManaged(*sm_desc); - GELOGE(rtRet, "rtMemcpy, ret: %d", static_cast(rtRet)); - return rtRet; + GELOGE(rt_ret, "rtMemcpy, ret: %d", static_cast(rt_ret)); + return rt_ret; } } @@ -239,10 +294,10 @@ Status TbeTaskBuilder::SetKernelArgs(TbeOpTask &task, const SingleOpModelParam & auto args = std::unique_ptr(new (std::nothrow) uint8_t[arg_size]); GE_CHECK_NOTNULL(args); - auto rtRet = rtMemcpy(args.get(), arg_size, kernel_def_.args().data(), arg_size, RT_MEMCPY_HOST_TO_HOST); - if (rtRet != RT_ERROR_NONE) { - GELOGE(rtRet, "rtMemcpy args failed, size = %zu, ret = %d", arg_size, static_cast(rtRet)); - return RT_ERROR_TO_GE_STATUS(rtRet); + auto rt_ret = rtMemcpy(args.get(), arg_size, kernel_def_.args().data(), arg_size, RT_MEMCPY_HOST_TO_HOST); + if (rt_ret != RT_ERROR_NONE) { + GELOGE(rt_ret, "rtMemcpy args failed, size = %zu, ret = %d", arg_size, static_cast(rt_ret)); + return RT_ERROR_TO_GE_STATUS(rt_ret); } const domi::KernelContext &context = kernel_def_.context(); @@ -258,39 +313,83 @@ Status TbeTaskBuilder::SetKernelArgs(TbeOpTask &task, const SingleOpModelParam & std::vector tensor_device_addr_vec = BuildTaskUtils::GetKernelArgs(op_desc_, param); void *src_addr = reinterpret_cast(tensor_device_addr_vec.data()); uint64_t src_len = sizeof(void *) * tensor_device_addr_vec.size(); - rtRet = rtMemcpy(args.get() + offset, arg_size - offset, src_addr, src_len, RT_MEMCPY_HOST_TO_HOST); - if (rtRet != RT_ERROR_NONE) { - GELOGE(rtRet, "rtMemcpy addresses failed, ret = %d", static_cast(rtRet)); - return RT_ERROR_TO_GE_STATUS(rtRet); + rt_ret = rtMemcpy(args.get() + offset, arg_size - offset, src_addr, src_len, RT_MEMCPY_HOST_TO_HOST); + if (rt_ret != RT_ERROR_NONE) { + GELOGE(rt_ret, "rtMemcpy addresses failed, ret = %d", static_cast(rt_ret)); + return RT_ERROR_TO_GE_STATUS(rt_ret); } } - task.SetKernelArgs(std::move(args), arg_size, kernel_def_.block_dim(), op_desc); + + return SUCCESS; +} + +Status TbeTaskBuilder::SetKernelWithHandleArgs(TbeOpTask &task, const SingleOpModelParam ¶m, + const OpDescPtr &op_desc) { + size_t arg_size = kernel_def_with_handle_.args_size(); + auto args = std::unique_ptr(new (std::nothrow) uint8_t[arg_size]); + GE_CHECK_NOTNULL(args); + + auto rt_ret = rtMemcpy(args.get(), arg_size, kernel_def_with_handle_.args().data(), arg_size, RT_MEMCPY_HOST_TO_HOST); + if (rt_ret != RT_ERROR_NONE) { + GELOGE(rt_ret, "rtMemcpy args failed, size = %zu, ret = %d", arg_size, static_cast(rt_ret)); + return rt_ret; + } + + const domi::KernelContext &context = kernel_def_with_handle_.context(); + const auto *args_offset_tmp = reinterpret_cast(context.args_offset().data()); + uint16_t offset = *args_offset_tmp; + + bool is_dynamic = false; + (void)AttrUtils::GetBool(op_desc_, kAttrSupportDynamicShape, is_dynamic); + if (is_dynamic) { + GE_CHK_STATUS_RET_NOLOG(InitTilingInfo(task)); + } else { + // copy args + std::vector tensor_device_addr_vec = BuildTaskUtils::GetKernelArgs(op_desc_, param); + void *src_addr = reinterpret_cast(tensor_device_addr_vec.data()); + uint64_t src_len = sizeof(void *) * tensor_device_addr_vec.size(); + rt_ret = rtMemcpy(args.get() + offset, arg_size - offset, src_addr, src_len, RT_MEMCPY_HOST_TO_HOST); + if (rt_ret != RT_ERROR_NONE) { + GELOGE(rt_ret, "rtMemcpy addresses failed, ret = %d", static_cast(rt_ret)); + return rt_ret; + } + } + task.SetKernelWithHandleArgs(std::move(args), arg_size, kernel_def_with_handle_.block_dim(), op_desc, + kernel_def_with_handle_); + return SUCCESS; } Status TbeTaskBuilder::BuildTask(TbeOpTask &task, const SingleOpModelParam ¶m) { GELOGD("Build tbe task begin"); - auto ret = SetKernelArgs(task, param, op_desc_); + auto task_type = static_cast(task_def_.type()); + auto ret = task_type == RT_MODEL_TASK_ALL_KERNEL ? SetKernelWithHandleArgs(task, param, op_desc_) : + SetKernelArgs(task, param, op_desc_); if (ret != SUCCESS) { return ret; } - ret = RegisterKernel(task, param); + ret = task_type == RT_MODEL_TASK_ALL_KERNEL ? RegisterKernelWithHandle(task, param) : + RegisterKernel(task, param); + task.SetHandle(handle_); if (ret != SUCCESS) { return ret; } + auto task_info = BuildTaskUtils::GetTaskInfo(op_desc_); GELOGI("[TASK_INFO] %s %s", stub_name_.c_str(), task_info.c_str()); - void *stub_func = nullptr; - auto rtRet = rtGetFunctionByName(stub_name_.c_str(), &stub_func); - if (rtRet != SUCCESS) { - GELOGE(rtRet, "rtGetFunctionByName failed."); - return RT_ERROR_TO_GE_STATUS(rtRet); + if (task_type != RT_MODEL_TASK_ALL_KERNEL) { + void *stub_func = nullptr; + auto rt_ret = rtGetFunctionByName(stub_name_.c_str(), &stub_func); + if (rt_ret != SUCCESS) { + GELOGE(rt_ret, "rtGetFunctionByName failed."); + return RT_ERROR_TO_GE_STATUS(rt_ret); + } + task.SetStubFunc(stub_name_, stub_func); } - task.SetStubFunc(stub_name_, stub_func); return SUCCESS; } @@ -299,15 +398,16 @@ Status TbeTaskBuilder::InitTilingInfo(TbeOpTask &task) { int64_t max_size = -1; (void)AttrUtils::GetInt(op_desc_, kAttrOpParamSize, max_size); GELOGD("Got op param size by key: %s, ret = %ld", kAttrOpParamSize, max_size); - if (max_size <= 0) { + if (max_size < 0) { GELOGE(ACL_ERROR_GE_PARAM_INVALID, "[%s] Invalid op_param_size: %ld.", op_desc_->GetName().c_str(), max_size); return ACL_ERROR_GE_PARAM_INVALID; } - void *tiling_buffer = nullptr; - GE_CHK_RT_RET(rtMalloc(&tiling_buffer, static_cast(max_size), RT_MEMORY_HBM)); - GE_CHECK_NOTNULL(tiling_buffer); - GELOGD("[%s] Done allocating tiling buffer, size=%ld.", op_desc_->GetName().c_str(), max_size); + if (max_size > 0) { + GE_CHK_RT_RET(rtMalloc(&tiling_buffer, static_cast(max_size), RT_MEMORY_HBM)); + GE_CHECK_NOTNULL(tiling_buffer); + GELOGD("[%s] Done allocating tiling buffer, size=%ld.", op_desc_->GetName().c_str(), max_size); + } task.EnableDynamicSupport(node_, tiling_buffer, static_cast(max_size)); return SUCCESS; diff --git a/ge/single_op/task/tbe_task_builder.h b/ge/single_op/task/tbe_task_builder.h index 5cd5c463..8af9a68d 100755 --- a/ge/single_op/task/tbe_task_builder.h +++ b/ge/single_op/task/tbe_task_builder.h @@ -42,6 +42,19 @@ class KernelHolder { std::shared_ptr kernel_bin_; }; +class HandleHolder { + public: + HandleHolder(void *bin_handle); + ~HandleHolder(); + + void SetBinHandle(void *bin_handle) { bin_handle_ = bin_handle; } + void *GetBinHandle() { return bin_handle_; } + + private: + friend class HandleRegistry; + void *bin_handle_ = nullptr; +}; + class KernelBinRegistry { public: static KernelBinRegistry &GetInstance() { @@ -61,9 +74,22 @@ class KernelBinRegistry { std::mutex mutex_; }; +class HandleRegistry { + public: + static HandleRegistry &GetInstance() { + static HandleRegistry instance; + return instance; + } + + bool AddHandle(std::unique_ptr &&holder); + + private: + std::set> registered_handles_; +}; + class TbeTaskBuilder { public: - TbeTaskBuilder(const std::string &model_name, const NodePtr &node, const domi::KernelDef &kernel_def); + TbeTaskBuilder(const std::string &model_name, const NodePtr &node, const domi::TaskDef &task_def); ~TbeTaskBuilder() = default; Status BuildTask(TbeOpTask &task, const SingleOpModelParam ¶m); @@ -71,9 +97,11 @@ class TbeTaskBuilder { private: Status InitTilingInfo(TbeOpTask &task); Status SetKernelArgs(TbeOpTask &task, const SingleOpModelParam ¶m, const OpDescPtr &op_desc); + Status SetKernelWithHandleArgs(TbeOpTask &task, const SingleOpModelParam ¶m, const OpDescPtr &op_desc); Status GetSmDesc(void **sm_desc, const SingleOpModelParam ¶m) const; Status RegisterKernel(TbeOpTask &task, const SingleOpModelParam ¶m); + Status RegisterKernelWithHandle(TbeOpTask &task, const SingleOpModelParam ¶m); Status DoRegisterKernel(const OpKernelBin &kernel_bin, const char *bin_file_key, void **bin_handle, const SingleOpModelParam ¶m); Status DoRegisterBinary(const OpKernelBin &kernel_bin, void **bin_handle, const SingleOpModelParam ¶m) const; @@ -83,8 +111,11 @@ class TbeTaskBuilder { const NodePtr node_; const OpDescPtr op_desc_; + const domi::TaskDef &task_def_; const domi::KernelDef &kernel_def_; + const domi::KernelDefWithHandle &kernel_def_with_handle_; const std::string stub_name_; + void *handle_ = nullptr; }; } // namespace ge diff --git a/inc/external/acl/acl.h b/inc/external/acl/acl.h index eae87835..ef5b4772 100644 --- a/inc/external/acl/acl.h +++ b/inc/external/acl/acl.h @@ -26,9 +26,9 @@ extern "C" { #endif // Current version is 1.0.0 -#define ACL_MAJOR_VERSION 1 -#define ACL_MINOR_VERSION 0 -#define ACL_PATCH_VERSION 0 +#define ACL_MAJOR_VERSION 1 +#define ACL_MINOR_VERSION 0 +#define ACL_PATCH_VERSION 0 /** * @ingroup AscendCL @@ -70,4 +70,4 @@ ACL_FUNC_VISIBILITY aclError aclrtGetVersion(int32_t *majorVersion, int32_t *min } #endif -#endif // INC_EXTERNAL_ACL_ACL_H_ +#endif // INC_EXTERNAL_ACL_ACL_H_ diff --git a/inc/external/ge/ge_api.h b/inc/external/ge/ge_api.h index cd4ca323..c8b5a8ec 100644 --- a/inc/external/ge/ge_api.h +++ b/inc/external/ge/ge_api.h @@ -42,6 +42,10 @@ GE_FUNC_VISIBILITY Status GEInitialize(const std::map &)) diff --git a/inc/external/ge/ge_api_error_codes.h b/inc/external/ge/ge_api_error_codes.h index 274a9784..d0d7981e 100644 --- a/inc/external/ge/ge_api_error_codes.h +++ b/inc/external/ge/ge_api_error_codes.h @@ -110,9 +110,9 @@ 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_TRANSSHAPE_FORMAT_INVALID, "Format is invalid when transferring shape."); -GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID, "Shape is invalid when transferring shape."); -GE_ERRORNO_EXTERNAL(ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID, "Datatype is invalid when transferring shape."); +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."); diff --git a/inc/external/ge/ge_error_codes.h b/inc/external/ge/ge_error_codes.h index b477a18c..cafc5a64 100644 --- a/inc/external/ge/ge_error_codes.h +++ b/inc/external/ge/ge_error_codes.h @@ -53,9 +53,9 @@ 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_TRANSSHAPE_FORMAT_INVALID = 145020; -static const uint32_t ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID = 145021; -static const uint32_t ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID = 145022; +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; diff --git a/inc/framework/common/ge_types.h b/inc/framework/common/ge_types.h index ec5adcba..0d996a67 100644 --- a/inc/framework/common/ge_types.h +++ b/inc/framework/common/ge_types.h @@ -57,9 +57,9 @@ const char *const GE_ENGINE_ATTR_MEM_TYPE_HBM = "HBM"; const char *const GE_OPTION_EXEC_PLACEMENT = "ge.exec.placement"; // profiling data -const uint32_t kTaskTypeAicore = 0; -const uint32_t kTaskTypeAicpu = 1; -const uint32_t kTaskTypeInvalid = 0xFFFF; +const std::string kTaskTypeAicore = "AI_CORE"; +const std::string kTaskTypeAicpu = "AI_CPU"; +const std::string kTaskTypeInvalid = "TASK_TYPE_INVALID"; // Data cache, including data address and length struct DataBuffer { @@ -251,27 +251,19 @@ struct Options { struct TaskDescInfo { std::string model_name; std::string op_name; + std::string op_type; uint32_t block_dim; uint32_t task_id; uint32_t stream_id; std::string shape_type; int64_t cur_iter_num; - uint32_t task_type; -}; - -// Profiling info of graph -struct ComputeGraphDescInfo { - std::string model_name; - std::string op_name; - std::string op_type; + std::string task_type; std::vector input_format; std::vector> input_shape; std::vector input_data_type; std::vector output_format; std::vector> output_shape; std::vector output_data_type; - uint32_t task_id; - uint32_t stream_id; }; struct OpDescInfo { diff --git a/inc/framework/executor/ge_executor.h b/inc/framework/executor/ge_executor.h index c546f63d..9da630c9 100644 --- a/inc/framework/executor/ge_executor.h +++ b/inc/framework/executor/ge_executor.h @@ -260,12 +260,18 @@ class GE_FUNC_VISIBILITY GeExecutor { static ge::Status LoadSingleOp(const std::string &modelName, const ge::ModelData &modelData, void *stream, SingleOp **single_op); + static ge::Status LoadSingleOpV2(const std::string &modelName, const ge::ModelData &modelData, void *stream, + SingleOp **single_op, const uint64_t model_id); + static ge::Status ExecuteAsync(SingleOp *executor, const std::vector &inputs, std::vector &outputs); static ge::Status LoadDynamicSingleOp(const std::string &model_name, const ge::ModelData &modelData, void *stream, DynamicSingleOp **single_op); + static ge::Status LoadDynamicSingleOpV2(const std::string &model_name, const ge::ModelData &modelData, void *stream, + DynamicSingleOp **single_op, const uint64_t model_id); + static ge::Status ExecuteAsync(DynamicSingleOp *executor, const std::vector &input_desc, const std::vector &inputs, std::vector &output_desc, std::vector &outputs); diff --git a/inc/framework/generator/generator_api.h b/inc/framework/generator/generator_api.h index d44edd0c..56b83a20 100644 --- a/inc/framework/generator/generator_api.h +++ b/inc/framework/generator/generator_api.h @@ -55,7 +55,8 @@ typedef void *OpTensor_t; /// @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); + const OpTensor_t *out_tensor, int out_num, const OpAttr_t attr, + const char *om_file); /// /// @ingroup ge diff --git a/inc/framework/memory/memory_api.h b/inc/framework/memory/memory_api.h index 34e596a2..a316fd59 100644 --- a/inc/framework/memory/memory_api.h +++ b/inc/framework/memory/memory_api.h @@ -52,7 +52,8 @@ GE_FUNC_VISIBILITY Status InitRdmaPool(size_t size, rtMemType_t mem_type = RT_ME /// \param var_info [in] host variable addr infos. /// \param mem_type [in] memory type for rdma pool. /// \return Status result of function -GE_FUNC_VISIBILITY Status RdmaRemoteRegister(const std::vector &var_info, rtMemType_t mem_type = RT_MEMORY_HBM); +GE_FUNC_VISIBILITY Status RdmaRemoteRegister(const std::vector &var_info, + rtMemType_t mem_type = RT_MEMORY_HBM); /// /// \param tensor_info [in] description for tensor stored shared memory. diff --git a/ge/graph/load/model_manager/davinci_model_parser.cc b/inc/framework/omg/ge_init.h similarity index 56% rename from ge/graph/load/model_manager/davinci_model_parser.cc rename to inc/framework/omg/ge_init.h index c6f48b84..42fd8979 100644 --- a/ge/graph/load/model_manager/davinci_model_parser.cc +++ b/inc/framework/omg/ge_init.h @@ -14,10 +14,23 @@ * limitations under the License. */ -#include "graph/load/model_manager/davinci_model_parser.h" +#ifndef INC_FRAMEWORK_OMG_GE_INIT_H_ +#define INC_FRAMEWORK_OMG_GE_INIT_H_ +#include +#include +#include "common/ge_inner_error_codes.h" namespace ge { -DavinciModelParser::DavinciModelParser() {} +class GE_FUNC_VISIBILITY GEInit { + public: + // GE Environment Initialize, return Status: SUCCESS,FAILED + static Status Initialize(const std::map &options); -DavinciModelParser::~DavinciModelParser() {} + static std::string GetPath(); + + // GE Environment Finalize, return Status: SUCCESS,FAILED + static Status Finalize(); +}; } // namespace ge + +#endif // INC_FRAMEWORK_OMG_GE_INIT_H_ diff --git a/ge/graph/load/model_manager/davinci_model_parser.h b/inc/framework/omg/model_tool.h old mode 100755 new mode 100644 similarity index 50% rename from ge/graph/load/model_manager/davinci_model_parser.h rename to inc/framework/omg/model_tool.h index 83eb4cc3..8c425823 --- a/ge/graph/load/model_manager/davinci_model_parser.h +++ b/inc/framework/omg/model_tool.h @@ -1,5 +1,5 @@ /** - * Copyright 2020 Huawei Technologies Co., Ltd + * 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. @@ -14,33 +14,22 @@ * limitations under the License. */ -#ifndef GE_GRAPH_LOAD_NEW_MODEL_MANAGER_DAVINCI_MODEL_PARSER_H_ -#define GE_GRAPH_LOAD_NEW_MODEL_MANAGER_DAVINCI_MODEL_PARSER_H_ +#ifndef INC_FRAMEWORK_OMG_MODEL_TOOL_H_ +#define INC_FRAMEWORK_OMG_MODEL_TOOL_H_ -#include #include +#include -#include "common/debug/log.h" -#include "common/ge_types.h" -#include "common/model_parser/base.h" -#include "common/types.h" -#include "common/util.h" +#include "framework/common/debug/ge_log.h" +#include "proto/ge_ir.pb.h" namespace ge { -class DavinciModelParser : public ModelParserBase { +class GE_FUNC_VISIBILITY ModelTool { public: - /// - /// @ingroup hiai - /// @brief constructor - /// - DavinciModelParser(); + static Status GetModelInfoFromOm(const char *model_file, ge::proto::ModelDef &model_def, uint32_t &modeldef_size); - /// - /// @ingroup hiai - /// @brief destructor - /// - ~DavinciModelParser(); + static Status GetModelInfoFromPbtxt(const char *model_file, ge::proto::ModelDef &model_def); }; } // namespace ge -#endif // GE_GRAPH_LOAD_NEW_MODEL_MANAGER_DAVINCI_MODEL_PARSER_H_ +#endif // INC_FRAMEWORK_OMG_MODEL_TOOL_H_ diff --git a/metadef b/metadef index 2f2cd62c..2607691f 160000 --- a/metadef +++ b/metadef @@ -1 +1 @@ -Subproject commit 2f2cd62c399079f8c3b0dc9aada81c447878dad7 +Subproject commit 2607691fc5edaad412d21c9f4a3284b02cfc8c5e diff --git a/parser b/parser index cfabf622..6a07f1a8 160000 --- a/parser +++ b/parser @@ -1 +1 @@ -Subproject commit cfabf622b803d5957563a73652a0ce5086aab99d +Subproject commit 6a07f1a8b9b8b4630a5b60d9d8d02ec4a6314d68 diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index abea9fdc..a56705e0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -19,7 +19,6 @@ add_subdirectory(depends/cce) add_subdirectory(depends/slog) add_subdirectory(depends/mmpa) add_subdirectory(depends/runtime) -add_subdirectory(depends/omg) add_subdirectory(depends/hccl) add_subdirectory(depends/profiler) add_subdirectory(depends/error_manager) diff --git a/tests/depends/error_manager/src/error_manager_stub.cc b/tests/depends/error_manager/src/error_manager_stub.cc index a57b2457..eadc8687 100644 --- a/tests/depends/error_manager/src/error_manager_stub.cc +++ b/tests/depends/error_manager/src/error_manager_stub.cc @@ -16,6 +16,8 @@ #include "common/util/error_manager/error_manager.h" +using namespace ErrorMessage; + ErrorManager &ErrorManager::GetInstance() { static ErrorManager instance; return instance; @@ -58,7 +60,7 @@ /// @param [in] value: vector parameter value /// void ErrorManager::ATCReportErrMessage(std::string error_code, const std::vector &key, - const std::vector &value) { + const std::vector &value) { } /// @@ -78,3 +80,17 @@ int ErrorManager::GetMstuneCompileFailedMsg(const std::string &graph_name, std::map> &msg_map) { return 0; } + void ErrorManager::GenWorkStreamIdDefault() {} + + void ErrorManager::GenWorkStreamIdBySessionGraph(uint64_t session_id, uint64_t graph_id) {} + + const std::string &ErrorManager::GetLogHeader() { return "[TEST][TEST]"; } + + struct Context &ErrorManager::GetErrorContext() { + struct Context error_context; + return error_context; + } + +void ErrorManager::SetErrorContext(struct Context error_context) {} + +void ErrorManager::SetStage(const std::string &first_stage, const std::string &second_stage) {} diff --git a/tests/depends/mmpa/CMakeLists.txt b/tests/depends/mmpa/CMakeLists.txt index 567266cf..77a2ce13 100644 --- a/tests/depends/mmpa/CMakeLists.txt +++ b/tests/depends/mmpa/CMakeLists.txt @@ -29,6 +29,11 @@ include_directories(${GE_CODE_DIR}/inc/framework) include_directories(${GE_CODE_DIR}/metadef/inc/external) add_library(mmpa_stub SHARED ${SRCS}) + +target_compile_options(mmpa_stub PRIVATE + -g +) + target_link_libraries(mmpa_stub PRIVATE $ -Wl,--no-as-needed diff --git a/tests/depends/mmpa/src/mmpa_stub.cc b/tests/depends/mmpa/src/mmpa_stub.cc index de09c52c..5b6dbd22 100644 --- a/tests/depends/mmpa/src/mmpa_stub.cc +++ b/tests/depends/mmpa/src/mmpa_stub.cc @@ -230,7 +230,16 @@ INT32 mmGetTimeOfDay(mmTimeval *timeVal, mmTimezone *timeZone) INT32 mmRealPath(const CHAR *path, CHAR *realPath, INT32 realPathLen) { - return 0; + INT32 ret = EN_OK; + if (path == nullptr || realPath == nullptr || realPathLen < MMPA_MAX_PATH) { + return EN_INVALID_PARAM; + } + + char *ptr = realpath(path, realPath); + if (ptr == nullptr) { + ret = EN_ERROR; + } + return ret; } INT32 mmGetErrorCode() @@ -255,7 +264,7 @@ INT32 mmDlclose(VOID *handle) CHAR *mmDlerror() { - return ""; + return dlerror(); } INT32 mmDladdr(VOID *addr, mmDlInfo *info) diff --git a/tests/depends/omg/CMakeLists.txt b/tests/depends/omg/CMakeLists.txt deleted file mode 100644 index 50ce91b4..00000000 --- a/tests/depends/omg/CMakeLists.txt +++ /dev/null @@ -1,59 +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. -# ============================================================================ - -#cmake_minimum_required(VERSION 2.8) - -project(OMG_CCE) - -set(CMAKE_CXX_STANDARD 11) - -include_directories(${GE_CODE_DIR}/third_party/fwkacllib/inc) -include_directories(${GE_CODE_DIR}/third_party/fwkacllib/inc/cce) -include_directories(${GE_CODE_DIR}/inc) -include_directories(${GE_CODE_DIR}/metadef/inc) -include_directories(${GE_CODE_DIR}/inc/framework) -include_directories(${GE_CODE_DIR}/metadef/inc/graph) -include_directories(${GE_CODE_DIR}/inc/external) -include_directories(${GE_CODE_DIR}/metadef/inc/external) -include_directories(${GE_CODE_DIR}/metadef/inc/external/graph) -include_directories(${GE_CODE_DIR}/ge) -include_directories(${CMAKE_BINARY_DIR}) -include_directories(${CMAKE_BINARY_DIR}/proto/ge) -set(PROTO_LIST - "${GE_CODE_DIR}/metadef/proto/om.proto" - "${GE_CODE_DIR}/metadef/proto/task.proto" -) - -protobuf_generate(ge PROTO_SRCS PROTO_HDRS ${PROTO_LIST}) - -set(SRCS -# "${GE_CODE_DIR}/src/ge/common/util.cc" - "src/omg_stub.cc" -) - -add_library(omg_stub SHARED ${SRCS} ${PROTO_SRCS} ${PROTO_HDRS}) - -target_compile_definitions(omg_stub PRIVATE - google=ascend_private -) - -target_link_libraries(omg_stub PRIVATE - $ - -Wl,--no-as-needed - ascend_protobuf - -Wl,--as-needed - c_sec - json -) diff --git a/tests/depends/omg/src/omg_stub.cc b/tests/depends/omg/src/omg_stub.cc deleted file mode 100644 index 811db2d2..00000000 --- a/tests/depends/omg/src/omg_stub.cc +++ /dev/null @@ -1,878 +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. - */ - -#include -#include -#include -#include -#include - -#include "mmpa/mmpa_api.h" -#include "common/debug/log.h" -#include "common/debug/memory_dumper.h" -#include "common/types.h" -#include "common/util.h" -#include "common/string_util.h" -#include "common/properties_manager.h" -#include "common/model_parser/base.h" -#include "graph/model.h" -#include "cce/dnn.h" -#include "ge/ge_api_types.h" -#include "framework/common/ge_types.h" -#include "graph/utils/op_desc_utils.h" -#include "common/profiling/profiling_manager.h" - -using domi::domiTensorFormat_t; -using namespace cce; -using namespace ge; - -struct PROC_PARAM { - uint8_t *model_name; - - // ISV Ek buffer - uint8_t *model_key; - uint32_t model_key_len; - - // ISV root certificate buffer - uint8_t *root_cert; - uint32_t root_cert_len; - - // ISV private key buffer - uint8_t *pri_key; - uint32_t pri_key_len; - - // Raw AI Module Image buffer - uint8_t *ai_image; - uint32_t ai_image_len; - - // ISV HW key buffer - uint8_t *hw_key; - uint32_t hw_key_len; -}; - -#ifdef __cplusplus -extern "C" { -#endif -using namespace ge; -namespace { -const char FMK_STATUS_FILE_DIR_ENV[] = "FMK_STATUS_FILE_DIR"; -const char JOBSTATE_FILE_NAME[] = "jobstateupdate_framework"; -const char HCOM_DETECT_FILE_NAME[] = "hcom_detection_result"; -const char FILE_SEPARATE[] = "/"; -} // namespace - -#ifdef __cplusplus -} -#endif - -namespace ge { -struct GeModelPartition { - ModelPartitionType type_ = MODEL_DEF; - uint8_t *data_ = nullptr; - size_t size_ = 0; - - GeModelPartition() = default; - - GeModelPartition(const GeModelPartition &partition){}; - - GeModelPartition &operator=(const GeModelPartition &partition) = delete; - - ~GeModelPartition() { - if (data_ != nullptr) { - delete[] data_; - data_ = nullptr; - } - } - - Status SetData(uint8_t *data, size_t size) { - size_ = size; - data_ = new (std::nothrow) uint8_t[size](); - errno_t err; - err = memcpy_s(data_, size_, data, size); - if (err) { - GELOGE(ge::FAILED, "[GeModel Partition] Error occur when copy GeModel Partition data."); - return FAILED; - } - return SUCCESS; - } - - Status SetType(ModelPartitionType type) { - type_ = type; - return SUCCESS; - } -}; -struct OmFileContext { - vector partition_datas_; - vector partition_table_; - uint32_t model_data_len_; -}; - -class SubGraphInfo; -using SubGraphInfoPtr = std::shared_ptr; - -using GeModelPartitionPtr = std::shared_ptr; -using ModelPtr = std::shared_ptr; -class GeModel { - public: - explicit GeModel(const ModelPtr &model_ptr); - ~GeModel() = default; - GeModel(const GeModel &other) = delete; - GeModel &operator=(const GeModel &other) = delete; - - ModelPtr GetModelPtr() const; - Status AddPartition(uint8_t *data, size_t size, ModelPartitionType type); - Status GetPartition(ModelPartitionType type, GeModelPartitionPtr &partition); - uint8_t GetPlatformType() const; - void SetPlatformType(const uint8_t platform_type) { platform_type_ = platform_type; } - - private: - std::map partitions_; - ModelPtr model_ = nullptr; - uint8_t platform_type_ = {0}; -}; -using GeModelPtr = std::shared_ptr; - -GeModel::GeModel(const ModelPtr &model_ptr) { this->model_ = model_ptr; } - -ModelPtr GeModel::GetModelPtr() const { return this->model_; } - -uint8_t GeModel::GetPlatformType() const { return platform_type_; } - -Status GeModel::AddPartition(uint8_t *data, size_t size, ModelPartitionType type) { - if (size == 0) { - return FAILED; - } - - if (data == nullptr) { - return FAILED; - } - - auto iter = partitions_.find(type); - if (iter != partitions_.end()) { - return FAILED; - } - - GeModelPartitionPtr partition = nullptr; - GE_MAKE_SHARED(partition = std::make_shared(), return FAILED); - Status ret = partition->SetType(type); - if (ret != SUCCESS) { - return FAILED; - } - ret = partition->SetData(data, size); - if (ret != SUCCESS) { - return FAILED; - } - - partitions_.insert(std::pair(type, partition)); - return SUCCESS; -} - -Status GeModel::GetPartition(ModelPartitionType type, GeModelPartitionPtr &partition) { - auto iter = partitions_.find(type); - if (iter == partitions_.end()) { - return FAILED; - } - - partition = iter->second; - return SUCCESS; -} -class OmFileSaveHelper { - public: - OmFileSaveHelper(); - ~OmFileSaveHelper(); - vector &GetModelPartitions(); - ModelPartitionTable *GetPartitionTable(); - ModelFileHeader model_header_; - ModelFileHeader &GetModelFileHeader() { return model_header_; } - void AddPartition(GeModelPartition &partition); - - private: - OmFileContext context_; -}; - -OmFileSaveHelper::OmFileSaveHelper() {} - -OmFileSaveHelper::~OmFileSaveHelper() {} - -vector &OmFileSaveHelper::GetModelPartitions() { - static std::vector tmp; - return tmp; -} - -ModelPartitionTable *OmFileSaveHelper::GetPartitionTable() { return nullptr; } - -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void OmFileSaveHelper::AddPartition(GeModelPartition &partition) { - context_.partition_datas_.push_back(partition); - context_.model_data_len_ += partition.size_; -} -class ModelBuilder { - public: - ModelBuilder(ge::ComputeGraphPtr compute_graph, const std::vector &subgraphs, - const std::map &stream_max_parallel_num, bool hcom_parallel, int mode); - virtual ~ModelBuilder(); - Status BuildModel(ge::Model &model_def); - Status SaveWeightsToModel(ge::Model &model); - Status SaveDataToModel(ge::Model &model, ge::GeModel &ge_model); - Status PreBuildModel(); - Status BuildModelForGetTask(ge::Model &model_def); - ge::Buffer GetWeightBuffer() const; - void SetModelVersion(ge::Model &model_def); - - public: - ge::Buffer weight_buffer_; -}; - -ModelBuilder::ModelBuilder(ge::ComputeGraphPtr compute_graph, const std::vector &subgraphs, - const std::map &stream_max_parallel_num, bool hcom_parallel, int mode) { - weight_buffer_ = ge::Buffer(4100000); -} - -ModelBuilder::~ModelBuilder() {} - -Status ModelBuilder::SaveWeightsToModel(ge::Model &model) { return SUCCESS; } - -Status ModelBuilder::BuildModel(ge::Model &model_def) { return SUCCESS; } - -Status ModelBuilder::SaveDataToModel(ge::Model &model, ge::GeModel &ge_model) { return SUCCESS; } - -Status ModelBuilder::PreBuildModel() { return SUCCESS; } - -Status ModelBuilder::BuildModelForGetTask(ge::Model &model_def) { return SUCCESS; } - -void ModelBuilder::SetModelVersion(ge::Model &model_def) { return; } - -ge::Buffer ModelBuilder::GetWeightBuffer() const { return ge::Buffer(4100000); } - -} // namespace ge - -using ProcParam = struct PROC_PARAM; - -namespace ge { -#include -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_N = 0; -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_C = 1; -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_H = 2; -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_W = 3; -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_N = 0; -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_H = 1; -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_W = 2; -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_C = 3; - -const uint32_t MODEL_FILE_MAGIC_NUM = 0x444F4D49; -const uint32_t MODEL_FILE_HEAD_LEN = 256; -const uint32_t MODEL_VERSION = 0x10000000; -const int MAX_FILE_SIZE_LIMIT = INT_MAX; -bool FC_WEIGHT_COMPRESS_FLAG = false; - -bool ReadBytesFromBinaryFile(const char *file_name, char **buffer, int &length) { - length = 10; - *buffer = new (std::nothrow) char[10](); - GE_CHK_BOOL_TRUE_EXEC_RET_STATUS(*buffer == nullptr, false, "new an object failed."); - return true; -} -bool ReadProtoFromText(const char *file, google::protobuf::Message *message) { - GE_CHK_BOOL_TRUE_EXEC_WITH_LOG((nullptr == file || nullptr == message), return false, - "incorrect parameter. nullptr == file || nullptr == message"); - string real_path = RealPath(file); - GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(real_path.empty(), return false, "proto file path '%s' not valid", file); - GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(GetFileLength(real_path.c_str()) == -1, return false, "file size not valid."); - std::ifstream fs(real_path.c_str(), std::ifstream::in); - - if (!fs.is_open()) { - GELOGE(ge::FAILED, "proto file '%s' open fail.", file); - return false; - } - google::protobuf::io::IstreamInputStream input(&fs); - bool ret = google::protobuf::TextFormat::Parse(&input, message); - GE_IF_BOOL_EXEC(ret != true, - GELOGI("call [google::protobuf::TextFormat::Parse] func ret fail, please check your text file.")); - fs.close(); - return ret; -} - -uint64_t GetCurrentTimestap() { return 0; } - -// get length of file -long GetFileLength(const std::string &input_file) { - GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(input_file.empty(), return -1, "input_file path is null."); - string real_path = RealPath(input_file.c_str()); - - GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(real_path.empty(), return -1, "input_file path '%s' not valid", input_file.c_str()); - unsigned long long file_length = 0; - GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(mmGetFileSize(input_file.c_str(), &file_length) != EN_OK, return -1, - "open file failed."); - GE_CHK_BOOL_TRUE_EXEC_WITH_LOG((file_length <= 0), return -1, "file length <= 0, not valid."); - GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(file_length > MAX_FILE_SIZE_LIMIT, return -1, "file size %llu is out of limit: %d.", - file_length, MAX_FILE_SIZE_LIMIT); - return file_length; -} -string RealPath(const char *path) { - string s = path; - if (s.size() >= PATH_MAX) { - return ""; - } - if (s == "." || s == "1") { - return path; - // for insert_aipp_op unittest - } else if (s.substr(0, 3) == "llt") { - return path; - } else { - return "22"; - } -} - -bool CheckInputPathValid(const string &file_path) { return true; } -bool ReadProtoFromArray(const void *data, int size, Message *proto) { return true; } - -struct ModelPartition { - ModelPartitionType type; - uint8_t *data = 0; - uint32_t size = 0; -}; - -class InsertNewOpUtil { - public: - InsertNewOpUtil(); - ~InsertNewOpUtil(); - Status InsertNewOps(const ComputeGraphPtr &graph); - Status InsertAippOps(ge::ComputeGraphPtr graph, std::string &aipp_config_path); - Status Parse(const char *conf_path); -}; - -InsertNewOpUtil::InsertNewOpUtil() {} - -Status InsertNewOpUtil::InsertNewOps(const ComputeGraphPtr &graph) { return SUCCESS; } - -Status InsertNewOpUtil::InsertAippOps(ge::ComputeGraphPtr graph, std::string &aipp_config_path) { return SUCCESS; } - -Status InsertNewOpUtil::Parse(const char *conf_path) { return SUCCESS; } - -Status InitOME() { return SUCCESS; } -class GraphOptimizer { - public: - Status Optimize(); - Status OptimizeAfterCal(); - Status AdjustDataOpDesc(); - Status InsertTransOp(); - Status FusionFmkop(); - Status Optimize4Cloud(); - Status Optimize4FlowCtrl(); - Status OptimizeBeforeBuild(); -}; -Status GraphOptimizer::Optimize() { return SUCCESS; } - -Status Init(Options options) { return SUCCESS; } - -Status Shutdown(Options options) { return SUCCESS; } - -class Session { - public: - // singleton - static Session *Instance(); - const uint32_t &DeviceId() const; -}; - -const uint32_t &Session::DeviceId() const { return 0; } - -Session *Session::Instance() { - static Session instance; - return &instance; -} -struct OmgContext { - domiTensorFormat_t format; - - // get input format from cmd - std::unordered_map input_nodes_format_map; - std::vector output_formats; - - // user-designate input dims - std::vector>> user_input_dims; - // global input dims - std::map> input_dims; - - // solve rename op e.g: Detectionoutput:SsdDetectiontOutput - std::map op_conf_map; - // save output node of network: key is op name, value = index, index is the output index of op - std::map> out_nodes_map; - // user-designate out nodes (this is used for determing the orders) - std::vector> user_out_nodes; - // save the path of cutsom_aicpu - std::vector aicpu_op_run_paths; - // save ddk - std::string ddk_version; - // save format - domiTensorFormat_t net_format; - - FrameworkType type; - // RunMode run_mode; - bool train_flag = false; - - std::string output_type; - - /// save the name of network - /// eg:faster-rcnn, based on FirstStageProcessor after scope_fusion is faster-rcnn - /// then reorder conv+reshape of FirstStageBoxPredictor/BoxEncodingPredictor - /// need to delete op of reshape - std::string net_name; -}; -} // namespace ge - -namespace domi { -ge::OmgContext &GetContext() { - static ge::OmgContext tmp; - return tmp; -} -} // namespace domi - -namespace ge { -class OpUtils { - public: - static Status InitTensorDescriptor(const GeTensorDesc &tensor, ccTensorDescriptor_t &cc_tensor); - static Status InitTensorDescriptor(int32_t format, int32_t data_type, const std::vector &dim, - ccTensorDescriptor_t &cc_tensor, uint32_t real_dim_cnt); - static void DestroyTensorDescriptor(ccTensorDescriptor_t &cc_tensor); -}; -Status OpUtils::InitTensorDescriptor(const GeTensorDesc &tensor, ccTensorDescriptor_t &cc_tensor) { - ccCreatePoolingMaskDescriptor(&cc_tensor); - return SUCCESS; -} -Status OpUtils::InitTensorDescriptor(int32_t format, int32_t data_type, const std::vector &dim, - ccTensorDescriptor_t &cc_tensor, uint32_t real_dim_cnt) { - Status ret = SUCCESS; - return ret; -} - -class FileSaver { - public: - Status SaveToFile(const string &file_path, ModelFileHeader &model_file_header, - ModelPartitionTable &model_partition_table, const std::vector &partition_datas); - Status SaveToFileWithEncrypt(const std::string file_path, const ProcParam proc_param, - const ModelFileHeader *model_file_header, bool check_sum); -}; - -Status FileSaver::SaveToFile(const string &file_path, ModelFileHeader &model_file_header, - ModelPartitionTable &model_partition_table, - const std::vector &partition_datas) { - return SUCCESS; -} - -Status FileSaver::SaveToFileWithEncrypt(const std::string file_path, const ProcParam proc_param, - const ModelFileHeader *model_file_header, bool check_sum) { - return SUCCESS; -} - -class ModelSaver : public FileSaver {}; - -FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void OpUtils::DestroyTensorDescriptor( - ccTensorDescriptor_t &cc_tensor) { - if (nullptr != cc_tensor) { - ccStatus_t ret = ccDestroyTensorDescriptor(&cc_tensor); - GE_LOGE_IF(CC_STATUS_SUCCESS != ret, "ccDestroyTensorDescriptor failed. ret = %d", ret); - cc_tensor = nullptr; - } -} - -} // namespace ge - -namespace domi { -class OpRegistrationData {}; - -class OpRegistry { - public: - static OpRegistry *Instance(); - std::vector registration_datas; - - ImplyType GetImplyType(const std::string &op_type); - void GetOpTypeByImplyType(std::vector &vec_op_type, const ImplyType &imply_type); -}; - -OpRegistry *OpRegistry::Instance() { - static OpRegistry instance; - return &instance; -} - -void OpRegistry::GetOpTypeByImplyType(std::vector &vec_op_type, const ImplyType &imply_type) { - if (imply_type == ImplyType::AI_CPU) { - vec_op_type.push_back("square"); - } -} - -class OpRegistrationTbe { - public: - static OpRegistrationTbe *Instance(); - - bool Finalize(OpRegistrationData ®_data, bool is_train); -}; - -OpRegistrationTbe *OpRegistrationTbe::Instance() { - static OpRegistrationTbe instance; - return &instance; -} - -bool OpRegistrationTbe::Finalize(OpRegistrationData ®_data, bool is_train) { return true; } -} // namespace domi - -namespace ge { -class GraphPrepare { - private: - Status OptimizeForPreprocess(ge::ComputeGraphPtr &compute_graph); -}; - -Status GraphPrepare::OptimizeForPreprocess(ge::ComputeGraphPtr &compute_graph) { return SUCCESS; } -} // namespace ge - -namespace ge { - -Status GetOriginalType(const ge::NodePtr &node, string &type) { - type = node->GetType(); - GE_IF_BOOL_EXEC(type != FRAMEWORKOP, return SUCCESS); - ge::AttrUtils::GetStr(node->GetOpDesc(), "original_type", type); - return SUCCESS; -} - -Status SetCycleEvent(const ge::NodePtr &node) { return SUCCESS; } - -Status SetStreamLabel(const ge::NodePtr &node, const std::string &label) { - GE_CHECK_NOTNULL(node); - OpDescPtr tmp_desc = AttrUtils::CloneOpDesc(node->GetOpDesc()); - GE_CHECK_NOTNULL(tmp_desc); - - if (!AttrUtils::SetStr(tmp_desc, "_stream_label", label)) { - GELOGE(ge::FAILED, "Op :%s set ATTR_NAME_STREAM_LABEL failed", node->GetName().c_str()); - return FAILED; - } - return SUCCESS; -} - -Status SetActiveLabelList(const ge::NodePtr &node, const std::vector &label) { - GE_CHECK_NOTNULL(node); - OpDescPtr tmp_desc = node->GetOpDesc(); - GE_CHECK_NOTNULL(tmp_desc); - // add list of active_label - if (!AttrUtils::SetListStr(tmp_desc, "_active_label", label)) { - GELOGE(ge::FAILED, "Op: %s set ATTR_NAME_ACTIVE_LABEL_LIST failed", node->GetName().c_str()); - return FAILED; - } - return SUCCESS; -} - -Status SetSwitchBranchNodeLabel(const ge::NodePtr &node, const std::string &branch_label) { - GE_CHECK_NOTNULL(node); - OpDescPtr tmp_desc = node->GetOpDesc(); - GE_CHECK_NOTNULL(tmp_desc); - // add branch_label of switch - if (!AttrUtils::SetStr(tmp_desc, "_switch_branch_node_label", branch_label)) { - GELOGE(ge::FAILED, "Op :%s set ATTR_NAME_SWITCH_BRANCH_NODE_LABEL failed", node->GetName().c_str()); - return FAILED; - } - return SUCCESS; -} - -Status SetSwitchTrueBranchFlag(const ge::NodePtr &node, bool value) { - GE_CHECK_NOTNULL(node); - OpDescPtr tmp_desc = node->GetOpDesc(); - GE_CHECK_NOTNULL(tmp_desc); - // add switch_true_branch_flag - if (!AttrUtils::SetBool(tmp_desc, "_switch_true_branch_flag", value)) { - GELOGE(ge::FAILED, "Op :%s set ATTR_NAME_SWITCH_TRUE_BRANCH_FLAG failed", node->GetName().c_str()); - return FAILED; - } - return SUCCESS; -} - -Status SetOriginalNodeName(const ge::NodePtr &node, const std::string &orig_name) { - GE_CHECK_NOTNULL(node); - OpDescPtr tmp_desc = node->GetOpDesc(); - GE_CHECK_NOTNULL(tmp_desc); - // record original_node_name - if (!AttrUtils::SetStr(tmp_desc, "_original_node_name", orig_name)) { - GELOGE(ge::FAILED, "Op :%s set ATTR_NAME_ORIG_NODE_NAME failed", node->GetName().c_str()); - return FAILED; - } - return SUCCESS; -} - -Status SetCyclicDependenceFlag(const ge::NodePtr &node) { - GE_CHECK_NOTNULL(node); - OpDescPtr tmp_desc = node->GetOpDesc(); - GE_CHECK_NOTNULL(tmp_desc); - // add cyclic_dependence_flag - if (!AttrUtils::SetBool(tmp_desc, "_cyclic_dependence_flag", true)) { - GELOGE(ge::FAILED, "Op :%s set ATTR_NAME_CYCLIC_DEPENDENCE_FLAG failed", node->GetName().c_str()); - return FAILED; - } - return SUCCESS; -} - -Status SetNextIteration(const ge::NodePtr &node, const std::string &next) { - GE_CHECK_NOTNULL(node); - OpDescPtr tmp_desc = node->GetOpDesc(); - GE_CHECK_NOTNULL(tmp_desc); - - if (!AttrUtils::SetStr(tmp_desc, "_next_iteration_node", next)) { - GELOGE(ge::FAILED, "Op: %s set ATTR_NAME_NEXT_ITERATION failed", node->GetName().c_str()); - return FAILED; - } - return SUCCESS; -} -} // namespace ge - -namespace cce { -bool ccGetFuncState(ccFuncParamType_t type) { return true; } -} // namespace cce - -namespace ge { -Status UnloadModel(uint32_t model_id) { return SUCCESS; } - -Status GetInputOutputDescInfo(uint32_t model_id, vector &input_desc, - vector &output_desc) { - return SUCCESS; -} - -Status DataInput(const InputData *input_data, OutputData *output_data) { return SUCCESS; } -/* -class ModelManager { - public: - static std::shared_ptr GetInstance(); - static void FinalizeForPtr(ModelManager *) {} - Status DataInputTensor(uint32_t model_id, const std::vector &inputs, - std::vector &outputs); - Status DataInput(const InputData &input_data, OutputData &output_data); - Status GetInputOutputDescInfo(const uint32_t model_id, std::vector &input_desc, - std::vector &output_desc); - Status GetInputOutputDescInfo(const uint32_t model_id, std::vector &input_desc, - std::vector &output_desc, std::vector &input_formats, - std::vector &output_formats); - Status GetInputOutputDescInfoForZeroCopy(const uint32_t model_id, std::vector &input_desc, - std::vector &output_desc, - std::vector &input_formats, std::vector &output_formats); - Status Stop(uint32_t model_id); - Status Unload(uint32_t model_id); - Status LoadModelOnline(uint32_t &model_id, std::shared_ptr &model, - std::shared_ptr listener); - Status Start(uint32_t model_id); - Status GetMaxUsedMemory(const uint32_t model_id, uint64_t &max_size); - Status LoadModelOffline(uint32_t &model_id, const ModelData &model, std::shared_ptr listener = nullptr, - void *dev_ptr = nullptr, size_t mem_size = 0, void *weight_ptr = nullptr, - size_t weight_size = 0); - Status LoadModelWithQ(uint32_t &model_id, const ModelData &model_data, const std::vector &input_queue_ids, - const std::vector &output_queue_ids); - - Status HandleCommand(const Command &command); - Status ExecuteModel(uint32_t model_id, rtStream_t stream, bool async_mode, const InputData &input_data, - OutputData &output_data); - void DestroyAicpuSession(uint64_t session_id); -}; -void ModelManager::DestroyAicpuSession(uint64_t session_id) {} -std::shared_ptr ModelManager::GetInstance() { - static std::shared_ptr instance_ptr = - shared_ptr(new ModelManager(), ModelManager::FinalizeForPtr); - return instance_ptr; -} - -Status ModelManager::DataInputTensor(uint32_t model_id, const std::vector &inputs, - std::vector &outputs) { - return SUCCESS; -} - -Status ModelManager::DataInput(const InputData &input_data, OutputData &output_data) { return SUCCESS; } - -Status ModelManager::GetInputOutputDescInfo(const uint32_t model_id, std::vector &input_desc, - std::vector &output_desc, - std::vector &input_formats, - std::vector &output_formats) { - return SUCCESS; -} - -Status ModelManager::GetInputOutputDescInfo(const uint32_t model_id, std::vector &input_desc, - std::vector &output_desc) { - return SUCCESS; -} - -Status ModelManager::GetInputOutputDescInfoForZeroCopy(const uint32_t model_id, - std::vector &input_desc, - std::vector &output_desc, - std::vector &input_formats, - std::vector &output_formats) { - return SUCCESS; -} - -Status ModelManager::Stop(uint32_t model_id) { return SUCCESS; } - -Status ModelManager::Unload(uint32_t model_id) { return SUCCESS; } - -Status ModelManager::LoadModelOnline(uint32_t &model_id, std::shared_ptr &model, - std::shared_ptr listener) { - return SUCCESS; -} - -Status ModelManager::Start(uint32_t model_id) { return SUCCESS; } - -Status ModelManager::GetMaxUsedMemory(const uint32_t model_id, uint64_t &max_size) { return SUCCESS; } - -Status ModelManager::LoadModelOffline(uint32_t &model_id, const ModelData &model, shared_ptr listener, - void *dev_ptr, size_t mem_size, void *weight_ptr, size_t weight_size) { - return SUCCESS; -} - -Status ModelManager::LoadModelWithQ(uint32_t &model_id, const ModelData &model_data, - const std::vector &input_queue_ids, - const std::vector &output_queue_ids) { - return SUCCESS; -} - -Status ModelManager::HandleCommand(const Command &command) { return SUCCESS; } - -Status ModelManager::ExecuteModel(uint32_t model_id, rtStream_t stream, bool async_mode, const InputData &input_data, - OutputData &output_data) { - return SUCCESS; -} - -*/ - -} // namespace ge - -namespace ge { - -enum JobState { - JOBSTATE_WAITING = 1, - JOBSTATE_RUNNING, - JOBSTATE_KILLING, - JOBSTATE_SUCCEED, - JOBSTATE_FAILED, - JOBSTATE_KILLED, - JOBSTATE_UNKOWN -}; - -enum JobSubState { - JOBSUBSTATE_ENV_INIT = 201, - JOBSUBSTATE_ENV_FIN, - JOBSUBSTATE_RESOUCE_ALLOC, - JOBSUBSTATE_MODEL_COMPILE, - JOBSUBSTATE_GRAPH_PREPARE, - JOBSUBSTATE_GRAPH_SPLIT, - JOBSUBSTATE_GRAPH_OPTIMIZE, - JOBSUBSTATE_GRAPH_BUILD, - JOBSUBSTATE_GRAPH_LOAD, - JOBSUBSTATE_GRAPH_EXEC, - JOBSUBSTATE_GRAPH_UNLOAD, - JOBSUBSTATE_OTHER -}; - -enum ErrorModule { - ERROR_MODULE_DRIVER = 0x01, - ERROR_MODULE_RUNTIME = 0x04, - ERROR_MODULE_CCE = 0x06, - ERROR_MODULE_FMK = 0x08, - ERROR_MODULE_HCCL = 0x12 -}; - -class CsaInteract { - public: - CsaInteract &GetInstance(); - void WriteErrorCode(uint32_t module_ret_errcode, ErrorModule error_module, JobSubState job_sub_state); - void Init(int32_t dev_index, int64_t job_id); - Status WriteJobState(JobState job_state, JobSubState job_sub_state = JOBSUBSTATE_OTHER, - uint32_t module_ret_errcode = SUCCESS, ErrorModule error_module = ERROR_MODULE_FMK); - // device index - int32_t dev_index_; - // job id - int64_t job_id_; - // is initialization complete - bool is_init_; - // current job state - JobState curr_state_; - // job state file - std::string job_state_file_; - // network connectivity detect file - std::string hcom_detect_file_; - // identification of internal errors that occurred during the training - bool is_have_internal_error_; -}; - -CsaInteract &CsaInteract::GetInstance() { - static CsaInteract instance; - return instance; -} - -void CsaInteract::Init(int32_t dev_index, int64_t job_id) { - if (!is_init_) { - dev_index_ = dev_index; - job_id_ = job_id; - string csa_path_prefix; - if (std::getenv(FMK_STATUS_FILE_DIR_ENV) != nullptr) { - csa_path_prefix = std::getenv(FMK_STATUS_FILE_DIR_ENV); - } - if (!csa_path_prefix.empty()) { - std::string job_state_file = csa_path_prefix + std::to_string(dev_index_) + FILE_SEPARATE + JOBSTATE_FILE_NAME; - std::string hcom_detect_file = - csa_path_prefix + std::to_string(dev_index_) + FILE_SEPARATE + HCOM_DETECT_FILE_NAME; - job_state_file_ = RealPath(job_state_file.c_str()); - hcom_detect_file_ = RealPath(hcom_detect_file.c_str()); - } - is_init_ = true; - } -} - -void CsaInteract::WriteErrorCode(uint32_t module_ret_errcode, ErrorModule error_module, JobSubState job_sub_state) {} - -} // namespace ge - -Status ModelParserBase::LoadFromFile(const char *model_path, const char *key, int32_t priority, - ge::ModelData &model_data) { - return SUCCESS; -} - -Status CsaInteract::WriteJobState(JobState job_state, JobSubState job_sub_state, uint32_t module_ret_errcode, - ErrorModule error_module) { - return SUCCESS; -} - -namespace ge { - -static std::map data_type_to_length = { - {DT_BOOL, sizeof(bool)}, {DT_INT64, sizeof(int64_t)}, {DT_UINT64, sizeof(int64_t)}, {DT_FLOAT, sizeof(float)}, - {DT_INT32, sizeof(int32_t)}, {DT_UINT32, sizeof(int32_t)}, {DT_INT8, sizeof(char)}, {DT_UINT8, sizeof(char)}, - {DT_INT16, sizeof(int16_t)}, {DT_UINT16, sizeof(int16_t)}, {DT_FLOAT16, sizeof(int16_t)}, {DT_DOUBLE, sizeof(double)}, -}; - -class TypeUtils { - public: - static bool GetDataTypeLength(ge::DataType data_type, uint32_t &length); - static bool CheckUint64MulOverflow(uint64_t a, uint32_t b); -}; - -bool TypeUtils::GetDataTypeLength(ge::DataType data_type, uint32_t &length) { - auto it = data_type_to_length.find(data_type); - if (it != data_type_to_length.end()) { - length = it->second; - return true; - } else { - return false; - } -} - -bool TypeUtils::CheckUint64MulOverflow(uint64_t a, uint32_t b) { - // Not overflow - if (a == 0) { - return false; - } - if ((ULLONG_MAX / a) >= b) { - return false; - } - return true; -} -} // namespace ge diff --git a/tests/depends/runtime/src/runtime_stub.cc b/tests/depends/runtime/src/runtime_stub.cc index 1323a76a..440b98e7 100644 --- a/tests/depends/runtime/src/runtime_stub.cc +++ b/tests/depends/runtime/src/runtime_stub.cc @@ -27,8 +27,8 @@ rtError_t rtGetStreamId(rtStream_t stream, int32_t *stream_id) { } rtError_t rtCtxGetCurrent(rtContext_t *ctx) { - int x = 1; - *ctx = (void *)x; + uintptr_t x = 1; + *ctx = (rtContext_t *)x; return RT_ERROR_NONE; } @@ -131,8 +131,15 @@ rtError_t rtFunctionRegister(void *bin_handle, const void *stub_func, const char rtError_t rtDevBinaryRegister(const rtDevBinary_t *bin, void **handle) { return RT_ERROR_NONE; } +rtError_t rtRegisterAllKernel(const rtDevBinary_t *bin, void **handle) { return RT_ERROR_NONE; } + rtError_t rtKernelConfigTransArg(const void *ptr, uint64_t size, uint32_t flag, void **arg) { return RT_ERROR_NONE; } +rtError_t rtKernelLaunchWithHandle(void *handle, const void *devFunc, uint32_t blockDim, void *args, uint32_t argsSize, + rtSmDesc_t *smDesc, rtStream_t stream, const void *kernelInfo) { + return RT_ERROR_NONE; +} + rtError_t rtKernelLaunch(const void *stub_func, uint32_t block_dim, void *args, uint32_t args_size, rtSmDesc_t *sm_desc, rtStream_t stream) { return RT_ERROR_NONE; @@ -156,7 +163,7 @@ rtError_t rtSetKernelReportCallback(rtKernelReportCallback callback) { rt_kernel_info.module_addr = (void *)100; rt_kernel_info.module_size = 100; - rtStream_t stream; + rtStream_t stream = nullptr; callback(stream, &rt_kernel_info); return RT_ERROR_NONE; } @@ -193,7 +200,8 @@ rtError_t rtModelCreate(rtModel_t *model, uint32_t flag) { } rtError_t rtModelDestroy(rtModel_t model) { - delete model; + uint32_t *stub = static_cast(model); + delete stub; return RT_ERROR_NONE; } @@ -423,3 +431,7 @@ rtError_t rtGetTaskIdAndStreamID(uint32_t *taskId, uint32_t *streamId) { return RT_ERROR_NONE; } + +rtError_t rtDebugRegisterForStream(rtStream_t stream, uint32_t flag, const void *addr, uint32_t *streamId, uint32_t *taskId) { + return RT_ERROR_NONE; +} diff --git a/tests/ut/ge/CMakeLists.txt b/tests/ut/ge/CMakeLists.txt index a09d5789..c1a61c67 100755 --- a/tests/ut/ge/CMakeLists.txt +++ b/tests/ut/ge/CMakeLists.txt @@ -18,23 +18,23 @@ project(ut_ge) set(CMAKE_CXX_STANDARD 11) set(PROTO_LIST - "${GE_CODE_DIR}/metadef/proto/om.proto" - "${GE_CODE_DIR}/metadef/proto/ge_ir.proto" - "${GE_CODE_DIR}/metadef/proto/ge_api.proto" - "${GE_CODE_DIR}/metadef/proto/insert_op.proto" - "${GE_CODE_DIR}/metadef/proto/dump_task.proto" - "${GE_CODE_DIR}/metadef/proto/fwk_adapter.proto" - "${GE_CODE_DIR}/metadef/proto/op_mapping_info.proto" - "${GE_CODE_DIR}/metadef/proto/optimizer_priority.proto" - "${GE_CODE_DIR}/metadef/proto/ge_api.proto" - "${GE_CODE_DIR}/metadef/proto/tensorflow/attr_value.proto" - "${GE_CODE_DIR}/metadef/proto/tensorflow/tensor.proto" - "${GE_CODE_DIR}/metadef/proto/tensorflow/resource_handle.proto" - "${GE_CODE_DIR}/metadef/proto/tensorflow/tensor_shape.proto" - "${GE_CODE_DIR}/metadef/proto/tensorflow/types.proto" - "${GE_CODE_DIR}/metadef/proto/tensorflow/node_def.proto" - "${GE_CODE_DIR}/metadef/proto/proto_inner/ge_onnx.proto" - ) + "${GE_CODE_DIR}/metadef/proto/om.proto" + "${GE_CODE_DIR}/metadef/proto/ge_ir.proto" + "${GE_CODE_DIR}/metadef/proto/ge_api.proto" + "${GE_CODE_DIR}/metadef/proto/insert_op.proto" + "${GE_CODE_DIR}/metadef/proto/dump_task.proto" + "${GE_CODE_DIR}/metadef/proto/fwk_adapter.proto" + "${GE_CODE_DIR}/metadef/proto/op_mapping_info.proto" + "${GE_CODE_DIR}/metadef/proto/optimizer_priority.proto" + "${GE_CODE_DIR}/metadef/proto/ge_api.proto" + "${GE_CODE_DIR}/metadef/proto/tensorflow/attr_value.proto" + "${GE_CODE_DIR}/metadef/proto/tensorflow/tensor.proto" + "${GE_CODE_DIR}/metadef/proto/tensorflow/resource_handle.proto" + "${GE_CODE_DIR}/metadef/proto/tensorflow/tensor_shape.proto" + "${GE_CODE_DIR}/metadef/proto/tensorflow/types.proto" + "${GE_CODE_DIR}/metadef/proto/tensorflow/node_def.proto" + "${GE_CODE_DIR}/metadef/proto/proto_inner/ge_onnx.proto" + ) protobuf_generate(ge PROTO_SRCS PROTO_HDRS ${PROTO_LIST}) @@ -135,6 +135,7 @@ set(COMMON_SRC_FILES "${GE_CODE_DIR}/ge/common/types.cc" "${GE_CODE_DIR}/ge/common/fmk_error_codes.cc" "${GE_CODE_DIR}/ge/common/op/ge_op_utils.cc" + "${GE_CODE_DIR}/ge/common/context/ctx.cc" "${GE_CODE_DIR}/ge/graph/manager/util/variable_accelerate_ctrl.cc" "${GE_CODE_DIR}/ge/opskernel_manager/ops_kernel_manager.cc" "${GE_CODE_DIR}/ge/generator/ge_generator.cc" @@ -161,9 +162,10 @@ set(COMMON_SRC_FILES "${GE_CODE_DIR}/ge/common/dump/dump_properties.cc" "${GE_CODE_DIR}/ge/common/helper/model_helper.cc" "${GE_CODE_DIR}/ge/common/dump/dump_manager.cc" + "${GE_CODE_DIR}/ge/common/dump/opdebug_register.cc" "${GE_CODE_DIR}/ge/common/helper/om_file_helper.cc" "${GE_CODE_DIR}/ge/model/ge_root_model.cc" - "${GE_CODE_DIR}/ge/common/model_parser/base.cc" + "${GE_CODE_DIR}/ge/common/model_parser/model_parser.cc" "${GE_CODE_DIR}/ge/graph/load/model_manager/data_dumper.cc" "${GE_CODE_DIR}/ge/graph/manager/graph_manager.cc" "${GE_CODE_DIR}/ge/common/dump/dump_server.cc" @@ -266,8 +268,8 @@ set(COMMON_SRC_FILES "${GE_CODE_DIR}/ge/graph/passes/hccl_group_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/memcpy_addr_async_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/set_input_output_offset_pass.cc" - "${GE_CODE_DIR}/ge/graph/passes/remove_same_const_pass.cc" - "${GE_CODE_DIR}/ge/graph/passes/useless_control_out_remove_pass.cc" + "${GE_CODE_DIR}/ge/graph/passes/remove_same_const_pass.cc" + "${GE_CODE_DIR}/ge/graph/passes/useless_control_out_remove_pass.cc" "${GE_CODE_DIR}/ge/model/ge_model.cc" "${GE_CODE_DIR}/ge/common/cust_aicpu_kernel_store.cc" "${GE_CODE_DIR}/ge/graph/load/model_manager/model_utils.cc" @@ -354,6 +356,7 @@ set(COMMON_FORMAT_SRC_FILES "${GE_CODE_DIR}/ge/common/formats/format_transfers/format_transfer_fracz_hwcn.cc" "${GE_CODE_DIR}/ge/common/formats/utils/formats_trans_utils.cc" "${GE_CODE_DIR}/ge/graph/manager/util/hcom_util.cc" + "${GE_CODE_DIR}/ge/common/dump/dump_manager.cc" ) set(GRAPH_OPTIMIZE_COMMON_SRC_FILES @@ -393,14 +396,13 @@ set(DISTINCT_GRAPH_LOAD_SRC_FILES "${GE_CODE_DIR}/ge/graph/manager/util/debug.cc" "${GE_CODE_DIR}/ge/common/properties_manager.cc" "${GE_CODE_DIR}/ge/common/profiling/profiling_manager.cc" - "${GE_CODE_DIR}/ge/common/model_parser/base.cc" + "${GE_CODE_DIR}/ge/common/model_parser/model_parser.cc" "${GE_CODE_DIR}/ge/common/tbe_kernel_store.cc" "${GE_CODE_DIR}/ge/common/util.cc" "${GE_CODE_DIR}/ge/graph/load/model_manager/cpu_queue_schedule.cc" "${GE_CODE_DIR}/ge/graph/load/model_manager/data_dumper.cc" "${GE_CODE_DIR}/ge/graph/load/model_manager/data_inputer.cc" "${GE_CODE_DIR}/ge/graph/load/model_manager/davinci_model.cc" - "${GE_CODE_DIR}/ge/graph/load/model_manager/davinci_model_parser.cc" "${GE_CODE_DIR}/ge/graph/load/model_manager/model_manager.cc" "${GE_CODE_DIR}/ge/graph/load/model_manager/model_utils.cc" "${GE_CODE_DIR}/ge/graph/load/model_manager/tbe_handle_store.cc" @@ -458,7 +460,7 @@ set(GRAPH_BUILD_COMMON_SRC_FILES "${GE_CODE_DIR}/ge/common/helper/om_file_helper.cc" "${GE_CODE_DIR}/ge/common/tbe_kernel_store.cc" "${GE_CODE_DIR}/ge/common/thread_pool.cc" - "${GE_CODE_DIR}/ge/common/model_parser/base.cc" + "${GE_CODE_DIR}/ge/common/model_parser/model_parser.cc" "${GE_CODE_DIR}/ge/graph/build/run_context.cc" "${GE_CODE_DIR}/ge/graph/common/local_context.cc" ) @@ -627,7 +629,7 @@ set(DISTINCT_GRAPH_LOAD_TEST_FILES #"graph/load/new_model_manager_davinci_model_unittest.cc" "graph/load/model_manager_unittest.cc" #"graph/load/new_model_manager_task_build_unittest.cc" - "graph/load/new_model_manager_model_manager_aicpu_unittest.cc" + "graph/load/new_model_manager_model_manager_aicpu_unittest.cc" "graph/load/end_graph_task_unittest.cc" "graph/load/new_model_manager_event_manager_unittest.cc" #"graph/load/output_net_output_unittest.cc" @@ -638,7 +640,7 @@ set(DISTINCT_GRAPH_LOAD_TEST_FILES "graph/load/kernel_task_info_unittest.cc" "graph/load/memcpy_addr_async_task_info_unittest.cc" "graph/load/memcpy_async_task_info_unittest.cc" - "graph/load/cpu_queue_schedule_unittest.cc" + "graph/load/cpu_queue_schedule_unittest.cc" #"graph/graph_load_unittest.cc" "graph/ge_executor_unittest.cc" "graph/load/model_helper_unittest.cc" @@ -671,7 +673,7 @@ set(PASS_TEST_FILES "graph/passes/trans_op_depth_fusion_pass_unittest.cc" "graph/passes/transop_nearby_allreduce_fusion_pass_unittest.cc" "graph/passes/constant_folding_pass_unittest.cc" - "graph/passes/fuse_data_nodes_with_common_input_pass_unittest.cc" + "graph/passes/fuse_data_nodes_with_common_input_pass_unittest.cc" "graph/passes/stop_gradient_pass_unittest.cc" "graph/passes/prevent_gradient_pass_unittest.cc" "graph/passes/identity_pass_unittest.cc" @@ -688,6 +690,8 @@ set(PASS_TEST_FILES "graph/passes/no_use_reshape_remove_pass_unittest.cc" "graph/passes/infershape_pass_unittest.cc" "graph/passes/multi_batch_clone_pass_unittest.cc" + "graph/passes/replace_with_empty_const_pass_unittest.cc" + "graph/passes/transpose_transdata_pass_unittest.cc" ) set(KERNEL_TEST_FILES @@ -730,6 +734,8 @@ set(MULTI_PARTS_TEST_FILES "graph_ir/ge_operator_factory_unittest.cc" "graph/transop_util_unittest.cc" "common/datatype_transfer_unittest.cc" + "common/dump_manager_unittest.cc" + "common/opdebug_register_unittest.cc" "common/format_transfer_unittest.cc" "common/format_transfer_transpose_unittest.cc" "common/format_transfer_nchw_5d_unittest.cc" @@ -752,25 +758,38 @@ set(MULTI_PARTS_TEST_FILES "graph/build/mem_assigner_unittest.cc" "graph/preprocess/graph_preprocess_unittest.cc" "graph/manager/hcom_util_unittest.cc" + "graph/manager/graph_caching_allocator_unittest.cc" "session/omg_omg_unittest.cc" ) +set(GENERATOR_TEST_FILES + "generator/ge_generator_unittest.cc" +) + +set(EXECUTOR_TEST_FILES + "executor/ge_executor_unittest.cc" +) + set(SINGLE_OP_TEST_FILES - #"single_op/single_op_model_unittest.cc" + "single_op/single_op_model_unittest.cc" "single_op/single_op_manager_unittest.cc" "single_op/stream_resource_unittest.cc" + "single_op/single_op_task_unittest.cc" ) set(PROFILING_MNG_TEST_FILES "profiling/ge_profiling_manager_unittest.cc" ) +set(HYBRID_TEST_FILES + "hybrid/ge_hybrid_unittest.cc" +) + set(OTHERS_TEST_FILES "plugin_manager/ge_util_unittest.cc" ) list(APPEND COMMON_SHARED_LIBRARIES - omg_stub c_sec slog_stub cce_ge_stub @@ -1012,7 +1031,8 @@ target_compile_definitions(ut_libge_multiparts_utest PRIVATE target_link_libraries(ut_libge_multiparts_utest $ - ge_build_common ge_load_common ge_execute_common ge_optimize_common ge_partition_common ge_prepare_common ge_single_op ge_ut_common gtest gtest_main ascend_protobuf ${COMMON_SHARED_LIBRARIES} json -lrt -ldl -lgcov + ge_build_common ge_load_common ge_execute_common ge_optimize_common ge_partition_common ge_prepare_common ge_single_op ge_ut_common + gtest gtest_main gmock gmock_main ascend_protobuf ${COMMON_SHARED_LIBRARIES} json -lrt -ldl -lgcov ) # libge_others_utest @@ -1031,7 +1051,8 @@ target_compile_options(ut_libge_others_utest PRIVATE target_link_libraries(ut_libge_others_utest $ - ge_load_common ge_execute_common ge_ut_common gtest gtest_main ascend_protobuf ${COMMON_SHARED_LIBRARIES} json -lrt -ldl -lgcov + ge_load_common ge_execute_common ge_ut_common + gtest gtest_main gmock gmock_main ascend_protobuf ${COMMON_SHARED_LIBRARIES} json -lrt -ldl -lgcov ) # libge_kernel_utest @@ -1049,16 +1070,20 @@ target_compile_options(ut_libge_kernel_utest PRIVATE target_link_libraries(ut_libge_kernel_utest $ - ge_load_common ge_ut_common gtest gtest_main ascend_protobuf ${COMMON_SHARED_LIBRARIES} json -lrt -ldl -lgcov + ge_load_common ge_ut_common + gtest gtest_main gmock gmock_main ascend_protobuf ${COMMON_SHARED_LIBRARIES} json -lrt -ldl -lgcov ) # libge_distinct_load_utest add_executable(ut_libge_distinct_load_utest ${COMMON_TEST_FILES} + ${GENERATOR_TEST_FILES} + ${EXECUTOR_TEST_FILES} ${DISTINCT_GRAPH_LOAD_TEST_FILES} ${DISTINCT_GRAPH_LOAD_SRC_FILES} ${SINGLE_OP_TEST_FILES} ${PROFILING_MNG_TEST_FILES} + ${HYBRID_TEST_FILES} ) target_compile_options(ut_libge_distinct_load_utest PRIVATE @@ -1071,10 +1096,10 @@ target_compile_definitions(ut_libge_distinct_load_utest PRIVATE ) target_link_libraries(ut_libge_distinct_load_utest - ${COMMON_SHARED_LIBRARIES} - $ - ge_execute_common ge_ut_common_format ge_load_common - ge_single_op ge_prepare_common - ge_optimize_common ge_build_common ge_partition_common ge_ut_common - gtest gtest_main ascend_protobuf json c_sec -lrt -ldl -lpthread -lgcov + ${COMMON_SHARED_LIBRARIES} + $ + ge_execute_common ge_ut_common_format ge_load_common + ge_single_op ge_prepare_common + ge_optimize_common ge_build_common ge_partition_common ge_ut_common + gtest gtest_main gmock gmock_main ascend_protobuf json c_sec -lrt -ldl -lpthread -lgcov ) diff --git a/tests/ut/ge/common/datatype_transfer_unittest.cc b/tests/ut/ge/common/datatype_transfer_unittest.cc index 365556e3..c311a7cf 100644 --- a/tests/ut/ge/common/datatype_transfer_unittest.cc +++ b/tests/ut/ge/common/datatype_transfer_unittest.cc @@ -365,7 +365,7 @@ TEST_F(UtestDataTypeTransfer, invalid_src_data_type) { TransResult result; DataTypeTransfer transfer; - EXPECT_EQ(transfer.TransDataType(args, result), UNSUPPORTED); + EXPECT_EQ(transfer.TransDataType(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } /* @@ -386,8 +386,8 @@ TEST_F(UtestDataTypeTransfer, unsupprot_trans) { TransResult result; DataTypeTransfer transfer; - EXPECT_EQ(transfer.TransDataType(args, result), UNSUPPORTED); - EXPECT_EQ(TransDataType(args, result), UNSUPPORTED); + EXPECT_EQ(transfer.TransDataType(args, result), ACL_ERROR_GE_DATATYPE_INVALID); + EXPECT_EQ(TransDataType(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestDataTypeTransfer, unsupprot_trans2) { @@ -396,8 +396,8 @@ TEST_F(UtestDataTypeTransfer, unsupprot_trans2) { TransResult result; DataTypeTransfer transfer; - EXPECT_EQ(transfer.TransDataType(args, result), UNSUPPORTED); - EXPECT_EQ(TransDataType(args, result), UNSUPPORTED); + EXPECT_EQ(transfer.TransDataType(args, result), ACL_ERROR_GE_DATATYPE_INVALID); + EXPECT_EQ(TransDataType(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } } // namespace formats } // namespace ge diff --git a/tests/ut/ge/common/dump_manager_unittest.cc b/tests/ut/ge/common/dump_manager_unittest.cc new file mode 100644 index 00000000..7f3880f2 --- /dev/null +++ b/tests/ut/ge/common/dump_manager_unittest.cc @@ -0,0 +1,76 @@ +/** + * 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. + */ + +#include + +#include "common/dump/dump_manager.h" +#include "common/debug/log.h" +#include "common/ge_inner_error_codes.h" + +namespace ge { +class UTEST_dump_manager : public testing::Test { + protected: + void SetUp() {} + void TearDown() {} +}; + TEST_F(UTEST_dump_manager, is_dump_open_success) { + DumpConfig dump_config; + dump_config.dump_path = "/test"; + dump_config.dump_mode = "all"; + dump_config.dump_status = "on"; + dump_config.dump_op_switch = "on"; + auto ret = DumpManager::GetInstance().SetDumpConf(dump_config); + auto dump = DumpManager::GetInstance().GetDumpProperties(0); + bool result = dump.IsDumpOpen(); + dump.ClearDumpInfo(); + EXPECT_EQ(result, true); + } + + TEST_F(UTEST_dump_manager, is_dump_op_success) { + DumpConfig dump_config; + dump_config.dump_path = "/test"; + dump_config.dump_mode = "all"; + dump_config.dump_status = "off"; + auto ret = DumpManager::GetInstance().SetDumpConf(dump_config); + EXPECT_EQ(ret, ge::SUCCESS); + } + +TEST_F(UTEST_dump_manager, is_dump_single_op_close_success) { + DumpConfig dump_config; + dump_config.dump_path = "/test"; + dump_config.dump_mode = "all"; + dump_config.dump_status = "on"; + dump_config.dump_op_switch = "off"; + auto ret = DumpManager::GetInstance().SetDumpConf(dump_config); + EXPECT_EQ(ret, ge::PARAM_INVALID); + } + + TEST_F(UTEST_dump_manager, dump_status_empty) { + DumpConfig dump_config; + dump_config.dump_path = "/test"; + dump_config.dump_mode = "all"; + dump_config.dump_op_switch = "off"; + auto ret = DumpManager::GetInstance().SetDumpConf(dump_config); + EXPECT_EQ(ret, ge::SUCCESS); + } + + TEST_F(UTEST_dump_manager, add_dump_properties_success) { + DumpProperties dump_properties; + DumpManager::GetInstance().AddDumpProperties(0, dump_properties); + auto dump = DumpManager::GetInstance().GetDumpProperties(0); + DumpManager::GetInstance().RemoveDumpProperties(0); + } +} // namespace ge \ No newline at end of file diff --git a/tests/ut/ge/common/format_transfer_5d_nhwc_unittest.cc b/tests/ut/ge/common/format_transfer_5d_nhwc_unittest.cc index b0a39396..f69c3597 100644 --- a/tests/ut/ge/common/format_transfer_5d_nhwc_unittest.cc +++ b/tests/ut/ge/common/format_transfer_5d_nhwc_unittest.cc @@ -679,7 +679,7 @@ TEST_F(UtestFormatTransfer5dNhwc, nc1hwc0_to_nhwc_float2) { } Status status = transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape); - EXPECT_EQ(status, ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + EXPECT_EQ(status, ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransfer5dNhwc, invalid_src_format) { @@ -689,7 +689,7 @@ TEST_F(UtestFormatTransfer5dNhwc, invalid_src_format) { TransResult result; FormatTransferNc1hwc0Nhwc transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransfer5dNhwc, invalid_src_shape1) { @@ -699,7 +699,7 @@ TEST_F(UtestFormatTransfer5dNhwc, invalid_src_shape1) { TransResult result; FormatTransferNc1hwc0Nhwc transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransfer5dNhwc, InvalidSrcShape2) { @@ -709,7 +709,7 @@ TEST_F(UtestFormatTransfer5dNhwc, InvalidSrcShape2) { TransResult result; FormatTransferNc1hwc0Nhwc transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransfer5dNhwc, invalid_src_data_type) { @@ -719,7 +719,7 @@ TEST_F(UtestFormatTransfer5dNhwc, invalid_src_data_type) { TransResult result; FormatTransferNc1hwc0Nhwc transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransfer5dNhwc, invalid_dst_format) { @@ -729,7 +729,7 @@ TEST_F(UtestFormatTransfer5dNhwc, invalid_dst_format) { TransResult result; FormatTransferNc1hwc0Nhwc transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransfer5dNhwc, invalid_dst_shape1) { @@ -739,7 +739,7 @@ TEST_F(UtestFormatTransfer5dNhwc, invalid_dst_shape1) { TransResult result; FormatTransferNc1hwc0Nhwc transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransfer5dNhwc, invalid_dst_shape2) { @@ -749,7 +749,7 @@ TEST_F(UtestFormatTransfer5dNhwc, invalid_dst_shape2) { TransResult result; FormatTransferNc1hwc0Nhwc transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransfer5dNhwc, invalid_src_dst_shape_relation) { @@ -759,7 +759,7 @@ TEST_F(UtestFormatTransfer5dNhwc, invalid_src_dst_shape_relation) { TransResult result; FormatTransferNc1hwc0Nhwc transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } } // namespace formats } // namespace ge diff --git a/tests/ut/ge/common/format_transfer_c1hwncoc0_hwcn_unittest.cc b/tests/ut/ge/common/format_transfer_c1hwncoc0_hwcn_unittest.cc index 3f195ef2..6304d3fd 100644 --- a/tests/ut/ge/common/format_transfer_c1hwncoc0_hwcn_unittest.cc +++ b/tests/ut/ge/common/format_transfer_c1hwncoc0_hwcn_unittest.cc @@ -39,7 +39,7 @@ TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_data_type_uint8) { TransResult result; FormatTransferC1hwncoc0Hwcn transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_data_type_int32) { @@ -50,7 +50,7 @@ TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_data_type_int32) { reinterpret_cast(data), FORMAT_C1HWNCoC0, FORMAT_HWCN, {1, 4, 4, 1, 16, 16}, {4, 4, 3, 1}, DT_INT32}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_src_format_nc1khkwhwc0) { @@ -61,7 +61,7 @@ TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_src_format_nc1khkw reinterpret_cast(data), FORMAT_NC1KHKWHWC0, FORMAT_HWCN, {1, 4, 4, 1, 16, 16}, {4, 4, 3, 1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_dst_format_nchw) { @@ -72,7 +72,7 @@ TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_dst_format_nchw) { reinterpret_cast(data), FORMAT_C1HWNCoC0, FORMAT_NCHW, {1, 4, 4, 1, 16, 16}, {4, 4, 3, 1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_src_shape) { @@ -83,7 +83,7 @@ TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_src_shape) { reinterpret_cast(data), FORMAT_C1HWNCoC0, FORMAT_HWCN, {1, 4, 4, 1, 16}, {4, 4, 3, 1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_src_shape2) { @@ -94,7 +94,7 @@ TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_src_shape2) { reinterpret_cast(data), FORMAT_C1HWNCoC0, FORMAT_HWCN, {1, 4, 4, 1, 16, -16}, {4, 4, 3, 1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invali_dst_shape) { @@ -105,7 +105,7 @@ TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invali_dst_shape) { reinterpret_cast(data), FORMAT_C1HWNCoC0, FORMAT_HWCN, {1, 4, 4, 1, 16, 16}, {4, 4, 3}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_dst_shape2) { @@ -116,7 +116,7 @@ TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_dst_shape2) { reinterpret_cast(data), FORMAT_C1HWNCoC0, FORMAT_HWCN, {1, 4, 4, 1, 16, 16}, {4, 4, 3, -1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_src_dst_shape_relation) { @@ -127,7 +127,7 @@ TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_invalid_src_dst_shape_rela reinterpret_cast(data), FORMAT_C1HWNCoC0, FORMAT_HWCN, {1, 4, 4, 1, 16, 16}, {4, 4, 17, 1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_fp16_success_lt_cube) { @@ -158,7 +158,7 @@ TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_fp16_success_lt_cube) { } Status status = transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape); - EXPECT_EQ(status, ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + EXPECT_EQ(status, ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferC1hwncoc0Hwcn, sixd_to_hwcn_gp16_success_eq_cube) { diff --git a/tests/ut/ge/common/format_transfer_fractal_nz_unittest.cc b/tests/ut/ge/common/format_transfer_fractal_nz_unittest.cc index 70c07d45..fb579fc0 100644 --- a/tests/ut/ge/common/format_transfer_fractal_nz_unittest.cc +++ b/tests/ut/ge/common/format_transfer_fractal_nz_unittest.cc @@ -2332,7 +2332,7 @@ TEST_F(UtestFormatTransferNdFractNz, nd_shape4_fp16) { } EXPECT_EQ( transfer2.TransShape(args2.src_format, args2.src_shape, args2.src_data_type, args2.dst_format, args2.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferNdFractNz, nd_shape5_fp16) { @@ -4785,7 +4785,7 @@ TEST_F(UtestFormatTransferNdFractNz, nd_shape4_fp32) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } EXPECT_EQ(transfer2.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferNdFractNz, nchw_shape4_fp32) { @@ -9058,9 +9058,9 @@ TEST_F(UtestFormatTransferNdFractNz, invalid_src_shape) { reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_NZ, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_FLOAT16}; TransResult result; FormatTransferFractalNz transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID); + ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferNdFractNz, invalid_src_data_type) { @@ -9078,9 +9078,9 @@ TEST_F(UtestFormatTransferNdFractNz, invalid_src_data_type) { DT_UNDEFINED}; TransResult result; FormatTransferFractalNz transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID); + ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferNdFractNz, invalid_src_format) { @@ -9093,9 +9093,9 @@ TEST_F(UtestFormatTransferNdFractNz, invalid_src_format) { DT_FLOAT16}; TransResult result; FormatTransferFractalNz transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID); + ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferNdFractNz, invalid_dst_shape) { @@ -9104,7 +9104,7 @@ TEST_F(UtestFormatTransferNdFractNz, invalid_dst_shape) { reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_NZ, {1, 1, 4, 4}, {1, 1, 16, 16}, DT_FLOAT16}; TransResult result; FormatTransferFractalNz transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), SUCCESS); } @@ -9115,7 +9115,7 @@ TEST_F(UtestFormatTransferNdFractNz, invalid_dst_shape2) { reinterpret_cast(data), FORMAT_FRACTAL_NZ, FORMAT_NHWC, {1, 1, 1, 1, 16, 16}, {1, 4, 4}, DT_FLOAT16}; TransResult result; FormatTransferFractalNzND transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferNdFractNz, invalid_src_data_type2) { @@ -9133,7 +9133,7 @@ TEST_F(UtestFormatTransferNdFractNz, invalid_src_data_type2) { DT_UNDEFINED}; TransResult result; FormatTransferFractalNzND transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferNdFractNz, invalid_src_data_type3) { @@ -9151,7 +9151,7 @@ TEST_F(UtestFormatTransferNdFractNz, invalid_src_data_type3) { DT_VARIANT}; TransResult result; FormatTransferFractalNzND transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferNdFractNz, invalid_dst_format2) { @@ -9164,8 +9164,8 @@ TEST_F(UtestFormatTransferNdFractNz, invalid_dst_format2) { DT_FLOAT16}; TransResult result; FormatTransferFractalNzND transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); - EXPECT_EQ(TransFormat(args, result), UNSUPPORTED); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); + EXPECT_EQ(TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferNdFractNz, invalid_src_shape2) { @@ -9174,7 +9174,7 @@ TEST_F(UtestFormatTransferNdFractNz, invalid_src_shape2) { reinterpret_cast(data), FORMAT_FRACTAL_NZ, FORMAT_NHWC, {1, 1, 16, 16}, {1, 1, 4, 4}, DT_FLOAT16}; TransResult result; FormatTransferFractalNzND transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferNdFractNz, invalid_src_dst_shape_relation) { @@ -9187,7 +9187,7 @@ TEST_F(UtestFormatTransferNdFractNz, invalid_src_dst_shape_relation) { DT_FLOAT16}; TransResult result; FormatTransferFractalNzND transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } } // namespace formats } // namespace ge diff --git a/tests/ut/ge/common/format_transfer_fractal_zz_unittest.cc b/tests/ut/ge/common/format_transfer_fractal_zz_unittest.cc index 8b1afa24..a75d177b 100644 --- a/tests/ut/ge/common/format_transfer_fractal_zz_unittest.cc +++ b/tests/ut/ge/common/format_transfer_fractal_zz_unittest.cc @@ -1894,7 +1894,7 @@ TEST_F(UtestFormatTransferNdFractZz, nd_shape4_fp16_1) { } EXPECT_EQ( transfer2.TransShape(args2.src_format, args2.src_shape, args2.src_data_type, args2.dst_format, args2.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferNdFractZz, nd_shape4_fp16) { @@ -2071,7 +2071,7 @@ TEST_F(UtestFormatTransferNdFractZz, nd_shape4_fp16) { } EXPECT_EQ( transfer2.TransShape(args2.src_format, args2.src_shape, args2.src_data_type, args2.dst_format, args2.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferNdFractZz, nd_shape5_fp16) { @@ -7877,9 +7877,9 @@ TEST_F(UtestFormatTransferNdFractZz, invalid_src_shape) { reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_ZZ, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_FLOAT16}; TransResult result; FormatTransferFractalZz transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID); + ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferNdFractZz, invalid_src_data_type) { @@ -7897,9 +7897,9 @@ TEST_F(UtestFormatTransferNdFractZz, invalid_src_data_type) { DT_UNDEFINED}; TransResult result; FormatTransferFractalZz transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID); + ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferNdFractZz, invalid_src_format) { @@ -7912,10 +7912,10 @@ TEST_F(UtestFormatTransferNdFractZz, invalid_src_format) { DT_FLOAT16}; TransResult result; FormatTransferFractalZz transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID); - EXPECT_EQ(TransFormat(args, result), UNSUPPORTED); + ACL_ERROR_GE_SHAPE_INVALID); + EXPECT_EQ(TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferNdFractZz, invalid_dst_shape) { @@ -7924,7 +7924,7 @@ TEST_F(UtestFormatTransferNdFractZz, invalid_dst_shape) { reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_ZZ, {1, 1, 4, 4}, {1, 1, 16, 16}, DT_FLOAT16}; TransResult result; FormatTransferFractalZz transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), SUCCESS); } @@ -7935,7 +7935,7 @@ TEST_F(UtestFormatTransferNdFractZz, invalid_dst_shape2) { reinterpret_cast(data), FORMAT_FRACTAL_ZZ, FORMAT_NHWC, {1, 1, 1, 1, 16, 16}, {1, 4, 4}, DT_FLOAT16}; TransResult result; FormatTransferFractalZzND transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferNdFractZz, invalid_src_data_type2) { @@ -7953,7 +7953,7 @@ TEST_F(UtestFormatTransferNdFractZz, invalid_src_data_type2) { DT_UNDEFINED}; TransResult result; FormatTransferFractalZzND transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferNdFractZz, invalid_dst_format2) { @@ -7966,8 +7966,8 @@ TEST_F(UtestFormatTransferNdFractZz, invalid_dst_format2) { DT_FLOAT16}; TransResult result; FormatTransferFractalZzND transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); - EXPECT_EQ(TransFormat(args, result), UNSUPPORTED); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); + EXPECT_EQ(TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferNdFractZz, invalid_src_shape2) { @@ -7976,7 +7976,7 @@ TEST_F(UtestFormatTransferNdFractZz, invalid_src_shape2) { reinterpret_cast(data), FORMAT_FRACTAL_ZZ, FORMAT_NHWC, {1, 1, 16, 16}, {1, 1, 4, 4}, DT_FLOAT16}; TransResult result; FormatTransferFractalZzND transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferNdFractZz, invalid_src_dst_shape_relation) { @@ -7989,7 +7989,7 @@ TEST_F(UtestFormatTransferNdFractZz, invalid_src_dst_shape_relation) { DT_FLOAT16}; TransResult result; FormatTransferFractalZzND transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } } // namespace formats } // namespace ge diff --git a/tests/ut/ge/common/format_transfer_fracz_hwcn_unittest.cc b/tests/ut/ge/common/format_transfer_fracz_hwcn_unittest.cc index 25caa741..2bc45323 100644 --- a/tests/ut/ge/common/format_transfer_fracz_hwcn_unittest.cc +++ b/tests/ut/ge/common/format_transfer_fracz_hwcn_unittest.cc @@ -39,7 +39,7 @@ TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_data_type_invalid_dat TransResult result; FormatTransferFracZHwcn transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_src_format_reserved) { @@ -50,7 +50,7 @@ TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_src_format_reserved) reinterpret_cast(data), FORMAT_RESERVED, FORMAT_HWCN, {16, 1, 16, 16}, {4, 4, 1, 1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_dst_format_reserved) { @@ -61,7 +61,7 @@ TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_dst_format_reserved) reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_RESERVED, {16, 1, 16, 16}, {4, 4, 1, 1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_src_shape) { @@ -72,7 +72,7 @@ TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_src_shape) { reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_HWCN, {16, 1, 1, 16, 16}, {4, 4, 1, 1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_src_shape2) { @@ -83,7 +83,7 @@ TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_src_shape2) { reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_HWCN, {16, -1, 16, 16}, {4, 4, 1, 1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_dst_shape) { @@ -94,7 +94,7 @@ TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_dst_shape) { reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_HWCN, {16, 1, 16, 16}, {4, 4, 1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_dst_shape2) { @@ -105,7 +105,7 @@ TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_dst_shape2) { reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_HWCN, {16, 1, 16, 16}, {4, 4, -1, 1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_src_dst_shape_relation1) { @@ -116,7 +116,7 @@ TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_src_dst_shape_relatio reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_HWCN, {16, 1, 16, 16}, {4, 4, 17, 1}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_src_dst_shape_relation2) { @@ -127,7 +127,7 @@ TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_invalid_src_dst_shape_relatio reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_HWCN, {16, 1, 16, 16}, {4, 4, 1, 17}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_fp16_success_lt_cube) { @@ -302,7 +302,7 @@ TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_fp16_success_eq_cube) { } Status status = transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape); - EXPECT_EQ(status, ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + EXPECT_EQ(status, ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferFracZHwcn, fracz_to_hwcn_fp16_success_gt_cube) { diff --git a/tests/ut/ge/common/format_transfer_fracz_nchw_unittest.cc b/tests/ut/ge/common/format_transfer_fracz_nchw_unittest.cc index 93160070..15b6b9d3 100644 --- a/tests/ut/ge/common/format_transfer_fracz_nchw_unittest.cc +++ b/tests/ut/ge/common/format_transfer_fracz_nchw_unittest.cc @@ -39,7 +39,7 @@ TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_data_type) { TransResult result; FormatTransferFracZNchw transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_Invalid_src_format_reserved) { @@ -50,7 +50,7 @@ TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_Invalid_src_format_reserved) reinterpret_cast(data), FORMAT_RESERVED, FORMAT_NCHW, {16, 1, 16, 16}, {1, 1, 4, 4}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_dst_format_reserved) { @@ -61,7 +61,7 @@ TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_dst_format_reserved) reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_RESERVED, {16, 1, 16, 16}, {1, 1, 4, 4}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_src_shape) { @@ -72,7 +72,7 @@ TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_src_shape) { reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_NCHW, {16, 1, 1, 16, 16}, {1, 1, 4, 4}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_src_shape2) { @@ -83,7 +83,7 @@ TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_src_shape2) { reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_NCHW, {16, 1, -16, 16}, {1, 1, 4, 4}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_dst_shape) { @@ -94,7 +94,7 @@ TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_dst_shape) { reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_NCHW, {16, 1, 16, 16}, {1, 4, 4}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_dst_shape2) { @@ -105,7 +105,7 @@ TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_dst_shape2) { reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_NCHW, {16, 1, 16, 16}, {1, -1, 4, 4}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_src_dst_shape_relation1) { @@ -116,7 +116,7 @@ TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_src_dst_shape_relatio reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_NCHW, {16, 1, 16, 16}, {1, 17, 4, 4}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_src_dst_shape_relation2) { @@ -127,7 +127,7 @@ TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_invalid_src_dst_shape_relatio reinterpret_cast(data), FORMAT_FRACTAL_Z, FORMAT_NCHW, {16, 1, 16, 16}, {17, 1, 4, 4}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_fp16_success_lt_cube) { @@ -302,7 +302,7 @@ TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_fp16_success_eq_cube) { } Status status = transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape); - EXPECT_EQ(status, ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + EXPECT_EQ(status, ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferFraczNchw, fracz_to_nchw_fp16_success_gt_cube) { diff --git a/tests/ut/ge/common/format_transfer_hwcn_c1hwncoc0_unittest.cc b/tests/ut/ge/common/format_transfer_hwcn_c1hwncoc0_unittest.cc index 1e6b90dd..7fafa4c2 100644 --- a/tests/ut/ge/common/format_transfer_hwcn_c1hwncoc0_unittest.cc +++ b/tests/ut/ge/common/format_transfer_hwcn_c1hwncoc0_unittest.cc @@ -42,7 +42,7 @@ TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_data_type_uint8) { TransResult result; FormatTransferHwcnC1hwncoc0 transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_data_type_int32) { @@ -57,7 +57,7 @@ TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_data_type_int32) { reinterpret_cast(data), FORMAT_HWCN, FORMAT_C1HWNCoC0, {4, 4, 3, 1}, {1, 4, 4, 1, 16, 16}, DT_INT32}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_src_format_nchw) { @@ -72,10 +72,10 @@ TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_src_format_nchw) { reinterpret_cast(data), FORMAT_NCHW, FORMAT_C1HWNCoC0, {4, 4, 3, 1}, {1, 4, 4, 1, 16, 16}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); Status status = transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape); - EXPECT_EQ(status, ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + EXPECT_EQ(status, ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_dst_format_nc1khkwhwc0) { @@ -90,7 +90,7 @@ TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_dst_format_nc1khkwhw reinterpret_cast(data), FORMAT_HWCN, FORMAT_NC1KHKWHWC0, {4, 4, 3, 1}, {1, 4, 4, 1, 16, 16}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_src_shape) { @@ -105,7 +105,7 @@ TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_src_shape) { reinterpret_cast(data), FORMAT_HWCN, FORMAT_NC1KHKWHWC0, {4, 4, 3}, {1, 4, 4, 1, 16, 16}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_src_shape2) { @@ -120,7 +120,7 @@ TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_src_shape2) { reinterpret_cast(data), FORMAT_HWCN, FORMAT_C1HWNCoC0, {4, 4}, {1, 4, 4, 1, 16, 16}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_src_shape3) { @@ -139,10 +139,10 @@ TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_src_shape3) { DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); Status status = transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape); - EXPECT_EQ(status, ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID); + EXPECT_EQ(status, ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_dst_format) { @@ -157,7 +157,7 @@ TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_dst_format) { reinterpret_cast(data), FORMAT_HWCN, FORMAT_NC1KHKWHWC0, {4, 4, 3, 1}, {1, 1, 4, 4, 16, 16}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_dst_shape2) { @@ -172,7 +172,7 @@ TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_invalid_dst_shape2) { reinterpret_cast(data), FORMAT_HWCN, FORMAT_C1HWNCoC0, {4, 4, 3, 1}, {2, 4, 4, 1, 16, 16}, DT_FLOAT}; TransResult result; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_6d_fp16_success_lt_cube) { diff --git a/tests/ut/ge/common/format_transfer_nchw_5d_unittest.cc b/tests/ut/ge/common/format_transfer_nchw_5d_unittest.cc index 610bd7d3..7b88183e 100644 --- a/tests/ut/ge/common/format_transfer_nchw_5d_unittest.cc +++ b/tests/ut/ge/common/format_transfer_nchw_5d_unittest.cc @@ -640,7 +640,7 @@ TEST_F(UtestFormatTransferNchw5d, invalid_data_format) { reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_Z, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_FLOAT16}; FormatTransferNchwNc1hwc0 transfer; EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + ACL_ERROR_GE_FORMAT_INVALID); } } // namespace formats } // namespace ge diff --git a/tests/ut/ge/common/format_transfer_nhwc_5d_unittest.cc b/tests/ut/ge/common/format_transfer_nhwc_5d_unittest.cc index bc5a8754..e1218894 100644 --- a/tests/ut/ge/common/format_transfer_nhwc_5d_unittest.cc +++ b/tests/ut/ge/common/format_transfer_nhwc_5d_unittest.cc @@ -691,7 +691,7 @@ TEST_F(UtestFormatTransferNhwc5d, invalid_src_shape1) { TransResult result; FormatTransferNhwcNc1hwc0 transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } /* @@ -716,10 +716,10 @@ TEST_F(UtestFormatTransferNhwc5d, invalid_src_format) { TransResult result; FormatTransferNhwcNc1hwc0 transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); Status status = transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape); - EXPECT_EQ(status, ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + EXPECT_EQ(status, ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferNhwc5d, invalid_dst_shape2) { @@ -729,7 +729,7 @@ TEST_F(UtestFormatTransferNhwc5d, invalid_dst_shape2) { TransResult result; FormatTransferNhwcNc1hwc0 transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTransferNhwc5d, invalid_src_data_type) { @@ -739,7 +739,7 @@ TEST_F(UtestFormatTransferNhwc5d, invalid_src_data_type) { TransResult result; FormatTransferNhwcNc1hwc0 transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferNhwc5d, unsupport_dst_format) { @@ -749,7 +749,7 @@ TEST_F(UtestFormatTransferNhwc5d, unsupport_dst_format) { TransResult result; FormatTransferNhwcNc1hwc0 transfer; - EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferNhwc5d, invalid_data_shape) { @@ -758,13 +758,13 @@ TEST_F(UtestFormatTransferNhwc5d, invalid_data_shape) { reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_Z, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_FLOAT16}; FormatTransferNhwcNc1hwc0 transfer; EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID); + ACL_ERROR_GE_SHAPE_INVALID); TransArgs args2{ reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_Z, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_STRING}; FormatTransferNhwcNc1hwc0 transfer2; EXPECT_EQ(transfer2.TransShape(args2.src_format, args2.src_shape, args2.src_data_type, args2.dst_format, args2.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID); + ACL_ERROR_GE_DATATYPE_INVALID); } } // namespace formats } // namespace ge diff --git a/tests/ut/ge/common/format_transfer_nhwc_fractalz_unittest.cc b/tests/ut/ge/common/format_transfer_nhwc_fractalz_unittest.cc index a6dfffb0..ade28c02 100644 --- a/tests/ut/ge/common/format_transfer_nhwc_fractalz_unittest.cc +++ b/tests/ut/ge/common/format_transfer_nhwc_fractalz_unittest.cc @@ -5360,7 +5360,7 @@ TEST_F(UtestFormatTransferNhwcFz, invalid_data_type) { reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_NZ, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_VARIANT}; FormatTransferFractalZ transfer; EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_DATATYPE_INVALID); + ACL_ERROR_GE_DATATYPE_INVALID); } TEST_F(UtestFormatTransferNhwcFz, invalid_data_format) { @@ -5369,7 +5369,7 @@ TEST_F(UtestFormatTransferNhwcFz, invalid_data_format) { reinterpret_cast(data), FORMAT_CHWN, FORMAT_FRACTAL_NZ, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_FLOAT16}; FormatTransferFractalZ transfer; EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTransferNhwcFz, invalid_data_shape) { @@ -5378,19 +5378,19 @@ TEST_F(UtestFormatTransferNhwcFz, invalid_data_shape) { reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_Z, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_FLOAT16}; FormatTransferFractalZ transfer; EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID); + ACL_ERROR_GE_SHAPE_INVALID); TransArgs args2{ reinterpret_cast(data), FORMAT_HWCN, FORMAT_FRACTAL_Z, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_FLOAT16}; FormatTransferFractalZ transfer2; EXPECT_EQ(transfer2.TransShape(args2.src_format, args2.src_shape, args2.src_data_type, args2.dst_format, args2.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID); + ACL_ERROR_GE_SHAPE_INVALID); TransArgs args3{ reinterpret_cast(data), FORMAT_NCHW, FORMAT_FRACTAL_Z, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_FLOAT16}; FormatTransferFractalZ transfer3; EXPECT_EQ(transfer3.TransShape(args3.src_format, args3.src_shape, args3.src_data_type, args3.dst_format, args3.dst_shape), - ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID); + ACL_ERROR_GE_SHAPE_INVALID); } } // namespace formats } // namespace ge diff --git a/tests/ut/ge/common/format_transfer_transpose_unittest.cc b/tests/ut/ge/common/format_transfer_transpose_unittest.cc index d56e06c0..04f2a557 100644 --- a/tests/ut/ge/common/format_transfer_transpose_unittest.cc +++ b/tests/ut/ge/common/format_transfer_transpose_unittest.cc @@ -4659,14 +4659,14 @@ TEST_F(UtestFormatTranspose, invalid_data_shape) { FormatTransferTranspose transfer; std::vector dst_shape; EXPECT_EQ(transfer.TransShape(FORMAT_NCHW, std::vector({}), DT_FLOAT16, FORMAT_HWCN, dst_shape), - ACL_ERROR_GE_TRANSSHAPE_SHAPE_INVALID); + ACL_ERROR_GE_SHAPE_INVALID); } TEST_F(UtestFormatTranspose, invalid_src_format) { FormatTransferTranspose transfer; std::vector dst_shape; EXPECT_EQ(transfer.TransShape(FORMAT_NC1HWC0, std::vector({1, 3, 8, 8}), DT_FLOAT16, FORMAT_HWCN, dst_shape), - ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + ACL_ERROR_GE_FORMAT_INVALID); } TEST_F(UtestFormatTranspose, invalid_dst_format) { @@ -4674,7 +4674,7 @@ TEST_F(UtestFormatTranspose, invalid_dst_format) { std::vector dst_shape; std::vector src_shape; EXPECT_EQ(transfer.TransShape(FORMAT_NCHW, src_shape, DT_FLOAT16, FORMAT_C1HWNC0, dst_shape), - ACL_ERROR_GE_TRANSSHAPE_FORMAT_INVALID); + ACL_ERROR_GE_FORMAT_INVALID); } } // namespace formats } // namespace ge diff --git a/tests/ut/ge/common/opdebug_register_unittest.cc b/tests/ut/ge/common/opdebug_register_unittest.cc new file mode 100644 index 00000000..fcdaddaf --- /dev/null +++ b/tests/ut/ge/common/opdebug_register_unittest.cc @@ -0,0 +1,51 @@ +/** + * 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. + */ + +#include + +#include "common/dump/opdebug_register.h" +#include "common/debug/log.h" +#include "common/ge_inner_error_codes.h" + +namespace ge { +class UTEST_opdebug_register : public testing::Test { + protected: + void SetUp() {} + void TearDown() {} +}; + +TEST_F(UTEST_opdebug_register, register_debug_for_model_success) { + OpdebugRegister opdebug_register; + rtModel_t model_handle = (void*)0x111; + uint32_t op_debug_mode = 1; + DataDumper data_dumper; + auto ret = opdebug_register.RegisterDebugForModel(model_handle, op_debug_mode, data_dumper); + opdebug_register.UnregisterDebugForModel(model_handle); + EXPECT_EQ(ret, ge::SUCCESS); +} + +TEST_F(UTEST_opdebug_register, register_debug_for_stream_success) { + OpdebugRegister opdebug_register; + rtStream_t stream = (void*)0x111; + uint32_t op_debug_mode = 1; + DataDumper data_dumper; + auto ret = opdebug_register.RegisterDebugForStream(stream, op_debug_mode, data_dumper); + opdebug_register.UnregisterDebugForStream(stream); + EXPECT_EQ(ret, ge::SUCCESS); +} + + +} // namespace ge \ No newline at end of file diff --git a/tests/ut/ge/executor/ge_executor_unittest.cc b/tests/ut/ge/executor/ge_executor_unittest.cc new file mode 100644 index 00000000..a98f9290 --- /dev/null +++ b/tests/ut/ge/executor/ge_executor_unittest.cc @@ -0,0 +1,42 @@ +/** + * 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. + */ + +#include + +#define private public +#define protected public +#include "executor/ge_executor.h" +#include "graph/utils/tensor_utils.h" + +using namespace std; + +namespace ge { +class UtestGeExecutor : public testing::Test { + protected: + void SetUp() {} + + void TearDown() {} +}; + +TEST_F(UtestGeExecutor, test_single_op_exec) { + GeExecutor exeutor; + ModelData model_data; + string model_name = "1234"; + + EXPECT_EQ(exeutor.LoadSingleOp(model_name, model_data, nullptr, nullptr), ACL_ERROR_GE_INTERNAL_ERROR); + EXPECT_EQ(exeutor.LoadDynamicSingleOp(model_name, model_data, nullptr, nullptr), PARAM_INVALID); +} +} // namespace ge \ No newline at end of file diff --git a/tests/ut/ge/generator/ge_generator_unittest.cc b/tests/ut/ge/generator/ge_generator_unittest.cc new file mode 100644 index 00000000..3daa5592 --- /dev/null +++ b/tests/ut/ge/generator/ge_generator_unittest.cc @@ -0,0 +1,74 @@ +/** + * 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. + */ + +#include + +#define private public +#define protected public +#include "generator/ge_generator.h" +#include "graph/utils/tensor_utils.h" + +using namespace std; + +namespace ge { +class UtestGeGenerator : public testing::Test { + protected: + void SetUp() {} + + void TearDown() {} +}; + +/* +TEST_F(UtestGeGenerator, test_build_single_op_offline) { + GeTensorDesc tensor_desc(GeShape(), FORMAT_NCHW, DT_FLOAT); + TensorUtils::SetSize(tensor_desc, 512); + + shared_ptr op_desc = make_shared("Add", "add"); + EXPECT_EQ(op_desc->AddInputDesc(tensor_desc), GRAPH_SUCCESS); + EXPECT_EQ(op_desc->AddInputDesc(tensor_desc), GRAPH_SUCCESS); + EXPECT_EQ(op_desc->AddOutputDesc(tensor_desc), GRAPH_SUCCESS); + + GeTensor tensor(tensor_desc); + const vector inputs = { tensor, tensor }; + const vector outputs = { tensor }; + + // not Initialize, impl is null. + GeGenerator generator; + EXPECT_EQ(generator.BuildSingleOpModel(op_desc, inputs, outputs, "offline_"), PARAM_INVALID); + + // const map &options + generator.Initialize({}); + EXPECT_EQ(generator.BuildSingleOpModel(op_desc, inputs, outputs, "offline_"), GE_GENERATOR_GRAPH_MANAGER_BUILD_GRAPH_FAILED); +} +*/ + +TEST_F(UtestGeGenerator, test_build_single_op_online) { + GeTensorDesc tensor_desc; + shared_ptr op_desc = make_shared("Add", "add"); + op_desc->AddInputDesc(tensor_desc); + op_desc->AddInputDesc(tensor_desc); + op_desc->AddOutputDesc(tensor_desc); + + GeTensor tensor(tensor_desc); + const vector inputs = { tensor, tensor }; + const vector outputs = { tensor }; + + GeGenerator generator; + generator.Initialize({}); + ModelBufferData model_buffer; + EXPECT_EQ(generator.BuildSingleOpModel(op_desc, inputs, outputs, ENGINE_AIVECTOR, model_buffer), FAILED); +} +} // namespace ge diff --git a/tests/ut/ge/graph/build/mem_assigner_unittest.cc b/tests/ut/ge/graph/build/mem_assigner_unittest.cc index f53a0732..0024185b 100644 --- a/tests/ut/ge/graph/build/mem_assigner_unittest.cc +++ b/tests/ut/ge/graph/build/mem_assigner_unittest.cc @@ -25,10 +25,12 @@ #include "graph/utils/op_desc_utils.h" #include "graph/utils/tensor_utils.h" #include "omg/omg_inner_types.h" +#include "../passes/graph_builder_utils.h" #define protected public #define private public #include "graph/build/memory/binary_block_mem_assigner.h" +#include "graph/build/memory/graph_mem_assigner.h" #include "graph/build/memory/hybrid_mem_assigner.h" #include "graph/build/memory/max_block_mem_assigner.h" #undef protected @@ -41,7 +43,7 @@ using domi::GetContext; class UtestMemoryAssignerTest : public testing::Test { public: - ge::OpDescPtr createOpWithWsSize(const string &name, int64_t wsByte, const string &type = "some") { + ge::OpDescPtr CreateOpWithWsSize(const string &name, int64_t wsByte, const string &type = "some") { ge::OpDescPtr op_def = make_shared(name, type); auto desc_temp_ptr = make_shared(); auto desc_temp = *desc_temp_ptr; @@ -55,26 +57,46 @@ class UtestMemoryAssignerTest : public testing::Test { op_def->SetWorkspaceBytes(workspace_bytes); return op_def; } - void make_graph(ge::ComputeGraphPtr graph) { - ge::OpDescPtr op_def_a = createOpWithWsSize("A", 6000); + ge::OpDescPtr CreateRefOpWithWsSize(const string &name, int64_t wsByte, const string &type = "some") { + ge::OpDescPtr op_def = make_shared(name, type); + auto desc_temp_ptr = make_shared(); + auto desc_temp = *desc_temp_ptr; + + TensorUtils::SetSize(desc_temp, 1024); + op_def->AddInputDesc(desc_temp); + + auto desc_output_ptr = make_shared(); + auto desc_output = *desc_output_ptr; + TensorUtils::SetSize(desc_output, 6500); + ge::TensorUtils::SetReuseInput(desc_output, true); + ge::TensorUtils::SetReuseInputIndex(desc_output, 0); + op_def->AddOutputDesc(desc_output); + + std::vector workspace_bytes; + workspace_bytes.push_back(wsByte); + op_def->SetWorkspaceBytes(workspace_bytes); + return op_def; + } + void MakeGraph(ge::ComputeGraphPtr &graph) { + ge::OpDescPtr op_def_a = CreateOpWithWsSize("A", 6000); op_def_a->SetStreamId(0); - ge::OpDescPtr op_def_b = createOpWithWsSize("B", 120000); + ge::OpDescPtr op_def_b = CreateOpWithWsSize("B", 120000); op_def_b->SetStreamId(0); - ge::OpDescPtr op_def_c = createOpWithWsSize("C", 16000); + ge::OpDescPtr op_def_c = CreateOpWithWsSize("C", 16000); op_def_c->SetStreamId(1); - ge::OpDescPtr op_def_d = createOpWithWsSize("D", 24000); + ge::OpDescPtr op_def_d = CreateOpWithWsSize("D", 24000); op_def_d->SetStreamId(2); - ge::OpDescPtr op_def_e = createOpWithWsSize("E", 24000); + ge::OpDescPtr op_def_e = CreateOpWithWsSize("E", 24000); op_def_e->SetStreamId(3); - ge::OpDescPtr op_def_f = createOpWithWsSize("F", 30000); + ge::OpDescPtr op_def_f = CreateOpWithWsSize("F", 30000); op_def_f->SetStreamId(2); - ge::OpDescPtr op_def_g = createOpWithWsSize("G", 32000); + ge::OpDescPtr op_def_g = CreateOpWithWsSize("G", 32000); op_def_g->SetStreamId(3); - ge::OpDescPtr op_def_h = createOpWithWsSize("H", 48000); + ge::OpDescPtr op_def_h = CreateOpWithWsSize("H", 48000); op_def_h->SetStreamId(2); - ge::OpDescPtr op_def_i = createOpWithWsSize("I", 60000); + ge::OpDescPtr op_def_i = CreateOpWithWsSize("I", 60000); op_def_i->SetStreamId(2); - ge::OpDescPtr op_def_j = createOpWithWsSize("J", 256000, NETOUTPUT); + ge::OpDescPtr op_def_j = CreateOpWithWsSize("J", 256000, NETOUTPUT); op_def_j->SetStreamId(3); // add node @@ -108,24 +130,10 @@ class UtestMemoryAssignerTest : public testing::Test { graph->TopologicalSorting(); } - void make_reuse_graph(ge::ComputeGraphPtr graph) { - ge::OpDescPtr op_def_a = createOpWithWsSize("A", 6000); - ge::OpDescPtr op_def_b = createOpWithWsSize("B", 120000); - - ge::OpDescPtr op_def_c = make_shared("C", "Some"); - auto desc_input_ptr = make_shared(); - auto desc_input = *desc_input_ptr; - - TensorUtils::SetSize(desc_input, 1024); - op_def_c->AddInputDesc(desc_input); - - auto desc_output_ptr = make_shared(); - auto desc_output = *desc_output_ptr; - TensorUtils::SetSize(desc_output, 6500); - ge::TensorUtils::SetReuseInput(desc_output, true); - ge::TensorUtils::SetReuseInputIndex(desc_output, 0); - op_def_c->AddOutputDesc(desc_output); - + void MakeReuseGraph(ge::ComputeGraphPtr graph) { + ge::OpDescPtr op_def_a = CreateOpWithWsSize("A", 6000); + ge::OpDescPtr op_def_b = CreateOpWithWsSize("B", 120000); + ge::OpDescPtr op_def_c = CreateRefOpWithWsSize("C", 120000); ge::OpDescPtr op_def_d = make_shared("D", "CONSTANT"); ge::NodePtr node_a = graph->AddNode(op_def_a); @@ -141,6 +149,47 @@ class UtestMemoryAssignerTest : public testing::Test { graph->TopologicalSorting(); } + ComputeGraphPtr MakeCascadeContinuousMemoryGraph() { + ge::ut::GraphBuilder builder("graph"); + auto data = builder.AddNode("data", "Data", 1, 1); + auto addn1 = builder.AddNode("addn1", "AddN", 1, 1); + auto addn2 = builder.AddNode("addn2", "AddN", 1, 1); + auto addn3 = builder.AddNode("addn3", "AddN", 1, 1); + auto concat1 = builder.AddNode("concat1", "Concat", 2, 1); + auto concat2 = builder.AddNode("concat2", "Concat", 2, 1); + auto netoutput = builder.AddNode("netoutput", "NetOutput", 2, 0); + + ge::AttrUtils::SetBool(concat1->GetOpDesc(), ATTR_NAME_NOPADDING_CONTINUOUS_INPUT, true); + ge::AttrUtils::SetBool(concat1->GetOpDesc(), ATTR_NAME_CONTINUOUS_INPUT_ALLOC, true); + ge::AttrUtils::SetBool(concat1->GetOpDesc(), ATTR_NAME_OUTPUT_REUSE_INPUT, true); + + ge::AttrUtils::SetBool(concat2->GetOpDesc(), ATTR_NAME_NOPADDING_CONTINUOUS_INPUT, true); + ge::AttrUtils::SetBool(concat2->GetOpDesc(), ATTR_NAME_CONTINUOUS_INPUT_ALLOC, true); + ge::AttrUtils::SetBool(concat2->GetOpDesc(), ATTR_NAME_OUTPUT_REUSE_INPUT, true); + + addn1->GetOpDesc()->SetOutputOffset({100}); + addn2->GetOpDesc()->SetOutputOffset({200}); + concat1->GetOpDesc()->SetOutputOffset({100}); + addn3->GetOpDesc()->SetOutputOffset({700}); + concat2->GetOpDesc()->SetOutputOffset({500}); + + ge::AttrUtils::SetListInt(addn1->GetOpDesc(), ATTR_NAME_OUTPUT_OFFSET_FOR_BUFFER_FUSION, {100}); + ge::AttrUtils::SetListInt(addn2->GetOpDesc(), ATTR_NAME_OUTPUT_OFFSET_FOR_BUFFER_FUSION, {100}); + ge::AttrUtils::SetListInt(addn3->GetOpDesc(), ATTR_NAME_OUTPUT_OFFSET_FOR_BUFFER_FUSION, {100}); + ge::AttrUtils::SetListInt(concat1->GetOpDesc(), ATTR_NAME_OUTPUT_OFFSET_FOR_BUFFER_FUSION, {200}); + ge::AttrUtils::SetListInt(concat2->GetOpDesc(), ATTR_NAME_OUTPUT_OFFSET_FOR_BUFFER_FUSION, {300}); + + + builder.AddDataEdge(data, 0, addn1, 0); + builder.AddDataEdge(data, 0, addn2, 0); + builder.AddDataEdge(addn1, 0, concat1, 0); + builder.AddDataEdge(addn2, 0, concat1, 1); + builder.AddDataEdge(concat1, 0, concat2, 0); + builder.AddDataEdge(addn3, 0, concat2, 1); + + return builder.GetGraph(); + } + protected: void SetUp() {} @@ -150,7 +199,7 @@ class UtestMemoryAssignerTest : public testing::Test { /* TEST_F(UtestMemoryAssignerTest, MemoryBlock_Resize_RealSizeList_is_empty) { ge::ComputeGraphPtr graph = make_shared(""); - ge::OpDescPtr op_def_a = createOpWithWsSize("A", 6000); + ge::OpDescPtr op_def_a = CreateOpWithWsSize("A", 6000); ge::NodePtr node_a = graph->AddNode(op_def_a); MemoryBlock* memory_block = new MemoryBlock(0); memory_block->Init(1, kOutput, node_a, 0, 1); @@ -178,7 +227,7 @@ class MockBlockMemAssigner : public BlockMemAssigner { // when check GetMemoryRanges return fail, Assign return fail TEST_F(UtestMemoryAssignerTest, Mock_block_mem_assigner_failed) { ge::ComputeGraphPtr graph = make_shared(""); - make_graph(graph); + MakeGraph(graph); std::map anchor_to_symbol; std::map> symbol_to_anchors; EXPECT_EQ(GraphUtils::GetRefMapping(graph, symbol_to_anchors, anchor_to_symbol), GRAPH_SUCCESS); @@ -186,3 +235,17 @@ TEST_F(UtestMemoryAssignerTest, Mock_block_mem_assigner_failed) { MockBlockMemAssigner mock_assigner(graph, anchor_to_symbol, symbol_to_anchors); EXPECT_EQ(mock_assigner.Assign(), FAILED); } + +TEST_F(UtestMemoryAssignerTest, graph_memory_assign_continuous_input) { + ge::ComputeGraphPtr graph = MakeCascadeContinuousMemoryGraph(); + auto addn1 = graph->FindNode("addn1"); + auto addn2 = graph->FindNode("addn2"); + EXPECT_EQ(addn1->GetOpDesc()->GetOutputOffset()[0], 100); + EXPECT_EQ(addn2->GetOpDesc()->GetOutputOffset()[0], 200); + GraphMemoryAssigner memoryAssigner(graph); + MemoryOffset memory_offset(RT_MEMORY_HBM, 0); + memoryAssigner.memory_offset_.emplace(RT_MEMORY_HBM, memory_offset); + EXPECT_EQ(memoryAssigner.ReAssignContinuousMemory(false), GRAPH_SUCCESS); + EXPECT_EQ(addn1->GetOpDesc()->GetOutputOffset()[0], 500); + EXPECT_EQ(addn2->GetOpDesc()->GetOutputOffset()[0], 600); +} diff --git a/tests/ut/ge/graph/ge_executor_unittest.cc b/tests/ut/ge/graph/ge_executor_unittest.cc index 3ef8a750..e26aa86e 100644 --- a/tests/ut/ge/graph/ge_executor_unittest.cc +++ b/tests/ut/ge/graph/ge_executor_unittest.cc @@ -34,7 +34,6 @@ #include "common/types.h" #include "graph/load/graph_loader.h" #include "graph/load/model_manager/davinci_model.h" -#include "graph/load/model_manager/davinci_model_parser.h" #include "graph/load/model_manager/model_manager.h" #include "graph/load/model_manager/task_info/kernel_task_info.h" #include "graph/load/model_manager/task_info/kernel_ex_task_info.h" @@ -109,6 +108,26 @@ static ge::OpDescPtr CreateOpDesc(string name = "", string type = "") { ge::AttrUtils::SetInt(op_desc, ge::ATTR_NAME_STREAM_SWITCH_COND, 0); return op_desc; } + +TEST_F(UtestGeExecutor, load_data_from_file) { + GeExecutor ge_executor; + ge_executor.isInit_ = true; + + string test_smap = "/tmp/" + std::to_string(getpid()) + "_maps"; + string self_smap = "/proc/" + std::to_string(getpid()) + "/maps"; + string copy_smap = "cp " + self_smap + " " + test_smap; + EXPECT_EQ(system(copy_smap.c_str()), 0); + + ModelData model_data; + EXPECT_EQ(ge_executor.LoadDataFromFile(test_smap, model_data), SUCCESS); + + EXPECT_NE(model_data.model_data, nullptr); + delete[] static_cast(model_data.model_data); + model_data.model_data = nullptr; + + ge_executor.isInit_ = false; +} + /* TEST_F(UtestGeExecutor, fail_UnloadModel_model_manager_stop_unload_error) { uint32_t model_id = 1; diff --git a/tests/ut/ge/graph/graph_load_unittest.cc b/tests/ut/ge/graph/graph_load_unittest.cc index 54972af7..cbcefd03 100644 --- a/tests/ut/ge/graph/graph_load_unittest.cc +++ b/tests/ut/ge/graph/graph_load_unittest.cc @@ -24,7 +24,6 @@ #include "common/helper/model_helper.h" #include "common/op/ge_op_utils.h" #include "common/types.h" -#include "graph/load/model_manager/davinci_model_parser.h" #include "graph/op_desc.h" #include "graph/types.h" #include "graph/utils/attr_utils.h" diff --git a/tests/ut/ge/graph/load/davinci_model_unittest.cc b/tests/ut/ge/graph/load/davinci_model_unittest.cc index b8a963e3..18cc622b 100644 --- a/tests/ut/ge/graph/load/davinci_model_unittest.cc +++ b/tests/ut/ge/graph/load/davinci_model_unittest.cc @@ -15,6 +15,7 @@ */ #include +#include #define private public #define protected public @@ -890,4 +891,55 @@ TEST_F(UtestDavinciModel, Sink_model_profile) { model.SinkModelProfile(); } +TEST_F(UtestDavinciModel, Sink_time_profile) { + ProfilingManager::Instance().prof_cb_.msprofReporterCallback = MsprofReport; + DavinciModel model(0, nullptr); + InputData current_data; + model.SinkTimeProfile(current_data); +} + +class ClassTest { +public: + virtual ~ClassTest() {} + + virtual int func0() { + return 0; + } + virtual int func1(int a) { + return a; + } + virtual int func2(int a, int b) { + return a + b; + } + virtual int func3(int a, int b) const { + return a - b; + } +}; + +class MockTest : public ClassTest { +public: + MOCK_METHOD0(func0, int()); + MOCK_METHOD1(func1, int(int a)); + MOCK_METHOD2(func2, int(int a, int b)); + + MOCK_CONST_METHOD2(func3, int(int a, int b)); +}; + +TEST_F(UtestDavinciModel, simple_test_gmock) { + MockTest mock_stub; + + ON_CALL(mock_stub, func0()).WillByDefault(testing::Return(250)); + EXPECT_EQ(mock_stub.func0(), 250); + EXPECT_EQ(mock_stub.func0(), 250); + EXPECT_EQ(mock_stub.func0(), 250); + + EXPECT_CALL(mock_stub, func1(testing::_)).Times(2).WillOnce(testing::Return(1024)).WillOnce(testing::Return(250)); + EXPECT_EQ(mock_stub.func1(1), 1024); + EXPECT_EQ(mock_stub.func1(1), 250); + + EXPECT_CALL(mock_stub, func2(testing::_, 5)).Times(3).WillRepeatedly(testing::Return(1023)); + EXPECT_EQ(mock_stub.func2(1, 5), 1023); + EXPECT_EQ(mock_stub.func2(2, 5), 1023); + EXPECT_EQ(mock_stub.func2(3, 5), 1023); +} } // namespace ge diff --git a/tests/ut/ge/graph/load/kernel_ex_task_info_unittest.cc b/tests/ut/ge/graph/load/kernel_ex_task_info_unittest.cc index 68d029a8..44d4d042 100644 --- a/tests/ut/ge/graph/load/kernel_ex_task_info_unittest.cc +++ b/tests/ut/ge/graph/load/kernel_ex_task_info_unittest.cc @@ -146,4 +146,12 @@ TEST_F(UtestKernelExTaskInfo, kernel_ex_task_ext_info) { EXPECT_EQ(kernel_ex_task_info.InitTaskExtInfo(ext_info, op_desc), SUCCESS); } +TEST_F(UtestKernelExTaskInfo, parse_update_addr) { + const string ext_info = {3,0,0,0,4,0,0,0,4,0,0,0}; + const OpDescPtr op_desc = CreateOpDesc("FrameworkOp", "FrameworkOp"); + AttrUtils::SetBool(op_desc, "_AllShape", true); + + KernelExTaskInfo kernel_ex_task_info; + EXPECT_EQ(kernel_ex_task_info.InitTaskExtInfo(ext_info, op_desc), SUCCESS); +} } // namespace ge diff --git a/tests/ut/ge/graph/load/model_helper_unittest.cc b/tests/ut/ge/graph/load/model_helper_unittest.cc index 455285bf..03605dc7 100644 --- a/tests/ut/ge/graph/load/model_helper_unittest.cc +++ b/tests/ut/ge/graph/load/model_helper_unittest.cc @@ -18,6 +18,8 @@ #define private public #define protected public #include "framework/common/helper/model_helper.h" +#include "framework/omg/model_tool.h" +#include "framework/omg/ge_init.h" #include "ge/model/ge_model.h" #undef private #undef protected @@ -49,4 +51,21 @@ TEST_F(UtestModelHelper, save_size_to_modeldef) ModelHelper model_helper; EXPECT_EQ(SUCCESS, model_helper.SaveSizeToModelDef(ge_model)); } + +TEST_F(UtestModelHelper, atc_test) +{ + ge::proto::ModelDef model_def; + uint32_t modeldef_size = 0; + + GEInit::Finalize(); + char buffer[1024]; + getcwd(buffer, 1024); + string path=buffer; + string file_path=path + "/Makefile"; + + ModelTool::GetModelInfoFromOm(file_path.c_str(), model_def, modeldef_size); + ModelTool::GetModelInfoFromOm("123.om", model_def, modeldef_size); + ModelTool::GetModelInfoFromPbtxt(file_path.c_str(), model_def); + ModelTool::GetModelInfoFromPbtxt("123.pbtxt", model_def); +} } // namespace ge diff --git a/tests/ut/ge/graph/load/model_manager_unittest.cc b/tests/ut/ge/graph/load/model_manager_unittest.cc index 81d88ecd..0e65954d 100644 --- a/tests/ut/ge/graph/load/model_manager_unittest.cc +++ b/tests/ut/ge/graph/load/model_manager_unittest.cc @@ -25,7 +25,6 @@ #include "common/op/ge_op_utils.h" #include "graph/load/graph_loader.h" #include "graph/load/model_manager/davinci_model.h" -#include "graph/load/model_manager/davinci_model_parser.h" using namespace std; using namespace testing; diff --git a/tests/ut/ge/graph/load/new_model_manager_model_manager_aicpu_unittest.cc b/tests/ut/ge/graph/load/new_model_manager_model_manager_aicpu_unittest.cc index a68fb307..d22496ec 100644 --- a/tests/ut/ge/graph/load/new_model_manager_model_manager_aicpu_unittest.cc +++ b/tests/ut/ge/graph/load/new_model_manager_model_manager_aicpu_unittest.cc @@ -21,7 +21,7 @@ #include "common/debug/log.h" #include "common/l2_cache_optimize.h" -#include "common/model_parser/base.h" +#include "common/model_parser/model_parser.h" #include "common/properties_manager.h" #include "common/types.h" @@ -31,7 +31,6 @@ #include "common/op/ge_op_utils.h" #include "graph/load/graph_loader.h" #include "graph/load/model_manager/davinci_model.h" -#include "graph/load/model_manager/davinci_model_parser.h" #include "graph/load/model_manager/model_manager.h" //#include "new_op_test_utils.h" #undef private diff --git a/tests/ut/ge/graph/manager/graph_caching_allocator_unittest.cc b/tests/ut/ge/graph/manager/graph_caching_allocator_unittest.cc new file mode 100644 index 00000000..7863a70f --- /dev/null +++ b/tests/ut/ge/graph/manager/graph_caching_allocator_unittest.cc @@ -0,0 +1,105 @@ +/** + * 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. + */ + +#include +#include + +#include "graph/anchor.h" +#include "graph/attr_value.h" +#include "graph/debug/ge_attr_define.h" +#include "graph/utils/graph_utils.h" +#include "graph/utils/node_utils.h" +#include "graph/utils/op_desc_utils.h" +#include "graph/utils/tensor_utils.h" +#include "omg/omg_inner_types.h" + +#define protected public +#define private public +#include "graph/manager/graph_caching_allocator.h" +#include "graph/manager/graph_mem_allocator.h" +#undef protected +#undef private + +using namespace std; +using namespace testing; +using namespace ge; +using domi::GetContext; + +class UtestGraphCachingAllocatorTest : public testing::Test { + protected: + void SetUp() {} + + void TearDown() { GetContext().out_nodes_map.clear(); } +}; + +TEST_F(UtestGraphCachingAllocatorTest, initialize_success) { + std::vector mem_type; + mem_type.push_back(RT_MEMORY_HBM); + EXPECT_EQ(MemManager::Instance().Initialize(mem_type), SUCCESS); + MemManager::Instance().Finalize(); +} + +TEST_F(UtestGraphCachingAllocatorTest, malloc_success) { + std::vector mem_type; + mem_type.push_back(RT_MEMORY_HBM); + EXPECT_EQ(MemManager::Instance().Initialize(mem_type), SUCCESS); + uint8_t *ptr = MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Malloc(kMByteSize); + EXPECT_NE(nullptr, ptr); + MemManager::Instance().Finalize(); +} + +TEST_F(UtestGraphCachingAllocatorTest, extend_malloc_success) { + std::vector mem_type; + mem_type.push_back(RT_MEMORY_HBM); + EXPECT_EQ(MemManager::Instance().Initialize(mem_type), SUCCESS); + uint8_t *ptr = MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Malloc(kMByteSize); + EXPECT_NE(nullptr, ptr); + ptr = MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Malloc(kBinSizeUnit32*kMByteSize); + EXPECT_NE(nullptr, ptr); + MemManager::Instance().Finalize(); +} + +TEST_F(UtestGraphCachingAllocatorTest, malloc_same_success) { + std::vector mem_type; + mem_type.push_back(RT_MEMORY_HBM); + EXPECT_EQ(MemManager::Instance().Initialize(mem_type), SUCCESS); + uint8_t *ptr = MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Malloc(kBinSizeUnit8*kMByteSize); + EXPECT_NE(nullptr, ptr); + uint8_t *ptr1 = MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Malloc(kBinSizeUnit8*kMByteSize); + EXPECT_NE(nullptr, ptr1); + uint8_t *ptr2 = MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Malloc(kBinSizeUnit8*kMByteSize); + EXPECT_NE(nullptr, ptr2); + EXPECT_EQ(MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Free(ptr), SUCCESS); + EXPECT_EQ(MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Free(ptr1), SUCCESS); + EXPECT_EQ(MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Free(ptr2), SUCCESS); + ptr = MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Malloc(kBinSizeUnit8*kMByteSize, ptr1); + EXPECT_EQ(ptr, ptr1); + MemManager::Instance().Finalize(); +} + +TEST_F(UtestGraphCachingAllocatorTest, malloc_statics) { + std::vector mem_type; + mem_type.push_back(RT_MEMORY_HBM); + EXPECT_EQ(MemManager::Instance().Initialize(mem_type), SUCCESS); + uint8_t *ptr = MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Malloc(kMByteSize); + EXPECT_NE(nullptr, ptr); + uint8_t *ptr1 = MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Malloc(kKByteSize); + EXPECT_NE(nullptr, ptr); + EXPECT_EQ(MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Free(ptr), SUCCESS); + EXPECT_EQ(MemManager::Instance().CachingInstance(RT_MEMORY_HBM).Free(ptr1), SUCCESS); + MemManager::Instance().CachingInstance(RT_MEMORY_HBM).FreeCachedBlocks(); + MemManager::Instance().Finalize(); +} \ No newline at end of file diff --git a/tests/ut/ge/graph/passes/replace_with_empty_const_pass_unittest.cc b/tests/ut/ge/graph/passes/replace_with_empty_const_pass_unittest.cc new file mode 100644 index 00000000..6711b0d3 --- /dev/null +++ b/tests/ut/ge/graph/passes/replace_with_empty_const_pass_unittest.cc @@ -0,0 +1,88 @@ +/** + * 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. + */ + +#include "graph/passes/replace_with_empty_const_pass.h" + +#include +#include +#include + +#include "graph_builder_utils.h" + +namespace ge { +class UtestReplaceWithEmptyConstPass : public testing::Test { + protected: + void SetUp() {} + void TearDown() {} +}; + +namespace { +/// data1 const1 +/// \ / +/// add1 +/// | +/// cast1(empty) +/// | +/// conv2d +ut::GraphBuilder Graph1Builder() { + ut::GraphBuilder builder = ut::GraphBuilder("g1"); + auto data1 = builder.AddNode("data1", "Data", 0, 1); + auto const1 = builder.AddNode("const1", "Const", 0, 1); + auto add1 = builder.AddNode("add1", "Add", 2, 1); + auto cast1 = builder.AddNode("cast1", "Cast", 1, 1); + auto conv2d = builder.AddNode("conv2d", "Conv2D", 1, 0); + + add1->GetOpDesc()->AddInputDesc(GeTensorDesc(GeShape({1,1,8,8}),FORMAT_NCHW)); + add1->GetOpDesc()->AddInputDesc(GeTensorDesc(GeShape({1,1,8,8}),FORMAT_NCHW)); + add1->GetOpDesc()->AddOutputDesc(GeTensorDesc(GeShape({1,1,8,8}),FORMAT_NCHW)); + GeTensorDesc empty_tensor(GeShape({1,0,8,8}),FORMAT_NCHW); + cast1->GetOpDesc()->UpdateOutputDesc(0,empty_tensor); + + builder.AddDataEdge(data1, 0, add1, 0); + builder.AddDataEdge(const1, 0, add1, 1); + builder.AddDataEdge(add1, 0, cast1, 0); + builder.AddDataEdge(cast1, 0, conv2d, 0); + return builder; +} +} // namespace + + +TEST_F(UtestReplaceWithEmptyConstPass, replace_whith_empty_const_success) { + auto builder = Graph1Builder(); + auto graph = builder.GetGraph(); + graph->SetSessionID(0); + ReplaceWithEmptyConstPass replace_with_empty_const_pass; + + EXPECT_EQ(graph->GetDirectNodesSize(),5); + // run pass on add1, graph still has 5 nodes + auto add1 = graph->FindNode("add1"); + Status ret = replace_with_empty_const_pass.Run(add1); + EXPECT_EQ(ret, SUCCESS); + EXPECT_EQ(graph->GetDirectNodesSize(),5); + + // run pass on const1, graph still has 5 nodes + auto const1 = graph->FindNode("const1"); + ret = replace_with_empty_const_pass.Run(const1); + EXPECT_EQ(ret, SUCCESS); + EXPECT_EQ(graph->GetDirectNodesSize(),5); + + auto cast1 = graph->FindNode("cast1"); + ret = replace_with_empty_const_pass.Run(cast1); + EXPECT_EQ(cast1->GetOutAllNodes().size(),0); + auto conv2d = graph->FindNode("conv2d"); + EXPECT_EQ(conv2d->GetInDataNodes().at(0)->GetType(),"Const"); +} +} // namespace ge diff --git a/tests/ut/ge/graph/passes/transpose_transdata_pass_unittest.cc b/tests/ut/ge/graph/passes/transpose_transdata_pass_unittest.cc new file mode 100644 index 00000000..07919dc6 --- /dev/null +++ b/tests/ut/ge/graph/passes/transpose_transdata_pass_unittest.cc @@ -0,0 +1,67 @@ +/** + * 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. + */ + +#include +#include + +#define protected public +#define private public +#include "graph/passes/transpose_transdata_pass.h" +#include "graph_builder_utils.h" +#undef private +#undef protected + +#include "graph/graph.h" +#include "common/ge_inner_error_codes.h" +#include "common/types.h" +#include "graph/debug/ge_attr_define.h" + +namespace ge { +class UtestGraphPassesTransposeTransdataPass : public testing::Test { + protected: + void SetUp() {} + void TearDown() {} +}; + +static ComputeGraphPtr BuildGraphTransposeD() { + auto builder = ut::GraphBuilder("g1"); + auto transdata1 = builder.AddNode("transdata1", "TransData", 1, 1, FORMAT_NC1HWC0, DT_FLOAT, std::vector({1, 1, 224, 224, 16})); + transdata1->GetOpDesc()->MutableOutputDesc(0)->SetFormat(FORMAT_NHWC); + transdata1->GetOpDesc()->MutableOutputDesc(0)->SetShape(GeShape(std::vector({1, 224, 224, 3}))); + + auto transpose1 = builder.AddNode("transpose1", "TransposeD", 1, 1, FORMAT_NCHW, DT_FLOAT, std::vector({1, 3, 224, 224})); + transpose1->GetOpDesc()->MutableInputDesc(0)->SetFormat(FORMAT_NHWC); + transpose1->GetOpDesc()->MutableInputDesc(0)->SetShape(GeShape(std::vector({1, 224, 224, 3}))); + + auto transdata2 = builder.AddNode("transdata2", "TransData", 1, 1, FORMAT_NCHW, DT_FLOAT, std::vector({1, 3, 224, 224})); + transdata2->GetOpDesc()->MutableOutputDesc(0)->SetFormat(FORMAT_NC1HWC0); + transdata2->GetOpDesc()->MutableOutputDesc(0)->SetShape(GeShape(std::vector({1, 1, 224, 224, 16}))); + + builder.AddDataEdge(transdata1, 0, transpose1, 0); + builder.AddDataEdge(transpose1, 0, transdata2, 0); + + return builder.GetGraph(); +} + +TEST_F(UtestGraphPassesTransposeTransdataPass, test_run) { + auto compute_graph = BuildGraphTransposeD(); + compute_graph->SetSessionID(0); + + auto transpose = compute_graph->FindNode("transpose1"); + TransposeTransDataPass pass; + EXPECT_EQ(pass.Run(transpose), SUCCESS); +} +} // namespace ge diff --git a/tests/ut/ge/hybrid/ge_hybrid_unittest.cc b/tests/ut/ge/hybrid/ge_hybrid_unittest.cc new file mode 100644 index 00000000..0b6ca271 --- /dev/null +++ b/tests/ut/ge/hybrid/ge_hybrid_unittest.cc @@ -0,0 +1,193 @@ +/** + * Copyright 2019-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 +#include + +#include "runtime/rt.h" + +#define protected public +#define private public +#include "hybrid/model/hybrid_model_builder.h" +#include "hybrid/model/hybrid_model.h" +#include "model/ge_model.h" +#include "model/ge_root_model.h" + +#include "hybrid/node_executor/aicore/aicore_op_task.h" +#include "framework/common/taskdown_common.h" +#include "framework/common/debug/log.h" +#include "graph/ge_context.h" +#include "hybrid/executor/hybrid_execution_context.h" +#include "hybrid/node_executor/aicore/aicore_task_builder.h" +#include "graph/load/model_manager/tbe_handle_store.h" +#include "graph/types.h" + +#undef private +#undef protected + +using namespace std; +using namespace testing; +using namespace ge; +using namespace hybrid; + +class UtestGeHybrid : public testing::Test { + protected: + void SetUp() {} + + void TearDown() {} +}; + +static ge::OpDescPtr CreateOpDesc(string name = "", string type = "") { + auto op_desc = std::make_shared(name, type); + op_desc->SetStreamId(0); + op_desc->SetId(0); + + op_desc->SetWorkspace({}); + ; + op_desc->SetWorkspaceBytes({}); + op_desc->SetInputOffset({}); + op_desc->SetOutputOffset({}); + + ge::AttrUtils::SetStr(op_desc, ge::TVM_ATTR_NAME_MAGIC, "RT_DEV_BINARY_MAGIC_ELF_AIVEC"); + bool support_dynamic = true; + ge::AttrUtils::GetBool(op_desc, "support_dynamicshape", support_dynamic); + return op_desc; +} + +TEST_F(UtestGeHybrid, aicore_op_task_init_success) { + // build aicore task + auto aicore_task = std::unique_ptr(new(std::nothrow)hybrid::AiCoreOpTask()); + domi::TaskDef task_def; + task_def.set_type(RT_MODEL_TASK_ALL_KERNEL); + domi::KernelDefWithHandle *kernel_with_handle = task_def.mutable_kernel_with_handle(); + kernel_with_handle->set_original_kernel_key(""); + kernel_with_handle->set_node_info(""); + kernel_with_handle->set_block_dim(32); + kernel_with_handle->set_args_size(64); + string args(64, '1'); + kernel_with_handle->set_args(args.data(), 64); + domi::KernelContext *context = kernel_with_handle->mutable_context(); + context->set_op_index(1); + context->set_kernel_type(2); // ccKernelType::TE + uint16_t args_offset[9] = {0}; + context->set_args_offset(args_offset, 9 * sizeof(uint16_t)); + + OpDescPtr op_desc = CreateOpDesc("Add", "Add"); + std::vector kernelBin; + TBEKernelPtr tbe_kernel = std::make_shared("name/Add", std::move(kernelBin)); + op_desc->SetExtAttr(ge::OP_EXTATTR_NAME_TBE_KERNEL, tbe_kernel); + std::string kernel_name("kernel/Add"); + AttrUtils::SetStr(op_desc, op_desc->GetName() + "_kernelname", kernel_name); + ASSERT_EQ(aicore_task->InitWithTaskDef(*op_desc.get(), task_def), SUCCESS); + rtStream_t stream = nullptr; + rtStreamCreate(&stream, 0); + ASSERT_EQ(aicore_task->LaunchKernel(stream), SUCCESS); + char *handle = ""; + aicore_task->handle_ = handle; + aicore_task->tiling_key_ = 1; + ASSERT_EQ(aicore_task->LaunchKernel(stream), SUCCESS); +} + +TEST_F(UtestGeHybrid, task_update_tiling_info) { + auto aicore_task = std::unique_ptr(new(std::nothrow)hybrid::AiCoreOpTask()); + aicore_task->is_single_op_ = true; + auto graph = make_shared("graph"); + OpDescPtr op_desc = CreateOpDesc("Add", "Add"); + ge::AttrUtils::SetStr(op_desc, "compile_info_key", "key"); + ge::AttrUtils::SetStr(op_desc, "compile_info_json", "json"); + auto node = graph->AddNode(op_desc); + optiling::OpRunInfo tiling_info; + ASSERT_EQ(aicore_task->CalcTilingInfo(node, tiling_info), SUCCESS); +} + +TEST_F(UtestGeHybrid, index_taskdefs_failed) { + // build aicore task + domi::ModelTaskDef model_task_def; + + std::shared_ptr model_task_def_ptr = make_shared(model_task_def); + domi::TaskDef *task_def = model_task_def_ptr->add_task(); + GeModelPtr ge_model = make_shared(); + ge_model->SetModelTaskDef(model_task_def_ptr); + + auto aicore_task = std::unique_ptr(new(std::nothrow)hybrid::AiCoreOpTask()); + task_def->set_type(RT_MODEL_TASK_ALL_KERNEL); + domi::KernelDefWithHandle *kernel_with_handle = task_def->mutable_kernel_with_handle(); + kernel_with_handle->set_original_kernel_key(""); + kernel_with_handle->set_node_info(""); + kernel_with_handle->set_block_dim(32); + kernel_with_handle->set_args_size(64); + string args(64, '1'); + kernel_with_handle->set_args(args.data(), 64); + domi::KernelContext *context = kernel_with_handle->mutable_context(); + context->set_op_index(1); + context->set_kernel_type(2); // ccKernelType::TE + uint16_t args_offset[9] = {0}; + context->set_args_offset(args_offset, 9 * sizeof(uint16_t)); + + OpDescPtr op_desc = CreateOpDesc("Add", "Add"); + std::vector kernelBin; + TBEKernelPtr tbe_kernel = std::make_shared("name/Add", std::move(kernelBin)); + op_desc->SetExtAttr(ge::OP_EXTATTR_NAME_TBE_KERNEL, tbe_kernel); + std::string kernel_name("kernel/Add"); + AttrUtils::SetStr(op_desc, op_desc->GetName() + "_kernelname", kernel_name); + + ComputeGraphPtr graph = std::make_shared("test"); + GeRootModelPtr ge_root_model = make_shared(graph); + HybridModel hybrid_model(ge_root_model); + HybridModelBuilder hybrid_model_builder(hybrid_model); + + ASSERT_EQ(hybrid_model_builder.IndexTaskDefs(graph, ge_model), INTERNAL_ERROR); +} + +TEST_F(UtestGeHybrid, index_taskdefs_success) { + // build aicore task + domi::ModelTaskDef model_task_def; + + std::shared_ptr model_task_def_ptr = make_shared(model_task_def); + domi::TaskDef *task_def = model_task_def_ptr->add_task(); + GeModelPtr ge_model = make_shared(); + ge_model->SetModelTaskDef(model_task_def_ptr); + + auto aicore_task = std::unique_ptr(new(std::nothrow)hybrid::AiCoreOpTask()); + task_def->set_type(RT_MODEL_TASK_ALL_KERNEL); + domi::KernelDefWithHandle *kernel_with_handle = task_def->mutable_kernel_with_handle(); + kernel_with_handle->set_original_kernel_key(""); + kernel_with_handle->set_node_info(""); + kernel_with_handle->set_block_dim(32); + kernel_with_handle->set_args_size(64); + string args(64, '1'); + kernel_with_handle->set_args(args.data(), 64); + domi::KernelContext *context = kernel_with_handle->mutable_context(); + context->set_op_index(0); + context->set_kernel_type(2); // ccKernelType::TE + uint16_t args_offset[9] = {0}; + context->set_args_offset(args_offset, 9 * sizeof(uint16_t)); + + OpDescPtr op_desc = CreateOpDesc("Add", "Add"); + std::vector kernelBin; + TBEKernelPtr tbe_kernel = std::make_shared("name/Add", std::move(kernelBin)); + op_desc->SetExtAttr(ge::OP_EXTATTR_NAME_TBE_KERNEL, tbe_kernel); + std::string kernel_name("kernel/Add"); + AttrUtils::SetStr(op_desc, op_desc->GetName() + "_kernelname", kernel_name); + + ComputeGraphPtr graph = std::make_shared("test"); + NodePtr node = graph->AddNode(op_desc); + GeRootModelPtr ge_root_model = make_shared(graph); + HybridModel hybrid_model(ge_root_model); + HybridModelBuilder hybrid_model_builder(hybrid_model); + + ASSERT_EQ(hybrid_model_builder.IndexTaskDefs(graph, ge_model), SUCCESS); +} \ No newline at end of file diff --git a/tests/ut/ge/single_op/single_op_model_unittest.cc b/tests/ut/ge/single_op/single_op_model_unittest.cc index ab909e11..eaf4564a 100644 --- a/tests/ut/ge/single_op/single_op_model_unittest.cc +++ b/tests/ut/ge/single_op/single_op_model_unittest.cc @@ -40,6 +40,10 @@ class UtestSingleOpModel : public testing::Test { void TearDown() {} }; +//rt api stub +rtError_t rtGetTaskIdAndStreamID(uint32_t *taskId, uint32_t *streamId) { + return RT_ERROR_NONE; +} /* TEST_F(UtestSingleOpModel, test_init_model) { string model_data_str = "123456789"; @@ -101,9 +105,9 @@ TEST_F(UtestSingleOpModel, test_set_inputs_and_outputs) { std::mutex stream_mu_; rtStream_t stream_ = nullptr; - SingleOp single_op(&stream_mu_, stream_); - - ASSERT_EQ(model.SetInputsAndOutputs(single_op), SUCCESS); +// SingleOp single_op(&stream_mu_, stream_); +// +// ASSERT_EQ(model.SetInputsAndOutputs(single_op), SUCCESS); } /* TEST_F(UtestSingleOpModel, test_build_kernel_task) { @@ -148,7 +152,7 @@ TEST_F(UtestSingleOpModel, test_init) { ASSERT_EQ(op_model.Init(), FAILED); } */ - +/* TEST_F(UtestSingleOpModel, test_parse_arg_table) { string model_data_str = "123456789"; SingleOpModel op_model("model", model_data_str.c_str(), model_data_str.size()); @@ -173,3 +177,23 @@ TEST_F(UtestSingleOpModel, test_parse_arg_table) { ASSERT_EQ(op.arg_table_[1].size(), 1); ASSERT_EQ(op.arg_table_[1].front(), &arg_base[0]); } +*/ +TEST_F(UtestSingleOpModel, test_op_task_get_profiler_args) { + string name = "relu"; + string type = "relu"; + auto op_desc = std::make_shared(name, type); + op_desc->SetStreamId(0); + op_desc->SetId(0); + TbeOpTask task; + task.op_desc_ = op_desc; + task.model_name_ = "resnet_50"; + task.model_id_ = 1; + TaskDescInfo task_desc_info; + uint32_t model_id; + task.GetProfilingArgs(task_desc_info, model_id); + + ASSERT_EQ(task_desc_info.model_name, "resnet_50"); + ASSERT_EQ(model_id, 1); +} + + diff --git a/tests/ut/ge/single_op/single_op_task_unittest.cc b/tests/ut/ge/single_op/single_op_task_unittest.cc new file mode 100644 index 00000000..a17c9012 --- /dev/null +++ b/tests/ut/ge/single_op/single_op_task_unittest.cc @@ -0,0 +1,117 @@ +/** + * 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. + */ + +#include +#include + +#include "graph/load/model_manager/model_utils.h" +#include "graph/utils/graph_utils.h" +#include "runtime/rt.h" + +#define protected public +#define private public +#include "single_op/single_op_model.h" +#include "single_op/task/tbe_task_builder.h" +#include "single_op/task/op_task.h" +#include "single_op/task/tbe_task_builder.h" +#include "external/register/op_tiling_registry.h" +#undef private +#undef protected + +using namespace std; +using namespace testing; +using namespace ge; +using namespace optiling; + +class UtestSingleOpTask : public testing::Test { + protected: + void SetUp() {} + + void TearDown() {} +}; + +TEST_F(UtestSingleOpTask, test_build_kernel_task) { + string model_data_str = "123456789"; + SingleOpModel model("model", model_data_str.c_str(), model_data_str.size()); + model.input_offset_list_.push_back(0); + model.input_sizes_.push_back(16); + + model.output_offset_list_.push_back(0); + model.output_sizes_.push_back(16); + + auto graph = make_shared("graph"); + auto op_desc = make_shared("Add", "Add"); + std::vector kernelBin; + TBEKernelPtr tbe_kernel = std::make_shared("name/Add", std::move(kernelBin)); + op_desc->SetExtAttr(ge::OP_EXTATTR_NAME_TBE_KERNEL, tbe_kernel); + std::string kernel_name("kernel/Add"); + AttrUtils::SetStr(op_desc, op_desc->GetName() + "_kernelname", kernel_name); + + vector shape{16, 16}; + GeShape ge_shape(shape); + GeTensorDesc desc(ge_shape); + op_desc->AddInputDesc(desc); + op_desc->AddOutputDesc(desc); + auto node = graph->AddNode(op_desc); + + std::mutex stream_mu_; + rtStream_t stream_ = nullptr; + StreamResource stream_resource(0); + SingleOp single_op(&stream_resource, &stream_mu_, stream_); + + domi::TaskDef task_def; + task_def.set_type(RT_MODEL_TASK_ALL_KERNEL); + domi::KernelDefWithHandle *kernel_with_handle = task_def.mutable_kernel_with_handle(); + kernel_with_handle->set_original_kernel_key(""); + kernel_with_handle->set_node_info(""); + kernel_with_handle->set_block_dim(32); + kernel_with_handle->set_args_size(64); + string args(64, '1'); + kernel_with_handle->set_args(args.data(), 64); + domi::KernelContext *context = kernel_with_handle->mutable_context(); + context->set_op_index(1); + context->set_kernel_type(2); // ccKernelType::TE + uint16_t args_offset[9] = {0}; + context->set_args_offset(args_offset, 9 * sizeof(uint16_t)); + model.op_list_[1] = node; + + TbeOpTask task_tmp; + TbeOpTask *task = &task_tmp; + ASSERT_EQ(model.BuildKernelTask(task_def, &task), SUCCESS); + vector input_desc; + vector input_buffers; + vector output_desc; + vector output_buffers; + task->node_ = node; + OpTilingFunc op_tiling_func = [](const TeOpParas &, const OpCompileInfo &, OpRunInfo &) -> bool {return true;}; + OpTilingRegistryInterf("Add", op_tiling_func); + ge::AttrUtils::SetStr(op_desc, "compile_info_key", "op_compile_info_key"); + ge::AttrUtils::SetStr(op_desc, "compile_info_json", "op_compile_info_json"); + char c = '0'; + char* buffer = &c; + task->tiling_buffer_ = buffer; + task->max_tiling_size_ = 64; + task->tiling_data_ = "tiling_data"; + task->arg_size_ = 64; + uint8_t task_args{0}; + task->args_.reset(&task_args); + + ASSERT_EQ(task->LaunchKernel(input_desc, input_buffers, output_desc, output_buffers, stream_), SUCCESS); + char handle_tmp = '0'; + char *handle = &handle_tmp; + task->SetHandle(handle); + ASSERT_EQ(task->LaunchKernel(input_desc, input_buffers, output_desc, output_buffers, stream_), SUCCESS); +} \ No newline at end of file diff --git a/tests/ut/ge/single_op/stream_resource_unittest.cc b/tests/ut/ge/single_op/stream_resource_unittest.cc index b7306815..e07fc39d 100644 --- a/tests/ut/ge/single_op/stream_resource_unittest.cc +++ b/tests/ut/ge/single_op/stream_resource_unittest.cc @@ -58,6 +58,20 @@ TEST_F(UtestStreamResource, test_malloc_memory) { ASSERT_NE(res.MallocMemory(purpose, 100), nullptr); } +TEST_F(UtestStreamResource, test_build_op) { + StreamResource res((uintptr_t)1); + ModelData model_data; + SingleOp *single_op = nullptr; + DynamicSingleOp *dynamic_single_op = nullptr; + res.op_map_[0].reset(single_op); + res.dynamic_op_map_[1].reset(dynamic_single_op); + + EXPECT_EQ(res.GetOperator(0), nullptr); + EXPECT_EQ(res.GetDynamicOperator(1), nullptr); + EXPECT_EQ(res.BuildOperator(model_data, &single_op, 0), SUCCESS); + EXPECT_EQ(res.BuildDynamicOperator(model_data, &dynamic_single_op, 1), SUCCESS); +} + /* TEST_F(UtestStreamResource, test_do_malloc_memory) { size_t max_allocated = 0; diff --git a/third_party/fwkacllib/inc/runtime/kernel.h b/third_party/fwkacllib/inc/runtime/kernel.h index cf5347cb..754f069a 100644 --- a/third_party/fwkacllib/inc/runtime/kernel.h +++ b/third_party/fwkacllib/inc/runtime/kernel.h @@ -188,7 +188,7 @@ typedef void (*rtCallback_t)(void *fnData); /** * @ingroup rt_kernel * @brief kernel mode -**/ + */ #define RT_DEFAULT_KERNEL_MODE (0x00) #define RT_NORMAL_KERNEL_MODE (0x01) #define RT_ALL_KERNEL_MODE (0x02) @@ -211,7 +211,7 @@ RTS_API rtError_t rtDevBinaryRegister(const rtDevBinary_t *bin, void **handle); /** * @ingroup rt_kernel - * @brief register device binary with all kernel + * @brief register device binary * @param [in] bin device binary description * @param [out] handle device binary handle * @return RT_ERROR_NONE for ok @@ -330,7 +330,7 @@ RTS_API rtError_t rtKernelLaunch(const void *stubFunc, uint32_t blockDim, void * * @ingroup rt_kernel * @brief launch kernel with handle to device * @param [in] handle program - * @param [in] devFunc device function description. + * @param [in] devFunc device function description * @param [in] blockDim block dimentions * @param [in] args argments address for kernel function * @param [in] argsSize argements size @@ -341,7 +341,7 @@ RTS_API rtError_t rtKernelLaunch(const void *stubFunc, uint32_t blockDim, void * * @return RT_ERROR_INVALID_VALUE for error input */ RTS_API rtError_t rtKernelLaunchWithHandle(void *handle, const void *devFunc, uint32_t blockDim, void *args, uint32_t argsSize, - rtSmDesc_t *smDesc, rtStream_t stream_, const void *kernelInfo); + rtSmDesc_t *smDesc, rtStream_t stream, const void *kernelInfo); /** * @ingroup rt_kernel diff --git a/third_party/fwkacllib/inc/runtime/rt_model.h b/third_party/fwkacllib/inc/runtime/rt_model.h index e6d849c8..798f63ae 100644 --- a/third_party/fwkacllib/inc/runtime/rt_model.h +++ b/third_party/fwkacllib/inc/runtime/rt_model.h @@ -133,13 +133,12 @@ typedef struct tagAllKernelTaskInfo { uint16_t argsCount; uint16_t argsSize; uint16_t reserved; - void *devfunc; + const void *dev_func; void *handle; uint8_t *smDesc; uint8_t *args; uint16_t *argsOffset; } rtAllKernelTaskInfo_t; - typedef struct tagKernelTaskInfoEx { uint32_t flags; uint32_t argsSize; @@ -264,7 +263,7 @@ typedef struct tagTaskInfo { union { rtKernelTaskInfoEx_t kernelTaskEx; rtKernelTaskInfo_t kernelTask; - rtAllKernelTaskInfo_t allKernelTask; + rtAllKernelTaskInfo_t allkernelTask; rtEventTaskInfo_t eventTask; rtStreamSwitchTaskInfo_t streamSwitchTask; rtStreamActiveTaskInfo_t streamActiveTask;