| @@ -78,7 +78,7 @@ void Dequant::DeQuantFunction(const Tensor *quant_tensor, const std::vector<DeQu | |||||
| } | } | ||||
| *de_quant_code << "&" << de_quant_arg_base_str << std::to_string(quant_arg_dims - 1); | *de_quant_code << "&" << de_quant_arg_base_str << std::to_string(quant_arg_dims - 1); | ||||
| *de_quant_code << "};\n"; | *de_quant_code << "};\n"; | ||||
| auto channels = static_cast<size_t>(quant_tensor->Batch()); | |||||
| int32_t channels = quant_tensor->Batch(); | |||||
| std::string quant_tensor_addr_str = "(int8_t *)(" + quant_tensor_addr_ + ")"; | std::string quant_tensor_addr_str = "(int8_t *)(" + quant_tensor_addr_ + ")"; | ||||
| de_quant_code->CodeFunction("DequantData", quant_tensor_addr_str, de_quant_args_name, de_quant_nums, channels, | de_quant_code->CodeFunction("DequantData", quant_tensor_addr_str, de_quant_args_name, de_quant_nums, channels, | ||||
| de_quant_buffer_str_); | de_quant_buffer_str_); | ||||
| @@ -131,14 +131,19 @@ int TransposeFp32Coder::DoCode(CoderContext *const context) { | |||||
| dims_ = output_tensor_->shape().size(); | dims_ = output_tensor_->shape().size(); | ||||
| if (dims_ > MAX_TRANSPOSE_DIM_SIZE) { | if (dims_ > MAX_TRANSPOSE_DIM_SIZE) { | ||||
| int *dim_size = reinterpret_cast<int *>(malloc(dims_ * sizeof(int))); | int *dim_size = reinterpret_cast<int *>(malloc(dims_ * sizeof(int))); | ||||
| MS_CHECK_PTR(dim_size); | |||||
| if (dim_size == nullptr) { | |||||
| return RET_NULL_PTR; | |||||
| } | |||||
| *(dim_size + dims_ - 1) = 1; | *(dim_size + dims_ - 1) = 1; | ||||
| for (int i = dims_ - 1; i > 0; --i) { | for (int i = dims_ - 1; i > 0; --i) { | ||||
| *(dim_size + i - 1) = *(dim_size + i) * out_shape_[i]; | *(dim_size + i - 1) = *(dim_size + i) * out_shape_[i]; | ||||
| } | } | ||||
| code.CodeArray("dim_size", dim_size, dims_); | code.CodeArray("dim_size", dim_size, dims_); | ||||
| int *position = reinterpret_cast<int *>(malloc(dims_ * thread_num_ * sizeof(int))); | int *position = reinterpret_cast<int *>(malloc(dims_ * thread_num_ * sizeof(int))); | ||||
| MS_CHECK_PTR(position); | |||||
| if (position == nullptr) { | |||||
| free(dim_size); | |||||
| return RET_NULL_PTR; | |||||
| } | |||||
| code.CodeArray("position", position, dims_ * thread_num_); | code.CodeArray("position", position, dims_ * thread_num_); | ||||
| code.CodeFunction("TransposeDimsFp32", input_tensor_, output_tensor_, out_shape_, "dim_size", "position", | code.CodeFunction("TransposeDimsFp32", input_tensor_, output_tensor_, out_shape_, "dim_size", "position", | ||||
| "&trans_param", kDefaultTaskId, thread_num_); | "&trans_param", kDefaultTaskId, thread_num_); | ||||
| @@ -53,7 +53,7 @@ int AddInt8Coder::Init() { | |||||
| const double twice_max_input_scale = 2 * std::max(in0_scale, in1_scale); | const double twice_max_input_scale = 2 * std::max(in0_scale, in1_scale); | ||||
| const double in0_multiplier = in0_scale / twice_max_input_scale; | const double in0_multiplier = in0_scale / twice_max_input_scale; | ||||
| const double in1_multiplier = in1_scale / twice_max_input_scale; | const double in1_multiplier = in1_scale / twice_max_input_scale; | ||||
| const double out_multiplier = twice_max_input_scale / ((1 << para_.left_shift_) * out_scale); | |||||
| const double out_multiplier = twice_max_input_scale / ((1 << static_cast<uint32_t>(para_.left_shift_)) * out_scale); | |||||
| QuantizeMultiplierSmallerThanOne(in0_multiplier, ¶_.in0_args_.multiplier_, ¶_.in0_args_.left_shift_); | QuantizeMultiplierSmallerThanOne(in0_multiplier, ¶_.in0_args_.multiplier_, ¶_.in0_args_.left_shift_); | ||||
| QuantizeMultiplierSmallerThanOne(in1_multiplier, ¶_.in1_args_.multiplier_, ¶_.in1_args_.left_shift_); | QuantizeMultiplierSmallerThanOne(in1_multiplier, ¶_.in1_args_.multiplier_, ¶_.in1_args_.left_shift_); | ||||
| @@ -41,7 +41,7 @@ int SubInt8Coder::Prepare(CoderContext *const context) { | |||||
| param_.out_args_.scale_ = output_tensor_->quant_params().front().scale; | param_.out_args_.scale_ = output_tensor_->quant_params().front().scale; | ||||
| param_.out_args_.zp_ = output_tensor_->quant_params().front().zeroPoint; | param_.out_args_.zp_ = output_tensor_->quant_params().front().zeroPoint; | ||||
| const int left_shift = 20; | |||||
| const uint32_t left_shift = 20; | |||||
| const double twice_max_input_scale = 2 * std::max(param_.in0_args_.scale_, param_.in1_args_.scale_); | const double twice_max_input_scale = 2 * std::max(param_.in0_args_.scale_, param_.in1_args_.scale_); | ||||
| const double real_input0_multiplier = param_.in0_args_.scale_ / twice_max_input_scale; | const double real_input0_multiplier = param_.in0_args_.scale_ / twice_max_input_scale; | ||||
| const double real_input1_multiplier = param_.in1_args_.scale_ / twice_max_input_scale; | const double real_input1_multiplier = param_.in1_args_.scale_ / twice_max_input_scale; | ||||
| @@ -54,10 +54,10 @@ int SubInt8Coder::Prepare(CoderContext *const context) { | |||||
| param_.output_activation_min_ = std::numeric_limits<int8_t>::min(); | param_.output_activation_min_ = std::numeric_limits<int8_t>::min(); | ||||
| param_.output_activation_max_ = std::numeric_limits<int8_t>::max(); | param_.output_activation_max_ = std::numeric_limits<int8_t>::max(); | ||||
| int left_shift0 = -param_.input0_shift_ > 0 ? -param_.input0_shift_ : 0; | |||||
| uint32_t left_shift0 = -param_.input0_shift_ > 0 ? -param_.input0_shift_ : 0; | |||||
| param_.right_shift0_ = -param_.input0_shift_ > 0 ? 0 : param_.input0_shift_; | param_.right_shift0_ = -param_.input0_shift_ > 0 ? 0 : param_.input0_shift_; | ||||
| int left_shift1 = -param_.input1_shift_ > 0 ? -param_.input1_shift_ : 0; | |||||
| uint32_t left_shift1 = -param_.input1_shift_ > 0 ? -param_.input1_shift_ : 0; | |||||
| param_.right_shift1_ = -param_.input1_shift_ > 0 ? 0 : param_.input1_shift_; | param_.right_shift1_ = -param_.input1_shift_ > 0 ? 0 : param_.input1_shift_; | ||||
| param_.left_shift_out_ = -param_.output_shift_ > 0 ? -param_.output_shift_ : 0; | param_.left_shift_out_ = -param_.output_shift_ > 0 ? -param_.output_shift_ : 0; | ||||
| @@ -15,7 +15,6 @@ | |||||
| */ | */ | ||||
| #include "wrapper/int8/conv_init_int8_wrapper.h" | #include "wrapper/int8/conv_init_int8_wrapper.h" | ||||
| #include <memory.h> | |||||
| #include "nnacl/op_base.h" | #include "nnacl/op_base.h" | ||||
| #include "nnacl/int8/matmul_int8.h" | #include "nnacl/int8/matmul_int8.h" | ||||
| #include "nnacl/errorcode.h" | #include "nnacl/errorcode.h" | ||||