/** * 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 namespace mindspore { namespace predict { static inline size_t AlignSize(size_t size, size_t align) { return (size + align - 1) & -align; } template 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 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 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 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_