From d1c96e94559d7f5ae3bdb7c43e9ad60cf9495e93 Mon Sep 17 00:00:00 2001 From: yujianfeng Date: Fri, 18 Sep 2020 11:21:33 +0800 Subject: [PATCH] Fix getting internal output failed when init parameter --- .../cpu/embedding_look_up_cpu_kernel.cc | 12 ++++++------ mindspore/ccsrc/backend/session/session_basic.cc | 8 ++++++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/mindspore/ccsrc/backend/kernel_compiler/cpu/embedding_look_up_cpu_kernel.cc b/mindspore/ccsrc/backend/kernel_compiler/cpu/embedding_look_up_cpu_kernel.cc index 54106d166d..ccd83c96ad 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/cpu/embedding_look_up_cpu_kernel.cc +++ b/mindspore/ccsrc/backend/kernel_compiler/cpu/embedding_look_up_cpu_kernel.cc @@ -23,19 +23,19 @@ namespace mindspore { namespace kernel { namespace { template -void LookUpTableTask(const float *input_addr, const T *indices_addr, float *output_addr, size_t indices_lens, - size_t outer_dim_size, T offset, size_t first_dim_size) { +void LookUpTableTask(const float *input_addr, const T *indices_addr, float *output_addr, float *output_max_addr, + size_t indices_lens, size_t outer_dim_size, T offset, size_t first_dim_size) { size_t lens = outer_dim_size * sizeof(float); for (size_t i = 0; i < indices_lens; ++i) { T index = indices_addr[i] - offset; if (index >= 0 && index < SizeToInt(first_dim_size)) { size_t pos = index * outer_dim_size; - auto ret = memcpy_s(output_addr, lens, input_addr + pos, lens); + auto ret = memcpy_s(output_addr, output_max_addr - output_addr, input_addr + pos, lens); if (ret != EOK) { MS_LOG(EXCEPTION) << "LookUpTable task memcpy failed."; } } else { - auto ret = memset_s(output_addr, lens, 0, lens); + auto ret = memset_s(output_addr, output_max_addr - output_addr, 0, lens); if (ret != EOK) { MS_LOG(EXCEPTION) << "LookUpTable task memset failed."; } @@ -83,8 +83,8 @@ void EmbeddingLookUpCPUKernel::LaunchKernel(const std::vector, input_addr, indices_addr + task_offset, - output_addr + task_offset * outer_dim_size_, task_proc_lens, outer_dim_size_, offset_, - first_dim_size_); + output_addr + task_offset * outer_dim_size_, output_addr + outputs[0]->size, + task_proc_lens, outer_dim_size_, offset_, first_dim_size_); task_offset += task_proc_lens; if (task_offset + task_proc_lens > indices_lens_) { task_proc_lens = indices_lens_ - task_offset; diff --git a/mindspore/ccsrc/backend/session/session_basic.cc b/mindspore/ccsrc/backend/session/session_basic.cc index 350f185085..5307e90d35 100644 --- a/mindspore/ccsrc/backend/session/session_basic.cc +++ b/mindspore/ccsrc/backend/session/session_basic.cc @@ -1173,6 +1173,10 @@ bool CNodeFirstInputIsPrimitive(const AnfNodePtr &node) { void HandleInternalOutput(const AnfNodePtr &front_node, const AnfNodePtr &backend_node, const FuncGraphManagerPtr &front_func_graph_manager, const std::shared_ptr &backend_graph) { + // When init parameter from cnode of other graphs, the cnode will not be real kernel except for tuple_getitem. + if (!AnfAlgo::IsRealKernel(front_node) && !AnfAlgo::CheckPrimitiveType(front_node, prim::kPrimTupleGetItem)) { + return; + } auto node_users = front_func_graph_manager->node_users(); auto users = node_users[front_node]; auto front_real_kernel_pair = AnfAlgo::VisitKernel(front_node, 0); @@ -1205,8 +1209,8 @@ void HandleInternalOutput(const AnfNodePtr &front_node, const AnfNodePtr &backen } } if (internal_output) { - MS_LOG(INFO) << "Internal output: " << front_node->DebugString() << "To " - << backend_real_kernel_pair.first->DebugString(); + MS_LOG(INFO) << "Internal output: " << front_node->DebugString() << " To " + << backend_real_kernel_pair.first->DebugString() << ", unique_target: " << unique_target; backend_graph->AddInternalOutput(front_node, backend_real_kernel_pair.first, backend_real_kernel_pair.second, unique_target); }