forked from openbigdatagroup/psvm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
timer.h
132 lines (103 loc) · 3.52 KB
/
timer.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
Copyright 2007 Google Inc.
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.
*/
#ifndef TIMER_H__
#define TIMER_H__
#include <string>
using std::string;
namespace psvm {
// Records the total time, computational time, and communicational time between
// Start() and Stop(). Typical use sample:
// Timer t1;
// t1.Start();
// ...
// t1.Stop();
//
// Users should Call communicationStart() and CommunicationStop() at the
// start and stop point of communication, this will make sure the
// communication time is reliable.
class Timer {
public:
Timer();
// Gets current time
static double GetCurrentTime();
// Sets start and stop timing points
void Start();
void Stop();
// Sets start and stop communication timing points
static void CommunicationStart();
static void CommunicationStop();
// Sets start and stop synchronization timing points
static void SynchronizationStart();
static void SynchronizationStop();
// Add the time Timer t contains to me
void Add(const Timer &t);
// Minus the time Timer t contains from me
void Minus(const Timer &t);
// Gets time statistics (total, computation, communication)
double total() const {return total_;}
double communication() const {return communication_;}
double computation() const {return computation_;}
double sync() const {return sync_;}
string PrintInfo() const;
private:
// The start time of timing
double start_;
// The communication time elapsed when Start() is called
double communication_start_;
// The synchronization time elapsed when Start() is called
double sync_start_;
// Total time between Start() and Stop()
double total_;
// Total computation time between Start() and Stop()
double computation_;
// Total communicational time between Start() and Stop()
double communication_;
// Total synchronization time between Start() and Stop()
double sync_;
// The total communication time from Start() is called
static double communication_elapsed_;
// The total synchronization time from Start() is called
static double sync_elapsed_;
// The time when the last communication begins
static double last_communication_begin_time_;
// The time when the last communication begins
static double last_sync_begin_time_;
};
struct TrainingTimeProfile {
static Timer total; // total training time
// Global timming variables for SVM
static Timer read_doc; // reading document
static Timer train_model; // traing time
static Timer store_model; // store resulting model
// The major parts in training phase
static Timer icf; // ICF factorization
static Timer ipm; // IPM
static Timer compute_b; // computing $b$
// IPM details
static Timer surrogate_gap;
static Timer partial_z;
static Timer check_stop;
static Timer production;
static Timer cf;
static Timer update_variables;
static Timer check_sv; // check support vector
static Timer ipm_misc;
};
struct PredictingTimeProfile {
static Timer total;
static Timer read_model;
static Timer read_test_doc;
static Timer predict;
};
}
#endif