[VPU] Change data structure in processTrivialCases method (#4250)
* [VPU] Fix PR #4060 * [VPU] Review fixes
This commit is contained in:
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,
|
||||
|
||||
Reference in new issue
Block a user