From b8d27934cd1af4ce1cd7d7be9911b0a98eb9df8f Mon Sep 17 00:00:00 2001 From: Megvii Engine Team Date: Fri, 3 Apr 2020 11:29:08 +0800 Subject: [PATCH] fix(mgb/core): fix opr shallow copy in sublinear retrive comp_node from output var instead of opr config in sublinear if all outputs were placed on same comp_node GitOrigin-RevId: a1ed027dacaeae2533059d1eaae6f1cc7910db68 --- src/core/impl/graph/seq_sublinear_memory.cpp | 23 +++++++++++--------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/core/impl/graph/seq_sublinear_memory.cpp b/src/core/impl/graph/seq_sublinear_memory.cpp index 443e37d86..4f4553531 100644 --- a/src/core/impl/graph/seq_sublinear_memory.cpp +++ b/src/core/impl/graph/seq_sublinear_memory.cpp @@ -1239,18 +1239,21 @@ OperatorNodeBase* SeqModifierForSublinearMemory::copy_opr_from_new_inputs( // and config, we use instance id to differentiate them. config.name(opr->name() + (recomp ? ":recomp" : ":dup")) .instance_id(recomp ? nullptr : this); - if (!config.has_comp_node_set()) { - auto out_cn = opr->output(0)->comp_node(); - for (auto i : opr->output()) { - auto cn = i->comp_node(); - if (out_cn != cn) { - out_cn = {}; - break; - } + + // Note: if all outputs of op were placed on the same comp_node, since its + // stream maybe changed during seq_comp_node_opt, output's comp_node has + // higher priority than opr->config() + auto out_cn = opr->output(0)->comp_node(); + for (auto i : opr->output()) { + auto cn = i->comp_node(); + if (out_cn != cn) { + out_cn = {}; + break; } - if (out_cn.valid()) - config.comp_node(out_cn); } + if (out_cn.valid()) + config.comp_node(out_cn); + auto opr_new = serialization::copy_opr_shallow(*opr, m_new_inputs, config); mgb_assert(opr_new != opr); -- GitLab