diff --git a/parser/tensorflow/tensorflow_parser.cc b/parser/tensorflow/tensorflow_parser.cc index 3e5fdf8..90373df 100644 --- a/parser/tensorflow/tensorflow_parser.cc +++ b/parser/tensorflow/tensorflow_parser.cc @@ -191,21 +191,25 @@ graphStatus aclgrphParseTensorFlow(const char *model_file, const std::map original_names; - auto parend_desc = parent_node->GetOpDesc(); - (void)ge::AttrUtils::GetListStr(parend_desc, ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); + (void)ge::AttrUtils::GetListStr(parent_node->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); if (original_names.empty()) { original_names.emplace_back(parent_node->GetName()); } // for fusion node also used original_names[0] - (void)original_names[0].append("/").append(subgraph_name).append("/").append(node->GetName()); - - if (!ge::AttrUtils::SetListStr(node->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names)) { - GELOGW("Set %s to %s fail.", ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES.c_str(), node->GetOpDesc()->GetName().c_str()); + std::string prefix = original_names[0].append("/").append(subgraph_name).append("/"); + for (const ge::NodePtr &node : graph->GetDirectNode()) { + original_names[0] = prefix + node->GetName(); + if (!ge::AttrUtils::SetListStr(node->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names)) { + GELOGW("Set dump origin name to %s fail.", node->GetOpDesc()->GetName().c_str()); + } + GELOGD("Add dump origin name %s for node %s.", original_names[0].c_str(), node->GetName().c_str()); } - GELOGD("Add dump origin name %s for node %s.", original_names[0].c_str(), node->GetName().c_str()); } } // namespace ge @@ -273,6 +277,7 @@ Status GenSubgraphParseTasks(const ge::ComputeGraphPtr &parent_graph, std::deque } Status PostOpProcessForSubgraph(const ParseArg &arg) { + AddDumpOriginName(arg.parent_node, arg.subgraph_name, arg.graph); if (arg.parent_node == nullptr) { return SUCCESS; } @@ -297,7 +302,6 @@ Status PostOpProcessForSubgraph(const ParseArg &arg) { if ((node->GetOpDesc() == nullptr) || (node->GetType() == "Variable") || (node->GetType() == "VariableV2")) { continue; } - AddDumpOriginName(arg.subgraph_name, arg.parent_node, node); node->GetOpDesc()->SetName(node->GetOwnerComputeGraph()->GetName() + "/" + node->GetName()); } diff --git a/tests/st/testcase/test_tensorflow_parser.cc b/tests/st/testcase/test_tensorflow_parser.cc index e6038a6..5b41752 100644 --- a/tests/st/testcase/test_tensorflow_parser.cc +++ b/tests/st/testcase/test_tensorflow_parser.cc @@ -158,7 +158,7 @@ void STestTensorflowParser::RegisterCustomOp() { domi::OpRegistry::Instance()->registrationDatas.clear(); } -extern void AddDumpOriginName(const std::string& subgraph_name, const ge::NodePtr parent_node, ge::NodePtr node); +void AddDumpOriginName(const ge::NodePtr parent_node, const std::string& subgraph_name, ge::ComputeGraphPtr graph); namespace { NodeDef* AddNode(GraphDef& graph, string type, string name) { @@ -4291,35 +4291,43 @@ TEST_F(STestTensorflowParser, tensorflow_optimizer_fmk_fusion_op) { TEST_F(STestTensorflowParser, AddDumpOriginName_test) { GeTensorDesc scalar_tensor(GeShape(), ge::FORMAT_NCHW, ge::DT_FLOAT); - ge::ComputeGraphPtr graph = std::make_shared("default"); - ge::OpDescPtr data_op = std::make_shared(); - data_op->SetType(parser::WHILE); - data_op->SetName("WHILE0"); - data_op->AddInputDesc(ge::GeTensorDesc()); - data_op->AddOutputDesc(ge::GeTensorDesc()); - ge::NodePtr while0 = graph->AddNode(data_op); - - data_op = std::make_shared(); - data_op->SetType(parser::LOOPCOND); - data_op->SetName("COND0"); - data_op->AddInputDesc(ge::GeTensorDesc()); - data_op->AddOutputDesc(ge::GeTensorDesc()); - ge::NodePtr cond0 = graph->AddNode(data_op); - AddDumpOriginName(std::string("while"), while0, cond0); - - data_op = std::make_shared(); - data_op->SetType(parser::DATA); - data_op->SetName("Data1"); - data_op->AddInputDesc(ge::GeTensorDesc()); - data_op->AddOutputDesc(ge::GeTensorDesc()); - ge::NodePtr data1 = graph->AddNode(data_op); - AddDumpOriginName(std::string("cond"), cond0, data1); - - auto desc = data1->GetOpDesc(); + ge::ComputeGraphPtr parent_graph = std::make_shared("parent_graph"); + ge::OpDescPtr parent = std::make_shared(); + parent->SetType("Foo"); + parent->SetName("foo"); + ge::NodePtr foo = parent_graph->AddNode(parent); + + + ge::ComputeGraphPtr sub_graph = std::make_shared("sub_graph"); + auto child = std::make_shared(); + child->SetType("Bar"); + child->SetName("bar"); + ge::NodePtr bar = sub_graph->AddNode(child); + + AddDumpOriginName(foo, "f", sub_graph); + std::vector original_names; - (void)ge::AttrUtils::GetListStr(desc, ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); - EXPECT_EQ(original_names.empty(), false); - EXPECT_EQ(original_names[0], "WHILE0/while/COND0/cond/Data1"); + (void)ge::AttrUtils::GetListStr(bar->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); + EXPECT_EQ(original_names.size(), 1U); + EXPECT_EQ(original_names[0], "foo/f/bar"); + + (void)ge::AttrUtils::SetListStr(foo->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); + AddDumpOriginName(foo, "f", sub_graph); + + original_names.clear(); + (void)ge::AttrUtils::GetListStr(bar->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); + EXPECT_EQ(original_names.size(), 1U); + EXPECT_EQ(original_names[0], "foo/f/bar/f/bar"); + + original_names.push_back("abc"); + (void)ge::AttrUtils::SetListStr(foo->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); + AddDumpOriginName(foo, "f", sub_graph); + + original_names.clear(); + (void)ge::AttrUtils::GetListStr(bar->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); + EXPECT_EQ(original_names.size(), 2U); + EXPECT_EQ(original_names[0], "foo/f/bar/f/bar/f/bar"); + EXPECT_EQ(original_names[1], "abc"); } } // namespace ge diff --git a/tests/ut/parser/testcase/tensorflow_parser_testcase/tensorflow_parser_unittest.cc b/tests/ut/parser/testcase/tensorflow_parser_testcase/tensorflow_parser_unittest.cc index b62338f..00678d8 100644 --- a/tests/ut/parser/testcase/tensorflow_parser_testcase/tensorflow_parser_unittest.cc +++ b/tests/ut/parser/testcase/tensorflow_parser_testcase/tensorflow_parser_unittest.cc @@ -169,7 +169,7 @@ static Status ParseParamByOpFunc(const ge::Operator &op_src, ge::Operator& op_de return SUCCESS; } -extern void AddDumpOriginName(const std::string& subgraph_name, const ge::NodePtr parent_node, ge::NodePtr node); +void AddDumpOriginName(const ge::NodePtr parent_node, const std::string& subgraph_name, ge::ComputeGraphPtr graph); void UtestTensorflowParser::RegisterCustomOp() { REGISTER_CUSTOM_OP("Add") @@ -4779,35 +4779,43 @@ TEST_F(UtestTensorflowParser, tensorflow_ComputeArgRange) TEST_F(UtestTensorflowParser, AddDumpOriginName_test) { GeTensorDesc scalar_tensor(GeShape(), ge::FORMAT_NCHW, ge::DT_FLOAT); - ge::ComputeGraphPtr graph = std::make_shared("default"); - ge::OpDescPtr data_op = std::make_shared(); - data_op->SetType(parser::WHILE); - data_op->SetName("WHILE0"); - data_op->AddInputDesc(ge::GeTensorDesc()); - data_op->AddOutputDesc(ge::GeTensorDesc()); - ge::NodePtr while0 = graph->AddNode(data_op); + ge::ComputeGraphPtr parent_graph = std::make_shared("parent_graph"); + ge::OpDescPtr parent = std::make_shared(); + parent->SetType("Foo"); + parent->SetName("foo"); + ge::NodePtr foo = parent_graph->AddNode(parent); - data_op = std::make_shared(); - data_op->SetType(parser::LOOPCOND); - data_op->SetName("COND0"); - data_op->AddInputDesc(ge::GeTensorDesc()); - data_op->AddOutputDesc(ge::GeTensorDesc()); - ge::NodePtr cond0 = graph->AddNode(data_op); - AddDumpOriginName(std::string("while"), while0, cond0); - data_op = std::make_shared(); - data_op->SetType(parser::DATA); - data_op->SetName("Data1"); - data_op->AddInputDesc(ge::GeTensorDesc()); - data_op->AddOutputDesc(ge::GeTensorDesc()); - ge::NodePtr data1 = graph->AddNode(data_op); - AddDumpOriginName(std::string("cond"), cond0, data1); + ge::ComputeGraphPtr sub_graph = std::make_shared("sub_graph"); + auto child = std::make_shared(); + child->SetType("Bar"); + child->SetName("bar"); + ge::NodePtr bar = sub_graph->AddNode(child); + + AddDumpOriginName(foo, "f", sub_graph); - auto desc = data1->GetOpDesc(); std::vector original_names; - (void)ge::AttrUtils::GetListStr(desc, ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); - EXPECT_EQ(original_names.empty(), false); - EXPECT_EQ(original_names[0], "WHILE0/while/COND0/cond/Data1"); + (void)ge::AttrUtils::GetListStr(bar->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); + EXPECT_EQ(original_names.size(), 1U); + EXPECT_EQ(original_names[0], "foo/f/bar"); + + (void)ge::AttrUtils::SetListStr(foo->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); + AddDumpOriginName(foo, "f", sub_graph); + + original_names.clear(); + (void)ge::AttrUtils::GetListStr(bar->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); + EXPECT_EQ(original_names.size(), 1U); + EXPECT_EQ(original_names[0], "foo/f/bar/f/bar"); + + original_names.push_back("abc"); + (void)ge::AttrUtils::SetListStr(foo->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); + AddDumpOriginName(foo, "f", sub_graph); + + original_names.clear(); + (void)ge::AttrUtils::GetListStr(bar->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); + EXPECT_EQ(original_names.size(), 2U); + EXPECT_EQ(original_names[0], "foo/f/bar/f/bar/f/bar"); + EXPECT_EQ(original_names[1], "abc"); } } // namespace ge