diff --git a/mindspore/lite/src/runtime/kernel/arm/base/quant_dtype_cast.cc b/mindspore/lite/src/runtime/kernel/arm/base/quant_dtype_cast.cc index 2f381d64ee..6c913aba38 100644 --- a/mindspore/lite/src/runtime/kernel/arm/base/quant_dtype_cast.cc +++ b/mindspore/lite/src/runtime/kernel/arm/base/quant_dtype_cast.cc @@ -79,7 +79,12 @@ int QuantDTypeCastCPUKernel::QuantDTypeCast(int task_id) { return RET_OK; } int thread_offset = task_id * thread_n_stride_; - auto quant_arg = in_tensors_.front()->GetQuantParams().front(); + if (in_tensors_.front()->GetQuantParams().empty() && out_tensors_.front()->GetQuantParams().empty()) { + MS_LOG(ERROR) << "QuantDTypeCast need quantization parameters which is not found."; + return RET_ERROR; + } + auto quant_arg = !in_tensors_.front()->GetQuantParams().empty() ? in_tensors_.front()->GetQuantParams().front() : + out_tensors_.front()->GetQuantParams().front(); int ret; if (inverse_) { ret = DoDequantizeInt8(int8_ptr_ + thread_offset, float32_ptr_ + thread_offset, quant_arg.scale, diff --git a/mindspore/lite/src/runtime/kernel/arm/int8/add_int8.cc b/mindspore/lite/src/runtime/kernel/arm/int8/add_int8.cc index c61308d5a2..b31bf3aa8f 100644 --- a/mindspore/lite/src/runtime/kernel/arm/int8/add_int8.cc +++ b/mindspore/lite/src/runtime/kernel/arm/int8/add_int8.cc @@ -92,17 +92,10 @@ int QuantizedAddCPUKernel::Run() { input0_data_ = static_cast(ctx_->allocator->Malloc(out_tensors_.at(0)->Size())); input1_data_ = static_cast(ctx_->allocator->Malloc(out_tensors_.at(0)->Size())); - ArithmeticParameter tile_para; - tile_para.ndim_ = out_tensors_.at(0)->shape().size(); - for (size_t i = 0; i < tile_para.ndim_; i++) { - tile_para.in_shape0_[i] = in_tensors_.at(0)->DimensionSize(i); - tile_para.in_shape1_[i] = in_tensors_.at(1)->DimensionSize(i); - tile_para.out_shape_[i] = out_tensors_.at(0)->DimensionSize(i); - } TileDimensionsUint8(static_cast(in_tensors_.at(0)->MutableData()), static_cast(in_tensors_.at(1)->MutableData()), reinterpret_cast(input0_data_), reinterpret_cast(input1_data_), - &tile_para); + arith_para_); ret = ParallelLaunch(THREAD_POOL_DEFAULT, AddInt8Run, this, thread_count_); ctx_->allocator->Free(input0_data_); ctx_->allocator->Free(input1_data_); diff --git a/mindspore/lite/src/runtime/kernel/arm/int8/add_int8.h b/mindspore/lite/src/runtime/kernel/arm/int8/add_int8.h index 64b22045c6..552d0f9d35 100644 --- a/mindspore/lite/src/runtime/kernel/arm/int8/add_int8.h +++ b/mindspore/lite/src/runtime/kernel/arm/int8/add_int8.h @@ -19,6 +19,7 @@ #include #include "src/lite_kernel.h" #include "nnacl/int8/add_int8.h" +#include "nnacl/arithmetic_common.h" #include "src/runtime/runtime_api.h" namespace mindspore::kernel { @@ -27,7 +28,9 @@ class QuantizedAddCPUKernel : public LiteKernel { explicit QuantizedAddCPUKernel(OpParameter *parameter, const std::vector &inputs, const std::vector &outputs, const lite::Context *ctx, const mindspore::lite::PrimitiveC *primitive) - : LiteKernel(parameter, inputs, outputs, ctx, primitive), ctx_(ctx), thread_count_(ctx_->thread_num_) {} + : LiteKernel(parameter, inputs, outputs, ctx, primitive), ctx_(ctx), thread_count_(ctx_->thread_num_) { + arith_para_ = reinterpret_cast(parameter); + } ~QuantizedAddCPUKernel() override {} int Init() override; @@ -38,6 +41,7 @@ class QuantizedAddCPUKernel : public LiteKernel { private: const lite::Context *ctx_; AddQuantParameter para_; + ArithmeticParameter *arith_para_; int thread_count_; int64_t elements_num_; int64_t count_unit_; diff --git a/mindspore/lite/tools/optimizer/fusion/constant_folding_fusion.cc b/mindspore/lite/tools/optimizer/fusion/constant_folding_fusion.cc index 122c226083..e6e8ec12d1 100644 --- a/mindspore/lite/tools/optimizer/fusion/constant_folding_fusion.cc +++ b/mindspore/lite/tools/optimizer/fusion/constant_folding_fusion.cc @@ -91,7 +91,7 @@ ParameterPtr CreateNewParamter(const FuncGraphPtr &func_graph, Tensor *tensor) { MS_LOG(ERROR) << "tensor_data is nullptr"; return nullptr; } - auto ret = memcpy_s(tensor_data, size * sizeof(float), tensor->MutableData(), size * sizeof(float)); + auto ret = memcpy_s(tensor_data, tensor->Size(), tensor->MutableData(), tensor->Size()); if (ret != EOK) { delete[] tensor_data; MS_LOG(ERROR) << "memcpy error: " << ret; @@ -234,6 +234,9 @@ const AnfNodePtr ConstFoldPass::Process(const FuncGraphPtr &func_graph, const An return nullptr; } lite::Context context; + if (context.allocator == nullptr) { + context.allocator = lite::Allocator::Create(); + } auto lite_kernel = GetLiteKernel(input_tensors, output_tensors, parameter, &context, lite_primitive.get()); if (lite_kernel == nullptr) { MS_LOG(ERROR) << "constant_folding schedule node lite kernel nullptr";