Caffe2 - C++ API
A deep learning, cross platform ML framework
net_dag_utils.h
1 #ifndef CAFFE2_CORE_NET_DAG_UTILS_H_
2 #define CAFFE2_CORE_NET_DAG_UTILS_H_
3 
4 #include <atomic>
5 #include <climits>
6 #include <cstddef>
7 #include <thread> // NOLINT
8 #include <typeinfo>
9 #include <unordered_map>
10 #include <unordered_set>
11 #include <vector>
12 
13 #include "caffe2/core/blob.h"
14 #include "caffe2/core/common.h"
15 #include "caffe2/core/logging.h"
16 #include "caffe2/core/net.h"
17 #include "caffe2/core/observer.h"
18 #include "caffe2/core/operator_schema.h"
19 #include "caffe2/core/registry.h"
20 #include "caffe2/core/tensor.h"
21 #include "caffe2/core/workspace.h"
22 #include "caffe2/proto/caffe2.pb.h"
23 #include "caffe2/utils/simple_queue.h"
24 
25 namespace caffe2 {
26 namespace dag_utils {
27 
28 struct OperatorNode {
29  unique_ptr<OperatorBase> operator_;
30  vector<int> children_;
31  vector<int> parents_;
32  std::atomic<int> runtime_parent_count_;
33  bool is_chain_start_ = false;
34 };
35 
36 struct OpGraphNode {
37  vector<int> children_;
38  vector<int> parents_;
39  int visited_inputs = 0;
40  int num_orig_parents;
41 };
42 
43 using ExecutionChains = std::unordered_map<int, std::vector<int>>;
44 
45 ExecutionChains computeChains(std::vector<OperatorNode>& orig_nodes);
46 
47 ExecutionChains singleChains(std::vector<OperatorNode>& nodes);
48 
49 std::vector<OperatorNode> prepareOperatorNodes(
50  const std::shared_ptr<const NetDef>& net_def,
51  Workspace* ws);
52 
53 std::vector<OpGraphNode> prepareChainGraphNodes(
54  const std::vector<dag_utils::OperatorNode>& operator_nodes,
55  const std::vector<std::vector<int>>& execution_chains);
56 
57 } // namespace dag_utils
58 } // namespace caffe2
59 
60 #endif // CAFFE2_CORE_NET_DAG_UTILS_H_
Workspace is a class that holds all the related objects created during runtime: (1) all blobs...
Definition: workspace.h:47
A global dictionary that holds information about what Caffe2 modules have been loaded in the current ...