[IE][VPU]: Reduces memory consumption by temporary buffers (#2317)

This commit is contained in:
Andrey Sokolov 2020-09-24 12:27:44 +03:00 committed by GitHub
parent 071485b81d
commit cfb6fae2c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 19 additions and 12 deletions

View File

@ -146,6 +146,10 @@ public:
const Stage& stage,
const DataDesc& desc);
StageTempBuffer addTempBuffer(
const Stage& stage,
size_t bufferSize);
void replaceStageInput(
const StageInput& edge,
const Data& newInput);

View File

@ -134,8 +134,8 @@ private:
std::make_shared<ConvIm2ColWeightsContent>(weights->content(), newWeightsDesc));
double im2ColBufSizeF = static_cast<double>(kernelSizeX) * kernelSizeY *
output->desc().dim(Dim::W) * output->desc().dim(Dim::H) * input->desc().dim(Dim::C)
+ 32;
output->desc().dim(Dim::W) * output->desc().dim(Dim::H) * input->desc().dim(Dim::C) * sizeof(int16_t)
+ 64;
if (im2ColBufSizeF >= std::numeric_limits<int>::max()) {
VPU_THROW_EXCEPTION << "stage: " << name() << ", im2col bufferSize cannot fit 32s: "
@ -144,7 +144,7 @@ private:
<< output->desc().dim(Dim::W) << "x" << output->desc().dim(Dim::H) << "x" << output->desc().dim(Dim::C) << ")";
}
model()->addTempBuffer(this, DataDesc({static_cast<int>(im2ColBufSizeF)}));
model()->addTempBuffer(this, static_cast<int>(im2ColBufSizeF));
}
weights->attrs().set<Data>("swWeights", swWeights);

View File

@ -423,6 +423,13 @@ StageDependency ModelObj::addStageDependency(const Stage& stage, const Data& dat
return edge;
}
StageTempBuffer ModelObj::addTempBuffer(
const Stage& stage,
size_t bufferSize) {
auto desc = DataDesc(DataType::U8, DimsOrder::C, {bufferSize});
return addTempBuffer(stage, desc);
}
StageTempBuffer ModelObj::addTempBuffer(
const Stage& stage,
const DataDesc& desc) {

View File

@ -478,9 +478,7 @@ void FrontEnd::parseCustom(const Model& model, const ie::CNNLayerPtr& layer, con
stage->attrs().set("outputOrders", std::move(outputOrders));
int buffer_size = kernel.kernelBinary().length() + 1024;
model->addTempBuffer(
stage,
DataDesc({buffer_size}));
model->addTempBuffer(stage, buffer_size);
}
}

View File

@ -240,7 +240,7 @@ void FrontEnd::parseDetectionOutput(const Model& model, const ie::CNNLayerPtr& l
size_num_priors_actual_buf +
size_temp_data_buf;
model->addTempBuffer(stage, DataDesc({buffer_size}));
model->addTempBuffer(stage, buffer_size);
}
} // namespace vpu

View File

@ -183,9 +183,7 @@ void FrontEnd::parseProposal(const Model& model, const ie::CNNLayerPtr& layer, c
const auto& env = CompileEnv::get();
const int required_cmx_buffer_size = env.resources.numSHAVEs * required_cmx_size_per_shave;
model->addTempBuffer(
stage,
DataDesc({buffer_size + required_cmx_buffer_size}));
model->addTempBuffer(stage, buffer_size + required_cmx_buffer_size);
}
} // namespace vpu

View File

@ -211,7 +211,7 @@ void FrontEnd::parseRNN(const Model& model, const ie::CNNLayerPtr& _layer, const
outputData);
if (nCells > 1)
model->addTempBuffer(stage, DataDesc({stateSize}));
model->addTempBuffer(stage, sizeof(uint16_t) * stateSize);
bool RNNForward = layer->direction == ie::RNNSequenceLayer::FWD;
stage->attrs().set<bool>("RNNForward", RNNForward);

View File

@ -149,7 +149,7 @@ void FrontEnd::parseROIFeatureExtractor(const Model& model, const ie::CNNLayerPt
size_dummy_mapping_buf +
size_repacked_buf;
model->addTempBuffer(stage, DataDesc({buffer_size}));
model->addTempBuffer(stage, buffer_size);
}
} // namespace vpu