mirror of https://github.com/alibaba/MNN.git
51 lines
1.5 KiB
C++
51 lines
1.5 KiB
C++
//
|
|
// CPUQuantizedAdd.hpp
|
|
// MNN
|
|
//
|
|
// Created by MNN on 2018/10/18.
|
|
// Copyright © 2018, Alibaba Group Holding Limited
|
|
//
|
|
|
|
#ifndef CPUQuantizedAdd_hpp
|
|
#define CPUQuantizedAdd_hpp
|
|
|
|
#include "core/Execution.hpp"
|
|
#include "TFQuantizeOp_generated.h"
|
|
|
|
// have to include after Marco.h
|
|
#include "CPUFixedPoint.hpp"
|
|
|
|
namespace MNN {
|
|
|
|
class CPUQuantizedAdd : public Execution {
|
|
public:
|
|
CPUQuantizedAdd(Backend *backend, const Op *op);
|
|
virtual ~CPUQuantizedAdd() = default;
|
|
virtual ErrorCode onResize(const std::vector<Tensor *> &inputs, const std::vector<Tensor *> &outputs) override;
|
|
virtual ErrorCode onExecute(const std::vector<Tensor *> &inputs, const std::vector<Tensor *> &outputs) override;
|
|
|
|
private:
|
|
const QuantizedAdd *mQuantizedAddParam;
|
|
int mInput1Offset;
|
|
int mInput2Offset;
|
|
int mOutputOffset;
|
|
int mInput1Multiplier;
|
|
int mInput2Multiplier;
|
|
int mOutputMultiplier;
|
|
int mInput1Shift;
|
|
int mInput2Shift;
|
|
int mOutputShift;
|
|
int mOutputActivationMin, mOutputActivationMax;
|
|
int mLeftShiftResult1, mLeftShiftResult2;
|
|
int mRightShift1, mRightShift2;
|
|
int mLeftShiftOut, mRightShiftOut;
|
|
|
|
#ifdef MNN_USE_NEON
|
|
int16x8_t input1OffsetVec, input2OffsetVec;
|
|
int32x4_t outputOffsetVec, outputActivationMinVec, outputActivationMaxVec, leftShiftResult1Vec, leftShiftResult2Vec, input1MultiplierVec, input2MultiplierVec, outputMultiplierVec, leftShiftOutVec, rightShift1Vec, rightShift2Vec;
|
|
#endif
|
|
};
|
|
|
|
} // namespace MNN
|
|
#endif /* CPUQuantizedAdd_hpp */
|