[CPU] Fixed quantization post op memory leak (#2101)

This commit is contained in:
Gorokhov Dmitriy 2020-09-09 18:59:37 +03:00 committed by GitHub
parent b3829c58a8
commit d78fd196e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 8 deletions

View File

@ -525,7 +525,17 @@ void MKLDNNQuantizeNode::execute(mkldnn::stream strm) {
}
void MKLDNNQuantizeNode::appendPostOps(mkldnn::post_ops& ops) {
ops.append_quantization(quantizeAlgorithm , cropLow, cropHigh, inputScale, inputShift, outputScale, outputShift);
if (!isPostOpDataInitialized) {
isPostOpDataInitialized = true;
cropLowData.set(cropLow.size(), 1 << 1, &cropLow[0]);
cropHighData.set(cropHigh.size(), 1 << 1, &cropHigh[0]);
inputScaleData.set(inputScale.size(), 1 << 1, &inputScale[0]);
inputShiftData.set(inputShift.size(), 1 << 1, &inputShift[0]);
outputScaleData.set(outputScale.size(), 1 << 1, &outputScale[0]);
outputShiftData.set(outputShift.size(), 1 << 1, &outputShift[0]);
}
ops.append_quantization(quantizeAlgorithm, &cropLowData, &cropHighData, &inputScaleData, &inputShiftData, &outputScaleData, &outputShiftData);
}
bool MKLDNNQuantizeNode::created() const {

View File

@ -10,6 +10,7 @@
#include <memory>
#include <vector>
#include <utility>
#include <primitive_attr.hpp>
namespace MKLDNNPlugin {
@ -41,12 +42,12 @@ public:
const std::vector<float>& getOutputScale() const { return outputScale; }
const std::vector<float>& getOutputShift() const { return outputShift; }
void setCropLow(std::vector<float> newCropLow) { cropLow = std::move(newCropLow); }
void setCropHigh(std::vector<float> newCropHigh) { cropHigh = std::move(newCropHigh); }
void setInputScale(std::vector<float> newInputScale) { inputScale = std::move(newInputScale); }
void setInputShift(std::vector<float> newInputShift) { inputShift = std::move(newInputShift); }
void setOutputScale(std::vector<float> newOutputScale) { outputScale = std::move(newOutputScale); }
void setOutputShift(std::vector<float> newOutputShift) { outputShift = std::move(newOutputShift); }
void setCropLow(std::vector<float> newCropLow) { cropLow = std::move(newCropLow); isPostOpDataInitialized = false; }
void setCropHigh(std::vector<float> newCropHigh) { cropHigh = std::move(newCropHigh); isPostOpDataInitialized = false; }
void setInputScale(std::vector<float> newInputScale) { inputScale = std::move(newInputScale); isPostOpDataInitialized = false; }
void setInputShift(std::vector<float> newInputShift) { inputShift = std::move(newInputShift); isPostOpDataInitialized = false; }
void setOutputScale(std::vector<float> newOutputScale) { outputScale = std::move(newOutputScale); isPostOpDataInitialized = false;}
void setOutputShift(std::vector<float> newOutputShift) { outputShift = std::move(newOutputShift); isPostOpDataInitialized = false; }
bool isInputLowBroadcast() const { return isInputLowBroadcasted; }
bool isInputHighBroadcast() const { return isInputHighBroadcasted; }
@ -74,6 +75,15 @@ private:
std::vector<float> outputScale;
std::vector<float> outputShift;
// mkldnn style post ops data representation
bool isPostOpDataInitialized = false;
mkldnn::impl::shifts_t<float> cropLowData;
mkldnn::impl::shifts_t<float> cropHighData;
mkldnn::impl::scales_t inputScaleData;
mkldnn::impl::shifts_t<float> inputShiftData;
mkldnn::impl::scales_t outputScaleData;
mkldnn::impl::shifts_t<float> outputShiftData;
bool isInputLowBroadcasted = false;
bool isInputHighBroadcasted = false;
bool isOutputLowBroadcasted = false;

@ -1 +1 @@
Subproject commit 683bea673b4e510eb150e4b338aeeeb366ba17f6
Subproject commit 6547f0b6aac2725bd4e36197e19fb1a6f2ee2f51