Caffe2 - C++ API
A deep learning, cross platform ML framework
time_observer.h
1 #ifndef CAFFE2_CONTRIB_OBSERVERS_TIME_OBSERVER_H_
2 #define CAFFE2_CONTRIB_OBSERVERS_TIME_OBSERVER_H_
3 
4 #include <unordered_map>
5 
6 #include "caffe2/core/common.h"
7 #include "caffe2/core/net.h"
8 #include "caffe2/core/observer.h"
9 #include "caffe2/core/operator.h"
10 #include "caffe2/core/timer.h"
11 #include "caffe2/observers/operator_attaching_net_observer.h"
12 
13 namespace caffe2 {
14 
15 class TimeObserver;
16 
17 class CAFFE2_API TimeCounter {
18  public:
19  explicit TimeCounter() {}
20  inline float average_time() const {
21  return total_time_ / iterations_;
22  }
23 
24  protected:
25  Timer timer_;
26  float start_time_ = 0.0f;
27  float total_time_ = 0.0f;
28  int iterations_ = 0;
29 };
30 
31 class CAFFE2_API TimeOperatorObserver final : public TimeCounter,
32  public ObserverBase<OperatorBase> {
33  public:
34  explicit TimeOperatorObserver(OperatorBase* subject) = delete;
35  explicit TimeOperatorObserver(
36  OperatorBase* subject,
37  TimeObserver* /* unused */)
38  : ObserverBase<OperatorBase>(subject) {}
39  std::unique_ptr<ObserverBase<OperatorBase>> rnnCopy(
40  OperatorBase* subject,
41  int rnn_order) const override;
42 
43  private:
44  void Start() override;
45  void Stop() override;
46 };
47 
48 class CAFFE2_API TimeObserver final
49  : public TimeCounter,
50  public OperatorAttachingNetObserver<TimeOperatorObserver, TimeObserver> {
51  public:
52  explicit TimeObserver(NetBase* subject)
54  subject,
55  this) {}
56 
57  float average_time_children() const {
58  float sum = 0.0f;
59  for (const auto* observer : operator_observers_) {
60  sum += observer->average_time();
61  }
62  return sum / subject_->GetOperators().size();
63  }
64 
65  private:
66  void Start() override;
67  void Stop() override;
68 };
69 
70 } // namespace caffe2
71 
72 #endif // CAFFE2_CONTRIB_OBSERVERS_TIME_OBSERVER_H_
Use this to implement a Observer using the Observer Pattern template.
Definition: observer.h:15
A global dictionary that holds information about what Caffe2 modules have been loaded in the current ...
Definition: blob.h:13
A simple timer object for measuring time.
Definition: timer.h:16