From 90585603ca59269ca71e90cfd28583acd0ba0f42 Mon Sep 17 00:00:00 2001 From: sunsuodong Date: Wed, 26 Aug 2020 19:52:25 +0800 Subject: [PATCH] fix_topk --- mindspore/lite/nnacl/fp32/topk.c | 22 ++++++++++-- .../kernel/arm/fp16/arithmetic_fp16.cc | 34 +++++++++---------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/mindspore/lite/nnacl/fp32/topk.c b/mindspore/lite/nnacl/fp32/topk.c index a8b13f3e3..96b3b05e4 100644 --- a/mindspore/lite/nnacl/fp32/topk.c +++ b/mindspore/lite/nnacl/fp32/topk.c @@ -16,9 +16,27 @@ #include "nnacl/fp32/topk.h" -int DescendCmp(const void *a, const void *b) { return ((const TopkNode *)b)->element - ((const TopkNode *)a)->element; } +int DescendCmp(const void *a, const void *b) { + float sub = ((const TopkNode *)b)->element - ((const TopkNode *)a)->element; + if (sub > 0) { + return 1; + } else if (sub < 0) { + return -1; + } else { + return 0; + } +} -int AscendCmp(const void *a, const void *b) { return ((const TopkNode *)a)->element - ((const TopkNode *)b)->element; } +int AscendCmp(const void *a, const void *b) { + float sub = ((const TopkNode *)a)->element - ((const TopkNode *)b)->element; + if (sub > 0) { + return 1; + } else if (sub < 0) { + return -1; + } else { + return 0; + } +} void Topk(float *input_data, float *output_data, int32_t *output_index, TopkParameter *parameter) { int last_dim_size = parameter->last_dim_size_; diff --git a/mindspore/lite/src/runtime/kernel/arm/fp16/arithmetic_fp16.cc b/mindspore/lite/src/runtime/kernel/arm/fp16/arithmetic_fp16.cc index f7da12b27..7cb45b00f 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp16/arithmetic_fp16.cc +++ b/mindspore/lite/src/runtime/kernel/arm/fp16/arithmetic_fp16.cc @@ -441,21 +441,21 @@ kernel::LiteKernel *CpuArithmeticFp16KernelCreator(const std::vector