Caffe2 - C++ API
A deep learning, cross platform ML framework
profile_observer.h
1 
17 #pragma once
18 
19 #include <unordered_map>
20 
21 #include "caffe2/core/common.h"
22 #include "caffe2/core/context_gpu.h"
23 #include "caffe2/core/event.h"
24 #include "caffe2/core/net.h"
25 #include "caffe2/core/observer.h"
26 #include "caffe2/core/operator.h"
27 #include "caffe2/core/timer.h"
28 #include "caffe2/observers/operator_attaching_net_observer.h"
29 #include "caffe2/operators/rnn/rnn_capable_operator_observer.h"
30 
31 namespace caffe2 {
32 
40 class ProfileObserver;
42  public:
43  explicit ProfileCounter() {}
44 
45  protected:
46  Timer timer_;
47  float start_time_ = 0.0f;
48  float run_time_ = 0.0f;
49  cudaEvent_t start_;
50  cudaEvent_t stop_;
51 };
52 
55  public:
56  explicit ProfileOperatorObserver(OperatorBase* subject) = delete;
57  explicit ProfileOperatorObserver(
58  OperatorBase* subject,
59  ProfileObserver* netObserver)
60  : RNNCapableOperatorObserver(subject), netObserver_(netObserver) {
61  if (subject) {
62  net_position_ = subject->net_position();
63  }
64  }
65  explicit ProfileOperatorObserver(
66  OperatorBase* subject,
67  ProfileObserver* netObserver,
68  int net_position,
69  int rnn_order)
70  : ProfileOperatorObserver(subject, netObserver) {
71  net_position_ = net_position;
72  rnn_order_ = rnn_order;
73  }
74 
75  std::unique_ptr<ObserverBase<OperatorBase>> rnnCopy(
76  OperatorBase* subject,
77  int rnnOrder) const override;
78 
79  void Dump() const;
80 
81  virtual std::string getId() const {
82  std::stringstream ss;
83  ss << net_position_;
84  if (rnn_order_ != OperatorBase::kNoNetPositionSet) {
85  ss << "-" << rnn_order_;
86  }
87  return ss.str();
88  }
89 
90  protected:
91  ProfileObserver* netObserver_;
92  int net_position_; // Needed because this is not visible in RNN Executor
93 
94  private:
95  void Start() override;
96  void Stop() override;
97 };
98 
100  ProfileOperatorObserver,
101  ProfileObserver> {
102  public:
103  explicit ProfileObserver(NetBase* subject)
105  subject,
106  this) {}
107 
108  void Start() override{};
109  void Stop() override{};
110 
111  private:
112  vector<const ProfileOperatorObserver*> operator_observers_;
113 };
114 
115 } // namespace caffe2
A global dictionary that holds information about what Caffe2 modules have been loaded in the current ...
Inherit to make your class observable.
A simple timer object for measuring time.
Definition: timer.h:16