Files
openvino/inference-engine/tests_deprecated/unit/engines/vpu/eliminate_copy_tests.cpp
T

95 lines
3.1 KiB
C++

// Copyright (C) 2018-2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include <vpu/stages/mx_stage.hpp>
#include <vpu/middleend/hw/utility.hpp>
#include "graph_transformer_tests.hpp"
using namespace vpu;
using VPU_EliminateCopyTest = GraphTransformerTest;
TEST_F(VPU_EliminateCopyTest, OneInputTwoConcats) {
InitCompileEnv();
auto model = CreateModel();
auto input = model->addInputData(
"Input",
DataDesc(DataType::FP16, DimsOrder::NCHW, {16, 16, 3, 1}));
model->attrs().set<int>("numInputs", 1);
auto output1 = model->addOutputData(
"Output1",
DataDesc(DataType::FP16, DimsOrder::NCHW, {16, 16, 4, 1}));
auto output2 = model->addOutputData(
"Output2",
DataDesc(DataType::FP16, DimsOrder::NCHW, {16, 16, 4, 1}));
model->attrs().set<int>("numOutputs", 2);
auto outputCopy1 = model->duplicateData(output1, "copy");
auto outputCopy2 = model->duplicateData(output2, "copy");
stageBuilder->addCopyStage(model, outputCopy1->name(), nullptr, outputCopy1, output1, "test1");
stageBuilder->addCopyStage(model, outputCopy2->name(), nullptr, outputCopy2, output2, "test2");
auto data1 = model->addNewData(
"data1",
DataDesc(DataType::FP16, DimsOrder::NCHW, {16, 16, 3, 1}));
auto fake = model->addFakeData();
auto hwStage = model->addNewStage<MyriadXHwStage>(
"HW",
StageType::MyriadXHwOp,
nullptr,
{input, fake, fake, fake},
{data1});
hwStage->attrs().set<HwOpType>("hwOpType", HwOpType::POOL);
auto data2 = model->addNewData(
"data2",
DataDesc(DataType::FP16, DimsOrder::NCHW, {16, 16, 1, 1}));
auto data3 = model->addNewData(
"data3",
DataDesc(DataType::FP16, DimsOrder::NCHW, {16, 16, 1, 1}));
stageBuilder->addConcatStage(
model,
"Concat1",
nullptr,
Dim::C,
{data1, data2},
outputCopy1);
stageBuilder->addConcatStage(
model,
"Concat2",
nullptr,
Dim::C,
{data1, data3},
outputCopy2);
PassSet pipeline;
pipeline.addPass(passManager->dumpModel("initial"));
pipeline.addPass(passManager->adjustDataLayout());
pipeline.addPass(passManager->dumpModel("adjustDataLayout"));
pipeline.addPass(passManager->processSpecialStages());
pipeline.addPass(passManager->dumpModel("processSpecialStages"));
pipeline.addPass(passManager->adjustDataLocation());
pipeline.addPass(passManager->dumpModel("adjustDataLocation"));
pipeline.addPass(passManager->eliminateCopyStages());
pipeline.addPass(passManager->dumpModel("eliminateCopyStages"));
pipeline.addPass(passManager->finalCheck());
pipeline.run(model);
const auto& hwOutput = hwStage->output(0);
ASSERT_NE(hwOutput->parentDataToDataEdge(), nullptr);
ASSERT_EQ(hwOutput->parentData(), outputCopy1);
ASSERT_EQ(hwOutput->numConsumers(), 2);
ASSERT_TRUE(contains(hwOutput->consumers(), [](const Stage& stage) { return stage->type() == StageType::StubConcat; }));
ASSERT_TRUE(contains(hwOutput->consumers(), [](const Stage& stage) { return stage->type() == StageType::Copy; }));
}