Publishing 2019 R3 content
[platform/upstream/dldt.git] / inference-engine / src / vpu / graph_transformer / src / sw / post_op_stage.cpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include <vpu/sw/post_op_stage.hpp>
6
7 #include <memory>
8
9 #include <vpu/model/edges.hpp>
10 #include <vpu/model/data.hpp>
11
12 namespace vpu {
13
14 void PostOpStage::propagateDataOrderImpl(StageDataInfo<DimsOrder>& orderInfo) {
15     auto input = inputEdge(0)->input();
16
17     auto inDimsOrder = input->desc().dimsOrder();
18
19     orderInfo.setOutput(outputEdge(0), inDimsOrder);
20 }
21
22 void PostOpStage::getDataStridesRequirementsImpl(StageDataInfo<StridesRequirement>& stridesInfo) {
23     auto input = inputEdge(0)->input();
24
25     StridesRequirement reqs;
26     reqs.add(2, DimStride::Compact);
27
28     stridesInfo.setInput(inputEdge(0), reqs);
29     stridesInfo.setOutput(outputEdge(0), reqs);
30 }
31
32 void PostOpStage::finalizeDataLayoutImpl() {
33 }
34
35 void PostOpStage::getBatchSupportInfoImpl(StageDataInfo<BatchSupport>& /*batchInfo*/) {
36 }
37
38 StageSHAVEsRequirements PostOpStage::getSHAVEsRequirementsImpl() const {
39     // TODO: more SHAVEs leads to hang on public MTCNN network with U8 input
40     return StageSHAVEsRequirements::TwoOrOne;
41 }
42
43 void PostOpStage::initialCheckImpl() const {
44     IE_ASSERT(numInputs() > 0);
45     IE_ASSERT(numOutputs() == 1);
46     assertAllInputsOutputsTypes(this, DataType::FP16, DataType::FP16);
47 }
48
49 void PostOpStage::serializeDataImpl(BlobSerializer& serializer) const {
50     auto input = inputEdge(0)->input();
51     auto output = outputEdge(0)->output();
52
53     input->serializeNewBuffer(serializer);
54     output->serializeNewBuffer(serializer);
55
56     for (int i = 1; i < numInputs(); ++i) {
57         this->input(i)->serializeNewBuffer(serializer);
58     }
59 }
60
61 }  // namespace vpu