subgraph_compute.h 3.3 KB
Newer Older
H
hong19860320 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once

B
barry-ai 已提交
17
#include <map>
H
hong19860320 已提交
18 19 20 21 22
#include <memory>
#include <string>
#include <vector>
#include "NeuronAdapter.h"
#include "lite/core/kernel.h"
23 24
#include "lite/core/subgraph_bridge_registry.h"
#include "lite/core/subgraph_engine_base.h"
H
hong19860320 已提交
25 26 27 28 29 30

namespace paddle {
namespace lite {
namespace kernels {
namespace apu {

B
barry-ai 已提交
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
class DeviceProgram {
 public:
  DeviceProgram() {}
  ~DeviceProgram() {}
  std::string GenerateModelName(
      const std::vector<std::string>& input_names,
      const std::vector<std::string>& output_names,
      const std::vector<std::vector<int64_t>>& origin_idims);
  bool LoadFromCacheFile(const std::vector<std::string>& input_names,
                         const std::vector<std::string>& output_names,
                         const std::vector<std::vector<int64_t>>& origin_idims,
                         const std::string& model_cache_dir);
  bool BuildGraphAndCacheToFile(
      RuntimeProgram* origin_program,
      const std::vector<std::string>& input_names,
      const std::vector<std::string>& output_names,
      const std::vector<std::vector<int64_t>>& origin_idims,
      const std::vector<Tensor*>& origin_itensors,
      const std::vector<Tensor*>& origin_otensors,
      const std::string& model_cache_dir);

 public:
  std::string model_name_{""};
  std::vector<std::vector<int64_t>> origin_odims_;
  std::vector<PrecisionType> origin_otypes_;
  NeuronModel* model_;
  NeuronCompilation* compilation_;
};

60
class SubgraphEngine : public subgraph::SubgraphEngineBase {
H
hong19860320 已提交
61
 public:
B
barry-ai 已提交
62
  SubgraphEngine(KernelContext* ctx,
H
hong19860320 已提交
63
                 int block_idx,
B
barry-ai 已提交
64 65 66 67
                 const std::shared_ptr<const cpp::ProgramDesc>& program_desc,
                 Scope* exec_scope,
                 const std::vector<std::string>& input_names,
                 const std::vector<std::string>& output_names)
68 69 70 71 72 73
      : subgraph::SubgraphEngineBase(ctx,
                                     block_idx,
                                     program_desc,
                                     exec_scope,
                                     input_names,
                                     output_names) {}
H
hong19860320 已提交
74

75 76
  ~SubgraphEngine();

H
hong19860320 已提交
77
 protected:
78 79
  bool BuildDeviceProgram() override;
  bool LaunchDeviceProgram() override;
H
hong19860320 已提交
80

B
barry-ai 已提交
81 82
  std::map<std::vector<std::vector<int64_t>>, std::shared_ptr<DeviceProgram>>
      device_programs_;
H
hong19860320 已提交
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
};

class SubgraphCompute
    : public KernelLite<TARGET(kAPU), PRECISION(kInt8), DATALAYOUT(kNCHW)> {
 public:
  using param_t = operators::SubgraphParam;

  void PrepareForRun() override;

  void Run() override;

  virtual ~SubgraphCompute() = default;

 private:
  std::unique_ptr<SubgraphEngine> engine_;
};

}  // namespace apu
}  // namespace kernels
}  // namespace lite
}  // namespace paddle