mindspore/predict/src/op_common.h

84 lines
2.6 KiB
C++

/**
* Copyright 2019 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.
*/
#ifndef PREDICT_SRC_OP_COMMON_H_
#define PREDICT_SRC_OP_COMMON_H_
#include <assert.h>
namespace mindspore {
namespace predict {
static inline size_t AlignSize(size_t size, size_t align) { return (size + align - 1) & -align; }
template <typename Tsrc, typename Tdst>
inline void Nchw2Nhwc(const Tsrc *in, Tdst *out, size_t h, size_t w, size_t c) {
MS_ASSERT(in != nullptr && out != nullptr);
const size_t sz = w * h;
for (size_t cc = 0; cc < c; ++cc) {
auto pi = in + sz * cc;
for (size_t el = 0; el < sz; ++el) {
out[cc + el * c] = (Tdst)pi[el];
}
}
}
template <typename Tsrc, typename Tdst>
inline void Nhwc2Nchw(const Tsrc *in, Tdst *out, size_t h, size_t w, size_t c) {
MS_ASSERT(in != nullptr && out != nullptr);
const size_t sz = w * h;
for (auto cc = 0; cc < c; ++cc) {
auto po = out + sz * cc;
for (size_t el = 0; el < sz; ++el) {
po[el] = (Tdst)in[cc + el * c];
}
}
}
template <typename Tsrc, typename Tdst>
inline void InverseQuantization(const Tsrc *srcdata, Tdst *dstdata, size_t datanum, float *parms) {
MS_ASSERT(srcdata != nullptr && dstdata != nullptr);
float scale = parms[2];
float zeroPoint = parms[3];
for (size_t i = 0; i < datanum; ++i) {
dstdata = (scale == 0) ? (0) : (Tdst)((srcdata[i] - zeroPoint) * scale);
}
}
template <typename Tsrc, typename Tdst>
inline void Astype(const Tsrc *srcdata, Tdst *dstdata, size_t datanum) {
MS_ASSERT(srcdata != nullptr && dstdata != nullptr);
for (size_t i = 0; i < datanum; ++i) {
dstdata[i] = (Tdst)srcdata[i];
}
}
#define MSMIN(x, y) ((x) < (y) ? (x) : (y))
#define MSMAX(x, y) ((x) > (y) ? (x) : (y))
#define UP_DIV(x, y) (((x) + (y) - (1)) / (y))
#define DOWN_DIV(x, y) (((x) - (y) + (1)) / (y))
#define ROUND_UP(x, y) (((x) + (y) - (1)) / (y) * (y))
#define ALIGN_UP4(x) ROUND_UP((x), 4)
#define ALIGN_UP8(x) ROUND_UP((x), 8)
#define MAX_MALLOC_SIZE 100 * 1024 * 1024
} // namespace predict
} // namespace mindspore
#endif // PREDICT_SRC_OP_COMMON_H_