Skip to content
This repository was archived by the owner on Jan 3, 2023. It is now read-only.

Commit edd377c

Browse files
tachyon77diyessi
authored andcommitted
Option to turn off provenance tag prop dynamically (#3575)
* Adds option to switch off provenance tag propagation in runtime * Fixes style issues.
1 parent 0819d46 commit edd377c

File tree

3 files changed

+61
-3
lines changed

3 files changed

+61
-3
lines changed

src/ngraph/graph_util.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,9 @@ NodeVector ngraph::find_common_args(std::shared_ptr<Node> node1, std::shared_ptr
132132
return common_args;
133133
}
134134

135-
void ngraph::replace_node(std::shared_ptr<Node> target, std::shared_ptr<Node> replacement)
135+
void ngraph::replace_node(std::shared_ptr<Node> target,
136+
std::shared_ptr<Node> replacement,
137+
bool disable_prov_tag_prop)
136138
{
137139
if (target->is_output())
138140
{
@@ -147,7 +149,7 @@ void ngraph::replace_node(std::shared_ptr<Node> target, std::shared_ptr<Node> re
147149
// Fix input/output descriptors
148150
NGRAPH_CHECK(target->get_output_size() == replacement->get_output_size());
149151

150-
if (ngraph::get_provenance_enabled())
152+
if (ngraph::get_provenance_enabled() && !disable_prov_tag_prop)
151153
{
152154
auto common_args = ngraph::find_common_args(target, replacement);
153155

src/ngraph/graph_util.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,9 @@ namespace ngraph
212212
/// auto new_N = N->copy_with_new_args(N->get_arguments());
213213
/// shared_ptr<Node> M = make_shared<SomeUnaryOp>(new_N);
214214
/// replace_node(N, M);
215-
void replace_node(std::shared_ptr<Node> target, std::shared_ptr<Node> replacement);
215+
void replace_node(std::shared_ptr<Node> target,
216+
std::shared_ptr<Node> replacement,
217+
bool disable_prov_tag_prop = false);
216218

217219
NodeVector find_common_args(std::shared_ptr<Node> target, std::shared_ptr<Node> replacement);
218220

test/provenance.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,4 +312,58 @@ TEST(provenance, provenance)
312312
EXPECT_EQ(d->get_provenance_tags(), (ProvSet{"tag_c", "tag_d"}));
313313
EXPECT_EQ(e->get_provenance_tags(), (ProvSet{"tag_c", "tag_d", "tag_e"}));
314314
}
315+
316+
//
317+
// Before:
318+
//
319+
// A{tag_a} B{tag_b}
320+
// | |
321+
// C{tag_c}
322+
//
323+
//
324+
// Replacement:
325+
//
326+
// A{tag_a} B{tag_b}
327+
// | |
328+
// E{tag_e} |
329+
// | |
330+
// C -> D{tag_d}
331+
//
332+
//
333+
// After:
334+
//
335+
// A{tag_a} B{tag_b}
336+
// \ /
337+
// E{tag_e} /
338+
// \ /
339+
// D{tag_d}
340+
//
341+
// Comment:
342+
// * D is the replacement root replacing C and creating a new argument node E
343+
// * This test checks the "disable_prov_tag_prop" flag which when set, disables
344+
// provenance tag porpagation.
345+
//
346+
{
347+
auto x = make_shared<op::Parameter>(element::i32, PartialShape{2, 3, 4});
348+
auto y = make_shared<op::Parameter>(element::i32, PartialShape{2, 3, 4});
349+
350+
auto a = make_shared<op::Add>(x, y);
351+
a->add_provenance_tag("tag_a");
352+
auto b = make_shared<op::Multiply>(y, x);
353+
b->add_provenance_tag("tag_b");
354+
auto c = make_shared<op::Subtract>(a, b);
355+
c->add_provenance_tag("tag_c");
356+
357+
auto f = make_shared<Function>(c, ParameterVector{x, y});
358+
359+
auto e = make_shared<op::Subtract>(a, x);
360+
e->add_provenance_tag("tag_e");
361+
auto d = make_shared<op::Subtract>(e, b);
362+
d->add_provenance_tag("tag_d");
363+
364+
replace_node(c, d, true);
365+
366+
EXPECT_EQ(d->get_provenance_tags(), (ProvSet{"tag_d"}));
367+
EXPECT_EQ(e->get_provenance_tags(), (ProvSet{"tag_e"}));
368+
}
315369
}

0 commit comments

Comments
 (0)