!6462 Fix getting internal output failed when init parameter

Merge pull request !6462 from YuJianfeng/master
pull/6462/MERGE
mindspore-ci-bot 4 years ago committed by Gitee
commit f6c904308e

@ -23,19 +23,19 @@ namespace mindspore {
namespace kernel {
namespace {
template <typename T>
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<kernel::AddressPtr
}
MS_LOG(DEBUG) << "task_offset: " << task_offset << " task_proc_lenss:" << task_proc_lens;
threads[i] = std::thread(LookUpTableTask<T>, 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;

@ -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<KernelGraph> &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);
}

Loading…
Cancel
Save