From 019b097cfe001dece605fd84400e28a2aadfaffa Mon Sep 17 00:00:00 2001 From: zhengyuanhua Date: Thu, 20 May 2021 19:34:27 +0800 Subject: [PATCH] add checkout field exist when profiling json parse --- ge/common/profiling/profiling_manager.cc | 23 ++++++++---- .../ge_profiling_manager_unittest.cc | 36 +++++++++++++++++-- 2 files changed, 50 insertions(+), 9 deletions(-) diff --git a/ge/common/profiling/profiling_manager.cc b/ge/common/profiling/profiling_manager.cc index f7015525..f1c3c87b 100644 --- a/ge/common/profiling/profiling_manager.cc +++ b/ge/common/profiling/profiling_manager.cc @@ -184,7 +184,10 @@ ge::Status ProfilingManager::ParseOptions(const std::string &options) { if (options.find(kTrainingTrace) == std::string::npos) { return ge::SUCCESS; } - const std::string training_trace = prof_options[kTrainingTrace]; + std::string training_trace; + if (prof_options.contains(kTrainingTrace)) { + training_trace = prof_options[kTrainingTrace]; + } if (training_trace.empty()) { GELOGI("Training trace will not take effect."); return ge::SUCCESS; @@ -196,8 +199,12 @@ ge::Status ProfilingManager::ParseOptions(const std::string &options) { REPORT_INNER_ERROR("E19999", "Training trace param:%s is invalid.", training_trace.c_str()); return ge::PARAM_INVALID; } - fp_point_ = prof_options[kFpPoint]; - bp_point_ = prof_options[kBpPoint]; + if (prof_options.contains(kFpPoint)) { + fp_point_ = prof_options[kFpPoint]; + } + if (prof_options.contains(kBpPoint)) { + bp_point_ = prof_options[kBpPoint]; + } if (!fp_point_.empty() && !bp_point_.empty()) { GELOGI("Training trace bp fp is set, bp_point:%s, fp_point:%s.", bp_point_.c_str(), fp_point_.c_str()); } @@ -1014,10 +1021,12 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::GetFpBpP if (is_profiling_valid) { try { Json prof_options = Json::parse(profiling_options); - - fp_point_ = prof_options[kFpPoint]; - bp_point_ = prof_options[kBpPoint]; - + if (prof_options.contains(kFpPoint)) { + fp_point_ = prof_options[kFpPoint]; + } + if (prof_options.contains(kBpPoint)) { + bp_point_ = prof_options[kBpPoint]; + } fp_point = fp_point_; bp_point = bp_point_; if (!fp_point_.empty() && !bp_point_.empty()) { diff --git a/tests/ut/ge/profiling/ge_profiling_manager_unittest.cc b/tests/ut/ge/profiling/ge_profiling_manager_unittest.cc index 2da80b32..9c615317 100644 --- a/tests/ut/ge/profiling/ge_profiling_manager_unittest.cc +++ b/tests/ut/ge/profiling/ge_profiling_manager_unittest.cc @@ -24,6 +24,7 @@ #define protected public #define private public #include "common/profiling/profiling_manager.h" +#include "graph/ge_local_context.h" #undef protected #undef private @@ -64,11 +65,12 @@ TEST_F(UtestGeProfilinganager, ParseOptions) { options.profiling_mode = "1"; options.profiling_options = R"({"result_path":"/data/profiling","training_trace":"on","task_trace":"on","aicpu_trace":"on","fp_point":"Data_0","bp_point":"addn","ai_core_metrics":"ResourceConflictRatio"})"; - struct MsprofGeOptions prof_conf = {{ 0 }}; - Status ret = ProfilingManager::Instance().ParseOptions(options.profiling_options); EXPECT_EQ(ret, ge::SUCCESS); + EXPECT_EQ(ProfilingManager::Instance().is_training_trace_, true); + EXPECT_EQ(ProfilingManager::Instance().fp_point_, "Data_0"); + EXPECT_EQ(ProfilingManager::Instance().bp_point_, "addn"); } TEST_F(UtestGeProfilinganager, plungin_init_) { @@ -83,4 +85,34 @@ TEST_F(UtestGeProfilinganager, report_data_) { std::string data = "ge is better than tensorflow."; std::string tag_name = "fmk"; ProfilingManager::Instance().ReportData(0, data, tag_name); +} + +TEST_F(UtestGeProfilinganager, get_fp_bp_point_) { + map options_map = { + {OPTION_EXEC_PROFILING_OPTIONS, + R"({"result_path":"/data/profiling","training_trace":"on","task_trace":"on","aicpu_trace":"on","fp_point":"Data_0","bp_point":"addn","ai_core_metrics":"ResourceConflictRatio"})"}}; + GEThreadLocalContext &context = GetThreadLocalContext(); + context.SetGraphOption(options_map); + + std::string fp_point; + std::string bp_point; + ProfilingManager::Instance().GetFpBpPoint(fp_point, bp_point); + EXPECT_EQ(fp_point, "Data_0"); + EXPECT_EQ(bp_point, "addn"); +} + +TEST_F(UtestGeProfilinganager, get_fp_bp_point_empty) { + // fp bp empty + map options_map = { + { OPTION_EXEC_PROFILING_OPTIONS, + R"({"result_path":"/data/profiling","training_trace":"on","task_trace":"on","aicpu_trace":"on","ai_core_metrics":"ResourceConflictRatio"})"}}; + GEThreadLocalContext &context = GetThreadLocalContext(); + context.SetGraphOption(options_map); + std::string fp_point = "fp"; + std::string bp_point = "bp"; + ProfilingManager::Instance().bp_point_ = ""; + ProfilingManager::Instance().fp_point_ = ""; + ProfilingManager::Instance().GetFpBpPoint(fp_point, bp_point); + EXPECT_EQ(fp_point, ""); + EXPECT_EQ(bp_point, ""); } \ No newline at end of file