From a767b1a3e27178fc3e3326d698c1bc7c652af734 Mon Sep 17 00:00:00 2001 From: zhujingxuan Date: Tue, 23 Mar 2021 15:09:05 +0800 Subject: [PATCH] fix Vector && script --- mindspore/lite/include/context.h | 8 +++ mindspore/lite/include/lite_utils.h | 44 ++++++++----- .../lite/micro/example/mnist_x86/mnist.sh | 10 +-- .../micro/example/mnist_x86/mnist_codegen.sh | 65 ------------------- 4 files changed, 40 insertions(+), 87 deletions(-) delete mode 100644 mindspore/lite/micro/example/mnist_x86/mnist_codegen.sh diff --git a/mindspore/lite/include/context.h b/mindspore/lite/include/context.h index 2623a34189..7d626beef6 100644 --- a/mindspore/lite/include/context.h +++ b/mindspore/lite/include/context.h @@ -39,11 +39,19 @@ typedef struct { } NpuDeviceInfo; /// \brief DeviceInfo defined for backend's configuration information. +#ifdef NOT_USE_STL +// DeviceInfo() is implicitly deleted because +// the default definition of union struct would be ill-formed +struct DeviceInfo { + CpuDeviceInfo cpu_device_info_; +}; +#else union DeviceInfo { CpuDeviceInfo cpu_device_info_; GpuDeviceInfo gpu_device_info_; NpuDeviceInfo npu_device_info_; }; +#endif // NOT_USE_STL /// \brief DeviceContext defined for holding backend's configuration information. struct DeviceContext { diff --git a/mindspore/lite/include/lite_utils.h b/mindspore/lite/include/lite_utils.h index 0298e75337..976248f855 100644 --- a/mindspore/lite/include/lite_utils.h +++ b/mindspore/lite/include/lite_utils.h @@ -27,6 +27,7 @@ #include #include #include +#include #endif // NOT_USE_STL #ifndef MS_API @@ -126,22 +127,21 @@ class Vector { size_ = size; elem_size_ = sizeof(T); capacity_ = (size == 0 ? DEFAULT_CAPACITY : size); - data_ = reinterpret_cast(malloc(capacity_ * elem_size_)); + data_ = new (std::nothrow) T[capacity_]; if (data_ == nullptr) { MS_C_EXCEPTION("malloc data failed"); } - memset(data_, 0, capacity_ * elem_size_); } Vector(size_t size, const T &value) { size_ = size; elem_size_ = sizeof(T); capacity_ = (size == 0 ? DEFAULT_CAPACITY : size); - data_ = reinterpret_cast(malloc(capacity_ * elem_size_)); + data_ = new (std::nothrow) T[capacity_]; if (data_ == nullptr) { MS_C_EXCEPTION("malloc data failed"); } - for (int i = 0; i < size; ++i) { + for (int i = 0; i < static_cast(size_); ++i) { data_[i] = value; } } @@ -150,30 +150,32 @@ class Vector { size_ = vec.size_; elem_size_ = sizeof(T); capacity_ = vec.capacity_; - data_ = reinterpret_cast(malloc(capacity_ * elem_size_)); + data_ = new (std::nothrow) T[capacity_]; if (data_ == nullptr) { MS_C_EXCEPTION("malloc data failed"); } - memcpy(data_, vec.data_, size_ * elem_size_); + for (int i = 0; i < static_cast(size_); ++i) { + data_[i] = vec.data_[i]; + } } ~Vector() { if (data_ != nullptr) { - free(data_); + delete[] data_; } } void clear() { size_ = 0; if (data_ != nullptr) { - free(data_); + delete[] data_; data_ = nullptr; } } void push_back(const T &elem) { if (data_ == nullptr) { - data_ = reinterpret_cast(malloc(capacity_ * elem_size_)); + data_ = new (std::nothrow) T[capacity_]; if (data_ == nullptr) { MS_C_EXCEPTION("malloc data failed"); } @@ -187,7 +189,7 @@ class Vector { void push_back(T &&elem) { if (data_ == nullptr) { - data_ = reinterpret_cast(malloc(capacity_ * elem_size_)); + data_ = new (std::nothrow) T[capacity_]; if (data_ == nullptr) { MS_C_EXCEPTION("malloc data failed"); } @@ -216,7 +218,9 @@ class Vector { if (index == size_ - 1) { push_back(elem); } else { - memmove(data_ + index + 1, data_ + index, (size_ - index - 1) * elem_size_); + for (int i = static_cast(size_) - 1; i > static_cast(index); --i) { + data_[i + 1] = data_[i]; + } data_[index] = elem; } } else { @@ -302,7 +306,9 @@ class Vector { if (index == size_ - 1) { --size_; } else if (index < size_) { - memmove(data_ + index, data_ + index + 1, (size_ - index - 1) * elem_size_); + for (int i = index; i < static_cast(size_); ++i) { + data_[i] = data_[i + 1]; + } --size_; } else { MS_C_EXCEPTION("Input index is out of range!"); @@ -314,13 +320,15 @@ class Vector { capacity_ *= 2; } T *tmp = data_; - data_ = reinterpret_cast(malloc(capacity_ * elem_size_)); + data_ = new (std::nothrow) T[capacity_]; if (data_ == nullptr) { MS_C_EXCEPTION("malloc data failed"); } - memcpy(data_, tmp, MIN(size, size_) * elem_size_); + for (int i = 0; i < MIN(static_cast(size), static_cast(size_)); ++i) { + data_[i] = tmp[i]; + } size_ = size; - free(tmp); + delete[] tmp; } void reserve(size_t capacity) { @@ -336,11 +344,13 @@ class Vector { size_ = vec.size_; elem_size_ = sizeof(T); capacity_ = vec.capacity_; - data_ = reinterpret_cast(malloc(capacity_ * elem_size_)); + data_ = new (std::nothrow) T[capacity_]; if (data_ == nullptr) { MS_C_EXCEPTION("malloc data failed"); } - memcpy(data_, vec.data_, size_ * elem_size_); + for (int i = 0; i < static_cast(size_); ++i) { + data_[i] = vec.data_[i]; + } return *this; } diff --git a/mindspore/lite/micro/example/mnist_x86/mnist.sh b/mindspore/lite/micro/example/mnist_x86/mnist.sh index bc79ef5e3d..2c2960a99c 100644 --- a/mindspore/lite/micro/example/mnist_x86/mnist.sh +++ b/mindspore/lite/micro/example/mnist_x86/mnist.sh @@ -27,11 +27,13 @@ do done BASEPATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -MINDSPORE_ROOT_DIR=${${BASEPATH}%%/mindspore/lite/micro/example/mnist} +MINDSPORE_ROOT_DIR=${${BASEPATH}%%/mindspore/lite/micro/example/mnist_x86} echo "current dir is: ${BASEPATH}" INPUT_BIN=${BASEPATH}/mnist_input.bin +MNIST_NAME=mnist +MNIST_FILE=${MNIST_NAME}.ms BENCHMARK_PATH=${BASEPATH} get_version() { @@ -43,7 +45,7 @@ get_version() { } download_inference() { - local MINDSPORE_FILE_NAME="mindspore-lite-${VERSION_STR}-inference-linux-x64" + MINDSPORE_FILE_NAME="mindspore-lite-${VERSION_STR}-inference-linux-x64" local MINDSPORE_FILE="${MINDSPORE_FILE_NAME}.tar.gz" local MINDSPORE_LITE_DOWNLOAD_URL="https://ms-release.obs.cn-north-4.myhuaweicloud.com/${VERSION_STR}/MindSpore/lite/release/linux/${MINDSPORE_FILE}" @@ -57,8 +59,6 @@ download_inference() { } download_mnist() { - MNIST_NAME=mnist - MNIST_FILE=${MNIST_NAME}.ms local MNIST_DOWNLOAD_URL=https://download.mindspore.cn/model_zoo/official/lite/mnist_lite/${MNIST_FILE} if [ ! -e ${BASEPATH}/build/${MNIST_FILE} ]; then @@ -76,7 +76,7 @@ mkdir -p build get_version download_inference -if [ "${GEN}" == "ON" ]; then +if [[ "${GEN}" == "ON" ]]; then echo "downloading mnist.ms!" download_mnist echo "generating mnist" diff --git a/mindspore/lite/micro/example/mnist_x86/mnist_codegen.sh b/mindspore/lite/micro/example/mnist_x86/mnist_codegen.sh deleted file mode 100644 index 2fcde1581f..0000000000 --- a/mindspore/lite/micro/example/mnist_x86/mnist_codegen.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -# Copyright 2021 Huawei Technologies Co., Ltd -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================ -set -e - -BASEPATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -MINDSPORE_ROOT_DIR=${${BASEPATH}%%/mindspore/lite/micro/example/mnist} - -echo "current dir is: ${BASEPATH}" - -VERSION_HEADER=${MINDSPORE_ROOT_DIR}/mindspore/lite/include/version.h -INPUT_BIN=${BASEPATH}/mnist_input.bin - -get_version() { - VERSION_MAJOR=$(grep "const int ms_version_major =" ${VERSION_HEADER} | tr -dc "[0-9]") - VERSION_MINOR=$(grep "const int ms_version_minor =" ${VERSION_HEADER} | tr -dc "[0-9]") - VERSION_REVISION=$(grep "const int ms_version_revision =" ${VERSION_HEADER} | tr -dc "[0-9]") - VERSION_STR=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION} -} -get_version -MINDSPORE_FILE_NAME="mindspore-lite-${VERSION_STR}-inference-linux-x64" -MINDSPORE_FILE="${MINDSPORE_FILE_NAME}.tar.gz" -MINDSPORE_LITE_DOWNLOAD_URL="https://ms-release.obs.cn-north-4.myhuaweicloud.com/${VERSION_STR}/MindSpore/lite/release/linux/${MINDSPORE_FILE}" - -MNIST_NAME=mnist -MNIST_FILE=${MNIST_NAME}.ms -MNIST_DOWNLOAD_URL=https://download.mindspore.cn/model_zoo/official/lite/mnist_lite/${MNIST_FILE} - -mkdir -p build - -if [ ! -e ${BASEPATH}/build/${MINDSPORE_FILE} ]; then - wget -c -O ${BASEPATH}/build/${MINDSPORE_FILE} --no-check-certificate ${MINDSPORE_LITE_DOWNLOAD_URL} -fi - -if [ ! -e ${BASEPATH}/build/${MNIST_FILE} ]; then - wget -c -O ${BASEPATH}/build/${MNIST_FILE} --no-check-certificate ${MNIST_DOWNLOAD_URL} -fi - -tar xzvf ${BASEPATH}/build/${MINDSPORE_FILE} -C ${BASEPATH}/build/ || exit 1 -rm ${BASEPATH}/build/${MINDSPORE_FILE} || exit 1 -PKG_PATH=${BASEPATH}/build/${MINDSPORE_FILE_NAME} - -# 1. codegen -${BASEPATH}/build/${MINDSPORE_FILE_NAME}/tools/codegen/codegen --codePath=${BASEPATH}/build --modelPath=${BASEPATH}/build/${MNIST_FILE} - -# 2. build benchmark -mkdir -p ${BASEPATH}/build/benchmark && cd ${BASEPATH}/build/benchmark || exit 1 -cmake -DPKG_PATH=${PKG_PATH} ${BASEPATH}/build/${MNIST_NAME} -make - -# 3. run benchmark -echo "net file: ${BASEPATH}/src/mnist.bin" -./benchmark ${INPUT_BIN} ${BASEPATH}/src/net.bin