forked from mindspore-Ecosystem/mindspore
84 lines
2.6 KiB
C++
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_
|