1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include <vpu/sw/post_op_stage.hpp>
9 #include <vpu/model/edges.hpp>
10 #include <vpu/model/data.hpp>
14 void PostOpStage::propagateDataOrderImpl(StageDataInfo<DimsOrder>& orderInfo) {
15 auto input = inputEdge(0)->input();
17 auto inDimsOrder = input->desc().dimsOrder();
19 orderInfo.setOutput(outputEdge(0), inDimsOrder);
22 void PostOpStage::getDataStridesRequirementsImpl(StageDataInfo<StridesRequirement>& stridesInfo) {
23 auto input = inputEdge(0)->input();
25 StridesRequirement reqs;
26 reqs.add(2, DimStride::Compact);
28 stridesInfo.setInput(inputEdge(0), reqs);
29 stridesInfo.setOutput(outputEdge(0), reqs);
32 void PostOpStage::finalizeDataLayoutImpl() {
35 void PostOpStage::getBatchSupportInfoImpl(StageDataInfo<BatchSupport>& /*batchInfo*/) {
38 StageSHAVEsRequirements PostOpStage::getSHAVEsRequirementsImpl() const {
39 // TODO: more SHAVEs leads to hang on public MTCNN network with U8 input
40 return StageSHAVEsRequirements::TwoOrOne;
43 void PostOpStage::initialCheckImpl() const {
44 IE_ASSERT(numInputs() > 0);
45 IE_ASSERT(numOutputs() == 1);
46 assertAllInputsOutputsTypes(this, DataType::FP16, DataType::FP16);
49 void PostOpStage::serializeDataImpl(BlobSerializer& serializer) const {
50 auto input = inputEdge(0)->input();
51 auto output = outputEdge(0)->output();
53 input->serializeNewBuffer(serializer);
54 output->serializeNewBuffer(serializer);
56 for (int i = 1; i < numInputs(); ++i) {
57 this->input(i)->serializeNewBuffer(serializer);