nndeploy C++ API  0.2.0
nndeploy C++ API
util.h
Go to the documentation of this file.
1 
2 #ifndef _NNDEPLOY_NET_UTIL_H_
3 #define _NNDEPLOY_NET_UTIL_H_
4 
5 #include "nndeploy/base/common.h"
7 #include "nndeploy/base/log.h"
8 #include "nndeploy/base/macro.h"
9 #include "nndeploy/base/object.h"
10 #include "nndeploy/base/status.h"
11 #include "nndeploy/base/string.h"
12 #include "nndeploy/device/tensor.h"
13 #include "nndeploy/op/op.h"
14 
15 namespace nndeploy {
16 namespace net {
17 
19  public:
22  std::string name_;
23  std::vector<OpWrapper *> predecessors_;
24  std::vector<OpWrapper *> successors_;
26 };
27 
29  kInput = 0,
30  kOutput = 1,
31  kBoth = 2,
32  kNone = 3,
33 };
34 
36  public:
38  bool is_weight_ = false;
40  std::string name_;
41  std::vector<OpWrapper *> producers_;
42  std::vector<OpWrapper *> consumers_;
43  InputOutputType input_output_type_ = kNone;
44 };
45 
47  std::vector<TensorWrapper *> &tensor_repository,
48  const std::string &tensor_name);
50  std::vector<TensorWrapper *> &tensor_repository,
51  const std::string &tensor_name);
53  std::vector<TensorWrapper *> &tensor_repository, device::Tensor *tensor);
54 NNDEPLOY_CC_API std::vector<TensorWrapper *> findStartTensors(
55  std::vector<TensorWrapper *> &tensor_repository);
56 NNDEPLOY_CC_API std::vector<TensorWrapper *> findEndTensors(
57  std::vector<TensorWrapper *> &tensor_repository);
58 
59 NNDEPLOY_CC_API op::Op *getOp(std::vector<OpWrapper *> &op_repository,
60  const std::string &name);
62  std::vector<OpWrapper *> &op_repository, const std::string &name);
64  std::vector<OpWrapper *> &op_repository, op::Op *node);
65 NNDEPLOY_CC_API std::vector<OpWrapper *> findStartOps(
66  std::vector<OpWrapper *> &op_repository);
67 NNDEPLOY_CC_API std::vector<OpWrapper *> findEndOps(
68  std::vector<OpWrapper *> &op_repository);
69 
70 NNDEPLOY_CC_API base::Status setColor(std::vector<OpWrapper *> &op_repository,
71  base::NodeColorType color);
72 
73 base::Status dumpNet(std::vector<TensorWrapper *> &tensor_repository,
74  std::vector<OpWrapper *> &op_repository,
75  std::vector<device::Tensor *> &graph_inputs,
76  std::vector<device::Tensor *> &graph_outputs,
77  const std::string &name, std::ostream &oss);
78 
79 std::vector<OpWrapper *> checkUnuseOp(std::vector<OpWrapper *> &op_repository);
80 std::vector<TensorWrapper *> checkUnuseTensor(
81  std::vector<OpWrapper *> &op_repository,
82  std::vector<TensorWrapper *> &tensor_repository);
83 
84 base::Status topoSortBFS(std::vector<OpWrapper *> &op_repository,
85  std::vector<OpWrapper *> &topo_sort_node);
86 
87 base::Status topoSortDFS(std::vector<OpWrapper *> &op_repository,
88  std::vector<OpWrapper *> &topo_sort_node);
89 
90 base::Status topoSort(std::vector<OpWrapper *> &op_repository,
91  base::TopoSortType topo_sort_type,
92  std::vector<OpWrapper *> &topo_sort_node);
93 
94 bool checkTensor(const std::vector<device::Tensor *> &src_tensors,
95  const std::vector<device::Tensor *> &dst_tensors);
96 
97 void printNetInfo(const std::vector<OpWrapper *> &op_repository,
98  const std::vector<TensorWrapper *> &tensor_repository);
99 
106 template <typename T>
107 void insertUnique(std::vector<T> &vec, const T &val) {
108  if (std::find(vec.begin(), vec.end(), val) == vec.end()) {
109  vec.emplace_back(val);
110  }
111 }
112 
113 } // namespace net
114 } // namespace nndeploy
115 
116 #endif /* _NNDEPLOY_DAG_UTIL_H_ */
std::vector< OpWrapper * > successors_
Definition: util.h:24
std::vector< OpWrapper * > predecessors_
Definition: util.h:23
std::string name_
Definition: util.h:22
std::vector< OpWrapper * > producers_
Definition: util.h:41
std::vector< OpWrapper * > consumers_
Definition: util.h:42
device::Tensor * tensor_
Definition: util.h:39
Op的基类
Definition: op.h:42
#define NNDEPLOY_CC_API
api
Definition: macro.h:29
@ kNodeColorWhite
Definition: common.h:372
base::Status setColor(std::vector< OpWrapper * > &op_repository, base::NodeColorType color)
base::Status dumpNet(std::vector< TensorWrapper * > &tensor_repository, std::vector< OpWrapper * > &op_repository, std::vector< device::Tensor * > &graph_inputs, std::vector< device::Tensor * > &graph_outputs, const std::string &name, std::ostream &oss)
std::vector< OpWrapper * > checkUnuseOp(std::vector< OpWrapper * > &op_repository)
std::vector< TensorWrapper * > findStartTensors(std::vector< TensorWrapper * > &tensor_repository)
void printNetInfo(const std::vector< OpWrapper * > &op_repository, const std::vector< TensorWrapper * > &tensor_repository)
std::vector< TensorWrapper * > findEndTensors(std::vector< TensorWrapper * > &tensor_repository)
std::vector< OpWrapper * > findEndOps(std::vector< OpWrapper * > &op_repository)
InputOutputType
Definition: util.h:28
@ kInput
Definition: util.h:29
@ kOutput
Definition: util.h:30
void insertUnique(std::vector< T > &vec, const T &val)
对vector插入不在vector中的元素,即类似集合的作用
Definition: util.h:107
OpWrapper * findOpWrapper(std::vector< OpWrapper * > &op_repository, const std::string &name)
TensorWrapper * findTensorWrapper(std::vector< TensorWrapper * > &tensor_repository, const std::string &tensor_name)
base::Status topoSortBFS(std::vector< OpWrapper * > &op_repository, std::vector< OpWrapper * > &topo_sort_node)
op::Op * getOp(std::vector< OpWrapper * > &op_repository, const std::string &name)
std::vector< TensorWrapper * > checkUnuseTensor(std::vector< OpWrapper * > &op_repository, std::vector< TensorWrapper * > &tensor_repository)
bool checkTensor(const std::vector< device::Tensor * > &src_tensors, const std::vector< device::Tensor * > &dst_tensors)
std::vector< OpWrapper * > findStartOps(std::vector< OpWrapper * > &op_repository)
base::Status topoSort(std::vector< OpWrapper * > &op_repository, base::TopoSortType topo_sort_type, std::vector< OpWrapper * > &topo_sort_node)
device::Tensor * getTensor(std::vector< TensorWrapper * > &tensor_repository, const std::string &tensor_name)
base::Status topoSortDFS(std::vector< OpWrapper * > &op_repository, std::vector< OpWrapper * > &topo_sort_node)