[VPU] Change data structure in processTrivialCases method (#4250)

* [VPU] Fix PR #4060

* [VPU] Review fixes
This commit is contained in:
Andrew Bakalin authored and GitHub committed 2021-02-16 14:39:56 +03:00
1 parent 185aaacc07
commit 0a36e4e810
1 file changed
+18 -15
@@ -380,27 +380,30 @@ void FrontEnd::parseLayer(const Model& model, const ie::CNNLayerPtr& layer, cons
}
void FrontEnd::processTrivialCases(const Model& model) {
std::unordered_map<ie::DataPtr, DataVector> ieToVpuDataVector;
std::unordered_map<ie::DataPtr, std::pair<Data, Data>> ieDataToTrivialCase;
for (const auto& data : model->datas()) {
const auto& origData = data->origData();
if (origData != nullptr) {
ieToVpuDataVector[origData].push_back(data);
if (origData == nullptr) {
continue;
}
auto& trivialCase = ieDataToTrivialCase[origData];
auto& destination = data->usage() == DataUsage::Output ? trivialCase.second : trivialCase.first;
VPU_THROW_UNLESS(ieDataToTrivialCase.count(origData) == 0 || destination == nullptr,
"Encountered IE data object {} which has two vpu data objects {} and {} of the same type {} associated with it, while only one is permitted",
origData->getName(), destination->name(), data->name(), destination->usage());
destination = data;
}
std::vector<DataVector> trivialCases;
for (const auto& dataObjectsWithTheSameOrigData : ieToVpuDataVector) {
if (dataObjectsWithTheSameOrigData.second.size() > 1) {
VPU_THROW_UNLESS(dataObjectsWithTheSameOrigData.second.size() == 2,
"There can't be more than two data objects associated with the same original IE data object with name {}",
dataObjectsWithTheSameOrigData.first->getName());
trivialCases.push_back(dataObjectsWithTheSameOrigData.second);
}
}
for (const auto& trivialCase : ieDataToTrivialCase) {
const auto& trivialCasePair = trivialCase.second;
for (const auto& trivialCase : trivialCases) {
const auto& unconnectedOutput = trivialCase.front()->usage() == DataUsage::Output ? trivialCase.front() : trivialCase.back();
const auto& unconnectedInput = unconnectedOutput == trivialCase.front() ? trivialCase.back() : trivialCase.front();
const auto& unconnectedInput = trivialCasePair.first;
const auto& unconnectedOutput = trivialCasePair.second;
if (!unconnectedInput || !unconnectedOutput) {
continue;
}
_stageBuilder->addCopyStage(
model,