提交 1d55e4e3 编写于 作者: M mindspore-ci-bot 提交者: Gitee

!4620 add nullptr check

Merge pull request !4620 from zhengjun10/master
......@@ -36,7 +36,7 @@ void AnfTransform::SetGraphDef(schema::MetaGraphT *_dstDef) { graphDefT = _dstDe
FuncGraphPtr AnfTransform::Transform(const FuncGraphPtr &old_graph) {
// return old_graph;
auto optimizer = std::make_shared<opt::GraphOptimizer>();
auto pm = std::make_shared<opt::PassManager>();
auto pm = std::make_shared<opt::PassManager>("anf fusion pass manager", false);
pm->AddPass(std::make_shared<opt::ConvBiasaddFusion>());
pm->AddPass(std::make_shared<opt::ConvBatchNormFusion>());
pm->AddPass(std::make_shared<opt::ConvScaleFusion>());
......
......@@ -327,7 +327,15 @@ schema::PrimitiveType GetCNodeType(const BaseRef &n) {
}
bool IsParamNode(const BaseRef &n) {
return utils::isa<ParameterPtr>(n);
if (!utils::isa<ParameterPtr>(n)) {
return false;
}
auto param = utils::cast<ParameterPtr>(n)->default_param();
auto tensor = std::dynamic_pointer_cast<ParamValueLite>(param);
if (tensor == nullptr) {
return false;
}
return tensor->tensor_addr() != nullptr;
}
bool IsConvNode(const BaseRef &n) {
......
......@@ -28,6 +28,8 @@
namespace mindspore {
namespace opt {
static size_t count = 0;
constexpr size_t kMaxRepassTimes = 9;
const std::vector<PassPtr> &PassManager::Passes() const { return passes_; }
void PassManager::AddPass(const PassPtr &pass) {
......@@ -79,9 +81,11 @@ bool PassManager::Run(const FuncGraphPtr &func_graph) const {
while (change) {
change = Run(func_graph, passes_);
changed = change || changed;
if (run_only_once_) {
if (run_only_once_ || count > kMaxRepassTimes) {
break;
}
count++;
MS_LOG(INFO) << "Run pass counts:" << count;
}
return changed;
}
......
......@@ -45,12 +45,20 @@ const std::vector<Tensor *> GetCNodeInputTensors(const CNodePtr &CNode) {
auto tensor_shape = tensorT->dims;
auto lite_tensor =
new(std::nothrow)Tensor(TypeId(tensorT->dataType), tensor_shape, tensorT->format, tensorT->nodeType);
if (lite_tensor == nullptr) {
MS_LOG(ERROR) << "lite tensor is nullptr";
return input_tensors;
}
auto lite_tensor_size = tensorT->data.size() * sizeof(uint8_t);
// when tensorT as graph input
if (lite_tensor_size == 0) {
return input_tensors;
}
auto tensor_data = new(std::nothrow)char[lite_tensor_size / sizeof(char)];
if (tensor_data == nullptr) {
MS_LOG(ERROR) << "tensor_data is nullptr";
return input_tensors;
}
auto ret = memcpy_s(tensor_data, lite_tensor_size, tensorT->data.data(), lite_tensor_size);
if (ret != EOK) {
MS_LOG(EXCEPTION) << "memcpy error: " << ret;
......@@ -97,6 +105,10 @@ const ParameterPtr CreateNewParamter(const FuncGraphPtr &func_graph, Tensor *ten
if (tensor->Data() != nullptr) {
auto size = tensor->ElementsNum();
auto tensor_data = new (std::nothrow) float[size];
if (tensor_data == nullptr) {
MS_LOG(ERROR) << "tensor_data is nullptr";
return nullptr;
}
auto ret = memcpy_s(tensor_data, size * sizeof(float), tensor->Data(), size * sizeof(float));
if (ret != EOK) {
MS_LOG(EXCEPTION) << "memcpy error: " << ret;
......@@ -150,11 +162,15 @@ const AnfNodePtr ConstFoldPass::Process(const FuncGraphPtr &func_graph, const An
std::vector<Tensor *> output_tensors{output_nums, new Tensor()};
auto scheam_primitive = PackPrimitiveT(input_cnode);
auto lite_primitive = lite::Primitive::CreatePrimitive(scheam_primitive);
if (lite_primitive == nullptr) {
MS_LOG(DEBUG) << "constant_folding schedule node lite primitive nullptr";
return nullptr;
}
lite_primitive->InferShape(input_tensors, output_tensors);
auto lite_kernel = GetLiteKernel(input_tensors, output_tensors, lite_primitive);
if (lite_kernel == nullptr) {
MS_LOG(ERROR) << "constant_folding schedule node lite kernel nullptr";
return any_node;
MS_LOG(DEBUG) << "constant_folding schedule node lite kernel nullptr";
return nullptr;
}
auto ret = lite_kernel->Run();
if (0 != ret) {
......
......@@ -83,7 +83,11 @@ void GenConvNewBias(const FuncGraphPtr &func_graph, const CNodePtr &conv_node, c
if (kernel_nums <= 0) {
MS_LOG(EXCEPTION) << "kernel num less than 0";
}
auto add_bias_data = new (std::nothrow) float[kernel_nums];
auto add_bias_data = new(std::nothrow) float[kernel_nums];
if (add_bias_data == nullptr) {
MS_LOG(ERROR) << "tensor_data is nullptr";
return;
}
auto bias_add_weight = bias_node->input(kAddWEIGHTINDEX);
CheckIfNodeIsParam(bias_add_weight);
auto add_weight_param = bias_add_weight->cast<ParameterPtr>()->default_param();
......@@ -140,7 +144,7 @@ const AnfNodePtr ConvBiasaddFusion::Process(const FuncGraphPtr &func_graph, cons
AnfNodePtr conv_node_anf = add_node->input(1);
CheckIfAnfNodeIsNull(conv_node_anf);
if (IsMultiOutputTensors(func_graph, conv_node_anf)) {
return add_node;
return nullptr;
}
auto conv_node = conv_node_anf->cast<CNodePtr>();
CheckIfCNodeIsNull(conv_node);
......
......@@ -67,7 +67,7 @@ const AnfNodePtr ConvTransformFusion::Process(const FuncGraphPtr &func_graph, co
auto pre_node = transform_node->input(1);
auto conv_node = pre_node->cast<CNodePtr>();
if (IsMultiOutputTensors(func_graph, conv_node)) {
return transform_node;
return nullptr;
}
auto abstr = transform_node->abstract();
......@@ -76,8 +76,16 @@ const AnfNodePtr ConvTransformFusion::Process(const FuncGraphPtr &func_graph, co
MS_LOG(ERROR) << "Unsupported conv node, " << conv_node->DebugString();
return node;
}
auto trans_scale = new (std::nothrow) float[kernel_nums];
auto trans_bias = new (std::nothrow) float[kernel_nums];
auto trans_scale = new(std::nothrow) float[kernel_nums];
if (trans_scale == nullptr) {
MS_LOG(ERROR) << "tensor_data is nullptr";
return nullptr;
}
auto trans_bias = new(std::nothrow) float[kernel_nums];
if (trans_bias == nullptr) {
MS_LOG(ERROR) << "tensor_data is nullptr";
return nullptr;
}
GenTransParam(transform_node, kernel_nums, trans_scale, trans_bias);
GenNewConvTensor(func_graph, conv_node, kernel_nums, trans_scale, trans_bias);
delete[] trans_bias;
......@@ -155,7 +163,11 @@ const void ConvTransformFusion::GenNewConvTensor(const FuncGraphPtr &func_graph,
bias_data = reinterpret_cast<float *>(bias_tensor->tensor_addr());
bias_flag = true;
} else {
bias_data = new (std::nothrow) float[kernel_num];
bias_data = new(std::nothrow) float[kernel_num];
if (trans_scale == nullptr) {
MS_LOG(ERROR) << "tensor_data is nullptr";
return;
}
}
CalNewBiasTensor(bias_data, kernel_num, bias_flag, trans_scale, trans_bias);
if (!bias_flag) {
......@@ -193,7 +205,11 @@ const void ConvTransformFusion::CalNewBiasTensor(float *bias_data, int kernel_nu
const float *trans_scale, const float *trans_bias) const {
MS_ASSERT(bias_data != nullptr);
if (bias_flag) {
auto tmp_bias_data = new (std::nothrow) float[kernel_num];
auto tmp_bias_data = new(std::nothrow) float[kernel_num];
if (tmp_bias_data == nullptr) {
MS_LOG(ERROR) << "tensor_data is nullptr";
return;
}
if (EOK != memset_s(tmp_bias_data, kernel_num * sizeof(float), 0, kernel_num * sizeof(float))) {
MS_LOG(EXCEPTION) << "memset bias data failed";
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册