From cbf7de71b3095423c6535cd6922195367d9e968d Mon Sep 17 00:00:00 2001 From: Shays Date: Wed, 27 Aug 2025 11:09:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DCast=E4=B8=8D=E6=94=AF?= =?UTF-8?q?=E6=8C=81int8=E8=BD=ACfp32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ccsrc/plugin/device/cpu/kernel/nnacl/base/cast_base.c | 6 ++++++ .../ccsrc/plugin/device/cpu/kernel/nnacl/base/cast_base.h | 2 ++ .../mindspore/lite/src/litert/kernel/cpu/fp32/cast_fp32.cc | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/mindspore-src/source/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/base/cast_base.c b/mindspore-src/source/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/base/cast_base.c index d065c0b95e..9d3d5c47e3 100644 --- a/mindspore-src/source/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/base/cast_base.c +++ b/mindspore-src/source/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/base/cast_base.c @@ -49,6 +49,12 @@ void Uint8ToFloat32(const uint8_t *input, float *output, int number) { } } +void Int8ToFloat32(const int8_t *input, float *output, int number) { + for (int i = 0; i < number; ++i) { + output[i] = (float)input[i]; + } +} + void Int32ToFloat32(const int32_t *input, float *output, int number); void Int64ToFloat32(const int64_t *input, float *output, int number) { diff --git a/mindspore-src/source/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/base/cast_base.h b/mindspore-src/source/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/base/cast_base.h index 5e87bd5f75..21a2f34ebd 100644 --- a/mindspore-src/source/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/base/cast_base.h +++ b/mindspore-src/source/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/base/cast_base.h @@ -27,6 +27,8 @@ void BoolToFloat32(const bool *input, float *output, int number); void Uint8ToFloat32(const uint8_t *input, float *output, int number); +void Int8ToFloat32(const int8_t *input, float *output, int number); + void Int32ToFloat32(const int32_t *input, float *output, int number); void Int64ToFloat32(const int64_t *input, float *output, int number); diff --git a/mindspore-src/source/mindspore/lite/src/litert/kernel/cpu/fp32/cast_fp32.cc b/mindspore-src/source/mindspore/lite/src/litert/kernel/cpu/fp32/cast_fp32.cc index 08aec60c23..a7ffc534f6 100644 --- a/mindspore-src/source/mindspore/lite/src/litert/kernel/cpu/fp32/cast_fp32.cc +++ b/mindspore-src/source/mindspore/lite/src/litert/kernel/cpu/fp32/cast_fp32.cc @@ -75,6 +75,10 @@ int CastCPUKernel::CastToFp32(const lite::Tensor *input, lite::Tensor *output, i Uint8ToFloat32(reinterpret_cast(input->data()) + offset, reinterpret_cast(output_data) + offset, data_num); break; + case kNumberTypeInt8: + Int8ToFloat32(reinterpret_cast(input->data()) + offset, + reinterpret_cast(output_data) + offset, data_num); + break; case kNumberTypeInt32: Int32ToFloat32(reinterpret_cast(input->data()) + offset, reinterpret_cast(output_data) + offset, data_num); -- Gitee