|
|
|
@@ -551,8 +551,8 @@ STATUS WeightQuantizer::DoQuantSearch(const FuncGraphPtr &func_graph) { |
|
|
|
// copy origin data in case to recover |
|
|
|
auto *raw_data = static_cast<float *>(param_value->tensor_addr()); |
|
|
|
auto elem_count = param_value->tensor_shape_size(); |
|
|
|
auto origin_data = malloc(sizeof(float) * elem_count); |
|
|
|
auto ret = memcpy_s(origin_data, sizeof(float) * elem_count, raw_data, param_value->tensor_size()); |
|
|
|
std::unique_ptr<float[]> origin_data(new (std::nothrow) float[elem_count]); |
|
|
|
auto ret = memcpy_s(origin_data.get(), sizeof(float) * elem_count, raw_data, param_value->tensor_size()); |
|
|
|
if (ret != EOK) { |
|
|
|
MS_LOG(ERROR) << "memcpy fail: " |
|
|
|
<< " dst size: " << sizeof(float) * elem_count << " src size: " << param_value->tensor_size(); |
|
|
|
@@ -617,7 +617,7 @@ STATUS WeightQuantizer::DoQuantSearch(const FuncGraphPtr &func_graph) { |
|
|
|
MS_LOG(DEBUG) << "op: " << op_name << " intermediate bit: " << bit_num_t << " mean_error: " << mean_error |
|
|
|
<< " [recover]"; |
|
|
|
// recover |
|
|
|
status = UpdateTensorDataAndSize(param_value, origin_data, sizeof(float) * elem_count); |
|
|
|
status = UpdateTensorDataAndSize(param_value, origin_data.get(), sizeof(float) * elem_count); |
|
|
|
if (status != RET_OK) { |
|
|
|
MS_LOG(ERROR) << "UpdateTensorDataAndSize fail"; |
|
|
|
return RET_ERROR; |
|
|
|
@@ -627,9 +627,8 @@ STATUS WeightQuantizer::DoQuantSearch(const FuncGraphPtr &func_graph) { |
|
|
|
opname_bit_[op_name] = bit_num_t; |
|
|
|
} |
|
|
|
} // end bit loop |
|
|
|
free(origin_data); |
|
|
|
} // if: conv and matmul |
|
|
|
} // end loop: all cnode |
|
|
|
} // if: conv and matmul |
|
|
|
} // end loop: all cnode |
|
|
|
return status; |
|
|
|
} |
|
|
|
|
|
|
|
|