diff --git a/mindspore/ccsrc/debug/debug_services.cc b/mindspore/ccsrc/debug/debug_services.cc index 359fa9b94a..77c701f948 100644 --- a/mindspore/ccsrc/debug/debug_services.cc +++ b/mindspore/ccsrc/debug/debug_services.cc @@ -1,5 +1,5 @@ /** - * Copyright 2019-2020 Huawei Technologies Co., Ltd + * Copyright 2020-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. @@ -197,7 +197,8 @@ void DebugServices::CheckWatchpoints(std::vector *const name, std:: std::vector *root_graph_id) { std::lock_guard lg(lock_); if (watchpoint_table.empty()) return; - + // vector to store execution order of tensors hit + std::vector exec_order; for (auto &tensor : *tensor_list) { #ifdef OFFLINE_DBG_MODE // read data in offline mode @@ -212,7 +213,6 @@ void DebugServices::CheckWatchpoints(std::vector *const name, std:: continue; } #endif - const auto tensor_name = tensor->GetName(); const auto tensor_name_no_slot = tensor_name.substr(0, tensor_name.find_first_of(':')); const auto tensor_slot = std::to_string(tensor->GetSlot()); @@ -228,7 +228,6 @@ void DebugServices::CheckWatchpoints(std::vector *const name, std:: &previous_iter_tensor_needed, &qualified_tensor_name, &watchpoints_to_check); // no wp set on current tensor if (watchpoints_to_check.empty()) continue; - uint32_t num_elements = tensor->GetNumElements(); #ifdef OFFLINE_DBG_MODE @@ -237,7 +236,6 @@ void DebugServices::CheckWatchpoints(std::vector *const name, std:: void *previous_tensor_ptr = tensor_loader_->GetPrevTensor(tensor_name) ? tensor_loader_->GetPrevTensor(tensor_name)->GetDataPtr() : nullptr; #endif - std::unique_ptr base_summary_ptr; if (!(watchpoints_to_check.size() == 1 && watchpoints_to_check[0].condition.type == IS_OVERFLOW)) { base_summary_ptr = GetSummaryPtr(tensor, previous_tensor_ptr, num_elements, tensor_dtype); @@ -258,23 +256,26 @@ void DebugServices::CheckWatchpoints(std::vector *const name, std:: parameter_list = std::get<2>(item); } AddAnalyzedTensorToCache(recheck, wp.id, tensor_name); - if (is_hit || error_code) { - name->push_back(qualified_tensor_name); - slot->push_back(tensor_slot); - condition->push_back(wp.condition.type); - watchpoint_id->push_back(wp.id); + std::vector::iterator iter; + // if the execution order is repeated,inserts the new one before the others with same execution order. + iter = std::lower_bound(exec_order.begin(), exec_order.end(), tensor->GetExecutionOrder()); + int position = iter - exec_order.begin(); + exec_order.insert(iter, tensor->GetExecutionOrder()); + name->insert(name->begin() + position, qualified_tensor_name); + slot->insert(slot->begin() + position, tensor_slot); + condition->insert(condition->begin() + position, wp.condition.type); + watchpoint_id->insert(watchpoint_id->begin() + position, wp.id); if (device_id != nullptr) { - device_id->push_back(tensor->GetDeviceId()); + device_id->insert(device_id->begin() + position, tensor->GetDeviceId()); } if (root_graph_id != nullptr) { - root_graph_id->push_back(tensor->GetRootGraphId()); + root_graph_id->insert(root_graph_id->begin() + position, tensor->GetRootGraphId()); } - parameters->push_back(parameter_list); - error_codes->push_back(error_code); + parameters->insert(parameters->begin() + position, parameter_list); + error_codes->insert(error_codes->begin() + position, error_code); } } - #ifdef OFFLINE_DBG_MODE // in offline mode remove the need for the data tensor.reset();