diff --git a/mindspore/ccsrc/backend/kernel_compiler/cpu/arithmetic_self_cpu_kernel.cc b/mindspore/ccsrc/backend/kernel_compiler/cpu/arithmetic_self_cpu_kernel.cc index a73682a888..a654effa4c 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/cpu/arithmetic_self_cpu_kernel.cc +++ b/mindspore/ccsrc/backend/kernel_compiler/cpu/arithmetic_self_cpu_kernel.cc @@ -267,8 +267,10 @@ bool ArithmeticSelfCPUKernel::Launch(const std::vector &inpu const std::vector &outputs) { if (dtype_ == kNumberTypeFloat32 || dtype_ == kNumberTypeFloat16 || dtype_ == kNumberTypeFloat64) { LaunchKernel(inputs, outputs); - } else if (dtype_ == kNumberTypeInt32 || dtype_ == kNumberTypeInt16 || dtype_ == kNumberTypeInt64) { + } else if (dtype_ == kNumberTypeInt32 || dtype_ == kNumberTypeInt16) { LaunchKernel(inputs, outputs); + } else if (dtype_ == kNumberTypeInt64) { + LaunchKernel(inputs, outputs); } else if (dtype_ == kNumberTypeBool) { LaunchKernelLogic(inputs, outputs); } else { diff --git a/mindspore/ccsrc/backend/kernel_compiler/cpu/cpu_kernel.cc b/mindspore/ccsrc/backend/kernel_compiler/cpu/cpu_kernel.cc index 5d5d8b9de2..98af09a999 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/cpu/cpu_kernel.cc +++ b/mindspore/ccsrc/backend/kernel_compiler/cpu/cpu_kernel.cc @@ -29,6 +29,7 @@ void CPUKernel::InitInputOutputSize(const CNodePtr &kernel_node) { std::vector shape = AnfAlgo::GetInputDeviceShape(kernel_node, input_index); size_t tensor_size = shape.empty() ? type_size : std::accumulate(shape.begin(), shape.end(), type_size, std::multiplies()); + tensor_size = std::max(tensor_size, type_size); input_size_list_.emplace_back(tensor_size); } size_t output_num = AnfAlgo::GetOutputTensorNum(kernel_node); @@ -38,6 +39,7 @@ void CPUKernel::InitInputOutputSize(const CNodePtr &kernel_node) { std::vector shape = AnfAlgo::GetOutputDeviceShape(kernel_node, output_index); size_t tensor_size = shape.empty() ? type_size : std::accumulate(shape.begin(), shape.end(), type_size, std::multiplies()); + tensor_size = std::max(tensor_size, type_size); output_size_list_.emplace_back(tensor_size); } } diff --git a/mindspore/ccsrc/backend/kernel_compiler/cpu/topk_cpu_kernel.cc b/mindspore/ccsrc/backend/kernel_compiler/cpu/topk_cpu_kernel.cc index 01f29b01a9..cbab0fc837 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/cpu/topk_cpu_kernel.cc +++ b/mindspore/ccsrc/backend/kernel_compiler/cpu/topk_cpu_kernel.cc @@ -50,11 +50,11 @@ void TopKCPUKernel::LaunchKernel(const std::vector &inputs, const st std::vector idx(inner_size_); auto base_input = i * inner_size_; std::iota(idx.begin(), idx.end(), base_input); - std::sort(idx.begin(), idx.end(), - [&input](size_t index_1, size_t index_2) { return input[index_1] > input[index_2]; }); + std::stable_sort(idx.begin(), idx.end(), + [&input](size_t index_1, size_t index_2) { return input[index_1] > input[index_2]; }); auto base_output = i * k_num; if (!sorted_) { - std::sort(idx.begin(), idx.begin() + k_num); + std::stable_sort(idx.begin(), idx.begin() + k_num); } for (int j = 0; j < k_num; ++j) { indices[base_output + j] = idx[j] - base_input;