From 85e493ecb98bda9a4bea791ccae1f1dd6b3cdbba Mon Sep 17 00:00:00 2001 From: Nikolay Shchegolev Date: Tue, 9 Mar 2021 12:52:25 +0300 Subject: [PATCH] [CPU] Statically analyzed issues. (#4636) --- .../nodes/common/tensor_desc_creator.cpp | 2 +- .../src/mkldnn_plugin/nodes/cum_sum.cpp | 4 ++-- .../mkldnn_plugin/nodes/mkldnn_bin_conv_node.cpp | 16 ++++++++++++---- .../mkldnn_plugin/nodes/mkldnn_def_conv_node.cpp | 10 ++++++++-- .../src/mkldnn_plugin/nodes/mkldnn_mvn_node.cpp | 4 ++-- .../src/mkldnn_plugin/nodes/mkldnn_pad_node.cpp | 5 ++++- .../src/mkldnn_plugin/nodes/mkldnn_pad_node.h | 10 +++++----- .../mkldnn_plugin/nodes/mkldnn_quantize_node.cpp | 16 ++++++++++++---- .../nodes/mkldnn_roi_pooling_node.cpp | 14 ++++++++++---- .../mkldnn_plugin/nodes/mkldnn_split_node.cpp | 5 ++++- .../mkldnn_plugin/nodes/non_max_suppression.cpp | 10 +++++----- .../src/mkldnn_plugin/nodes/region_yolo.cpp | 4 ++-- 12 files changed, 67 insertions(+), 33 deletions(-) diff --git a/inference-engine/src/mkldnn_plugin/nodes/common/tensor_desc_creator.cpp b/inference-engine/src/mkldnn_plugin/nodes/common/tensor_desc_creator.cpp index d19a71898c2..d00912e010d 100644 --- a/inference-engine/src/mkldnn_plugin/nodes/common/tensor_desc_creator.cpp +++ b/inference-engine/src/mkldnn_plugin/nodes/common/tensor_desc_creator.cpp @@ -91,7 +91,7 @@ TensorDescCreator::makeFilteredRange(const CreatorsMap &map, unsigned int rank) std::pair TensorDescCreator::makeFilteredRange(const CreatorsMap& map, unsigned rank, const std::vector& supportedTypes) { - size_t bitMask = 0ul; + unsigned bitMask = 0ul; for (auto& item : supportedTypes) { bitMask |= 1 << static_cast(item); } diff --git a/inference-engine/src/mkldnn_plugin/nodes/cum_sum.cpp b/inference-engine/src/mkldnn_plugin/nodes/cum_sum.cpp index fccbefe1e34..6e12e4ef2eb 100644 --- a/inference-engine/src/mkldnn_plugin/nodes/cum_sum.cpp +++ b/inference-engine/src/mkldnn_plugin/nodes/cum_sum.cpp @@ -205,7 +205,7 @@ private: void parallelItInit(size_t start, std::vector& counters, const std::vector& iterationRange) { auto itCounter = counters.rbegin(); auto itWork = iterationRange.rbegin(); - while (itCounter != counters.rend()) { + while (itCounter != counters.rend() && itWork != iterationRange.rend()) { *itCounter = start % *itWork; start /= *itWork; ++itCounter; @@ -217,7 +217,7 @@ private: auto itCounter = counters.rbegin(); auto itWork = iterationRange.rbegin(); - while (itCounter != counters.rend()) { + while (itCounter != counters.rend() && itWork != iterationRange.rend()) { *itCounter = (*itCounter + 1) % *itWork; if (*itCounter != 0) { break; diff --git a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_bin_conv_node.cpp b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_bin_conv_node.cpp index eff423171a1..266315496e1 100644 --- a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_bin_conv_node.cpp +++ b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_bin_conv_node.cpp @@ -991,13 +991,17 @@ void MKLDNNBinaryConvolutionNode::initSupportedPrimitiveDescriptors() { } void MKLDNNBinaryConvolutionNode::createPrimitive() { - auto config = getSelectedPrimitiveDescriptor()->getConfig(); + auto selectedPrimitiveDescriptor = getSelectedPrimitiveDescriptor(); + if (!selectedPrimitiveDescriptor) + THROW_IE_EXCEPTION << "CPU binary convolution with name '" << getName() << "' doesn't have primitive descriptors."; + + auto config = selectedPrimitiveDescriptor->getConfig(); auto srcDims = config.inConfs[0].desc.getDims(); auto weiDims = config.inConfs[1].desc.getDims(); auto dstDims = config.outConfs[0].desc.getDims(); - auto implType = getSelectedPrimitiveDescriptor()->getImplementationType(); + auto implType = selectedPrimitiveDescriptor->getImplementationType(); jcp.ngroups = group; jcp.mb = srcDims[0]; @@ -1295,7 +1299,11 @@ void MKLDNNBinaryConvolutionNode::execute(mkldnn::stream strm) { auto weights = reinterpret_cast(weightsMemory->GetPtr()); auto dst = reinterpret_cast(dstMemory->GetPtr()); - auto config = getSelectedPrimitiveDescriptor()->getConfig(); + auto selectedPrimitiveDescriptor = getSelectedPrimitiveDescriptor(); + if (!selectedPrimitiveDescriptor) + THROW_IE_EXCEPTION << "CPU binary convolution with name '" << getName() << "' doesn't have primitive descriptors."; + + auto config = selectedPrimitiveDescriptor->getConfig(); auto srcBlockDesc = config.inConfs[0].desc.getBlockingDesc(); std::vector srcStride(srcBlockDesc.getStrides().size()); @@ -1315,7 +1323,7 @@ void MKLDNNBinaryConvolutionNode::execute(mkldnn::stream strm) { dstStride[dstBlockDesc.getOrder()[i]] = dstBlockDesc.getStrides()[i]; } - auto implType = getSelectedPrimitiveDescriptor()->getImplementationType(); + auto implType = selectedPrimitiveDescriptor->getImplementationType(); if (implType != impl_desc_type::ref) { executeOptimized(src, weights, dst, srcStride, weightsStride, dstStride); } else { diff --git a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_def_conv_node.cpp b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_def_conv_node.cpp index 797daab26a8..ba4df271a2a 100644 --- a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_def_conv_node.cpp +++ b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_def_conv_node.cpp @@ -854,7 +854,10 @@ void MKLDNNDeformableConvolutionNode::initSupportedPrimitiveDescriptors() { } void MKLDNNDeformableConvolutionNode::createPrimitive() { - auto config = getSelectedPrimitiveDescriptor()->getConfig(); + auto selectedPrimitiveDescriptor = getSelectedPrimitiveDescriptor(); + if (!selectedPrimitiveDescriptor) + THROW_IE_EXCEPTION << "CPU deformable convolution with name '" << getName() << "' doesn't have primitive descriptors."; + auto config = selectedPrimitiveDescriptor->getConfig(); auto srcDims = config.inConfs[0].desc.getDims(); auto weiDims = config.inConfs[2].desc.getDims(); @@ -1057,7 +1060,10 @@ void MKLDNNDeformableConvolutionNode::execute(mkldnn::stream strm) { const auto *weights = reinterpret_cast(srcMemory2.GetPtr()); float *dst = reinterpret_cast(dstMemory.GetPtr()); - auto config = getSelectedPrimitiveDescriptor()->getConfig(); + auto selectedPrimitiveDescriptor = getSelectedPrimitiveDescriptor(); + if (!selectedPrimitiveDescriptor) + THROW_IE_EXCEPTION << "CPU deformable convolution with name '" << getName() << "' doesn't have primitive descriptors."; + auto config = selectedPrimitiveDescriptor->getConfig(); auto src_block_desc = config.inConfs[0].desc.getBlockingDesc(); std::vector src_strides(src_block_desc.getStrides().size()); diff --git a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_mvn_node.cpp b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_mvn_node.cpp index 59fb4a5fe74..7fd488fd2ff 100644 --- a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_mvn_node.cpp +++ b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_mvn_node.cpp @@ -942,7 +942,7 @@ void MKLDNNMVNNode::mvn_pln(const uint8_t* src_data, uint8_t* dst_data, const Si arg.src_stride = src_stride_size; arg.dst_stride = dst_stride_size; arg.work_amount = static_cast(C2 / blk_size); // work amount for vector part - arg.oc_off = static_cast(c * sizeof(float)); + arg.oc_off = sizeof(float) * c; (*mvn_kernel)(&arg); }); } else { @@ -956,7 +956,7 @@ void MKLDNNMVNNode::mvn_pln(const uint8_t* src_data, uint8_t* dst_data, const Si arg.src_stride = src_stride_size; arg.dst_stride = dst_stride_size; arg.work_amount = static_cast(C2 / blk_size); - arg.oc_off = static_cast(c * sizeof(float)); + arg.oc_off = sizeof(float) * c; (*mvn_kernel)(&arg); }); } diff --git a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_pad_node.cpp b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_pad_node.cpp index 58b74e3e604..f70dc2d1d35 100644 --- a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_pad_node.cpp +++ b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_pad_node.cpp @@ -252,7 +252,10 @@ void MKLDNNPadNode::padConstant() { return; } - InferenceEngine::Precision precision = this->getSelectedPrimitiveDescriptor()->getConfig().inConfs[0].desc.getPrecision(); + auto selectedPrimitiveDescriptor = getSelectedPrimitiveDescriptor(); + if (!selectedPrimitiveDescriptor) + THROW_IE_EXCEPTION << "CPU Pad node with name '" << getName() << "' doesn't have primitive descriptors."; + InferenceEngine::Precision precision = selectedPrimitiveDescriptor->getConfig().inConfs[0].desc.getPrecision(); OV_SWITCH(MKLDNNPlugin, PadConstantEmitter, this, precision, OV_CASE(InferenceEngine::Precision::FP32, float), OV_CASE(InferenceEngine::Precision::I32, int32_t), diff --git a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_pad_node.h b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_pad_node.h index afe86b6abbb..01d1cc3ee4d 100644 --- a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_pad_node.h +++ b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_pad_node.h @@ -49,11 +49,11 @@ private: InferenceEngine::SizeVector srcStrides; InferenceEngine::SizeVector dstStrides; InferenceEngine::SizeVector srcDimsForReflectOrSymmetric; - size_t nDimsForWork; - size_t workAmount; - size_t lastDstDim; - size_t shift; - uint8_t sizeData; + size_t nDimsForWork = 0lu; + size_t workAmount = 0lu; + size_t lastDstDim = 1lu; + size_t shift = 0lu; + uint8_t sizeData = 1; } params; template diff --git a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_quantize_node.cpp b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_quantize_node.cpp index 3215bfc8749..e40cf0ab268 100644 --- a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_quantize_node.cpp +++ b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_quantize_node.cpp @@ -279,8 +279,8 @@ private: Reg64 reg_output_scale = rbx; Reg64 reg_output_shift = rdx; - bool do_rounding; - bool do_dequantization; + bool do_rounding = true; + bool do_dequantization = true; inline void compute_planar() { int src_type_size = jqp_.src_prc.size(); @@ -1209,7 +1209,11 @@ void MKLDNNQuantizeNode::createPrimitive() { jqp.op_type = quantizeOpType; - if (getSelectedPrimitiveDescriptor()->getImplementationType() != impl_desc_type::ref) { + auto selectedPrimitiveDescriptor = getSelectedPrimitiveDescriptor(); + if (!selectedPrimitiveDescriptor) + THROW_IE_EXCEPTION << "CPU quantize node with name '" << getName() << "' doesn't have primitive descriptors."; + + if (selectedPrimitiveDescriptor->getImplementationType() != impl_desc_type::ref) { if (mayiuse(cpu::x64::avx512_common)) { if (isBinarization()) quantize_kernel.reset(new jit_uni_binarization_kernel(jqp)); @@ -1523,7 +1527,11 @@ void MKLDNNQuantizeNode::executeQuantization() { } void MKLDNNQuantizeNode::execute(mkldnn::stream strm) { - if (getSelectedPrimitiveDescriptor()->getImplementationType() != impl_desc_type::ref) { + auto selectedPrimitiveDescriptor = getSelectedPrimitiveDescriptor(); + if (!selectedPrimitiveDescriptor) + THROW_IE_EXCEPTION << "CPU quantize node with name '" << getName() << "' doesn't have primitive descriptors."; + + if (selectedPrimitiveDescriptor->getImplementationType() != impl_desc_type::ref) { if (jqp.op_type == QuantizeOpType::Binarization) executeBinarization(); else diff --git a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_roi_pooling_node.cpp b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_roi_pooling_node.cpp index 91e99f6d3fd..c826c38425e 100644 --- a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_roi_pooling_node.cpp +++ b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_roi_pooling_node.cpp @@ -332,7 +332,10 @@ void MKLDNNROIPoolingNode::initSupportedPrimitiveDescriptors() { } void MKLDNNROIPoolingNode::createPrimitive() { - auto config = getSelectedPrimitiveDescriptor()->getConfig(); + auto selectedPrimitiveDescriptor = getSelectedPrimitiveDescriptor(); + if (!selectedPrimitiveDescriptor) + THROW_IE_EXCEPTION << "CPU ROI Pooling node with name '" << getName() << "' doesn't have primitive descriptors."; + auto config = selectedPrimitiveDescriptor->getConfig(); const int simd_w = mayiuse(cpu::x64::avx512_common) ? 16 : 8; jpp.c_block = simd_w; @@ -378,7 +381,10 @@ void MKLDNNROIPoolingNode::execute(mkldnn::stream strm) { const auto *src_roi = reinterpret_cast(srcMemory1.GetPtr()); float *dst = reinterpret_cast(dstMemory.GetPtr()); - auto config = getSelectedPrimitiveDescriptor()->getConfig(); + auto selectedPrimitiveDescriptor = getSelectedPrimitiveDescriptor(); + if (!selectedPrimitiveDescriptor) + THROW_IE_EXCEPTION << "CPU ROI Pooling node with name '" << getName() << "' doesn't have primitive descriptors."; + auto config = selectedPrimitiveDescriptor->getConfig(); auto src_strides = config.inConfs[0].desc.getBlockingDesc().getStrides(); auto dst_strides = config.outConfs[0].desc.getBlockingDesc().getStrides(); @@ -526,8 +532,8 @@ void MKLDNNROIPoolingNode::execute(mkldnn::stream strm) { arg.xf = in_x - left_x_index; arg.yf = in_y - top_y_index; - arg.xoff = (size_t) ((right_x_index - left_x_index) * jpp.c_block * sizeof(float)); - arg.yoff = (size_t) ((bottom_y_index - top_y_index) * jpp.iw * jpp.c_block * sizeof(float)); + arg.xoff = sizeof(float) * (right_x_index - left_x_index) * jpp.c_block; + arg.yoff = sizeof(float) * (bottom_y_index - top_y_index) * jpp.iw * jpp.c_block; arg.src = &src_data[roi_batch_ind * src_strides[0] + cb * src_strides[1] + top_y_index * src_strides[2] + left_x_index * src_strides[3]]; diff --git a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_split_node.cpp b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_split_node.cpp index 3c6ab552ff5..a1ca3966c1c 100644 --- a/inference-engine/src/mkldnn_plugin/nodes/mkldnn_split_node.cpp +++ b/inference-engine/src/mkldnn_plugin/nodes/mkldnn_split_node.cpp @@ -458,7 +458,10 @@ void MKLDNNSplitNode::setDynamicBatchLim(int lim) { } void MKLDNNSplitNode::prepareOptimizedParams() { - const auto& inpTensorDesc = this->getSelectedPrimitiveDescriptor()->getConfig().inConfs[0].desc; + auto selectedPrimitiveDescriptor = getSelectedPrimitiveDescriptor(); + if (!selectedPrimitiveDescriptor) + THROW_IE_EXCEPTION << "CPU Split node with name '" << getName() << "' doesn't have primitive descriptors."; + const auto& inpTensorDesc = selectedPrimitiveDescriptor->getConfig().inConfs[0].desc; const auto outputPortsCount = outDims.size(); //find axis order position diff --git a/inference-engine/src/mkldnn_plugin/nodes/non_max_suppression.cpp b/inference-engine/src/mkldnn_plugin/nodes/non_max_suppression.cpp index 5a8b56e31d3..f56f77ee695 100644 --- a/inference-engine/src/mkldnn_plugin/nodes/non_max_suppression.cpp +++ b/inference-engine/src/mkldnn_plugin/nodes/non_max_suppression.cpp @@ -433,11 +433,11 @@ private: size_t num_boxes; size_t num_classes; - size_t max_output_boxes_per_class; - float iou_threshold; - float score_threshold; - float soft_nms_sigma; - float scale; + size_t max_output_boxes_per_class = 0lu; + float iou_threshold = 0.0f; + float score_threshold = 0.0f; + float soft_nms_sigma = 0.0f; + float scale = 1.f; std::vector> numFiltBox; const std::string inType = "input", outType = "output"; diff --git a/inference-engine/src/mkldnn_plugin/nodes/region_yolo.cpp b/inference-engine/src/mkldnn_plugin/nodes/region_yolo.cpp index 5b9e2b0449a..5d6a5c4667c 100644 --- a/inference-engine/src/mkldnn_plugin/nodes/region_yolo.cpp +++ b/inference-engine/src/mkldnn_plugin/nodes/region_yolo.cpp @@ -40,8 +40,8 @@ struct jit_args_logistic { struct jit_logistic_config_params { InferenceEngine::Precision src_dt; InferenceEngine::Precision dst_dt; - unsigned src_data_size; - unsigned dst_data_size; + unsigned src_data_size = 0; + unsigned dst_data_size = 0; }; struct jit_uni_logistic_kernel {