forked from sszuev/fastText_java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEvents.java
More file actions
87 lines (73 loc) · 2.29 KB
/
Copy pathEvents.java
File metadata and controls
87 lines (73 loc) · 2.29 KB
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
package cc.fasttext;
import org.apache.commons.lang.StringUtils;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.stream.Collectors;
/**
* Class to measure time of events in runtime to gather statistics.
* TODO: it's temporary and will be removed.
* <p>
* Created by @szuev on 25.12.2017.
*/
public enum Events {
GET_FILE_SIZE,
READ_DICT,
IN_MATRIX_CREATE,
OUT_MATRIX_CREATE,
FILE_SEEK,
DIC_GET_LINE,
TRAIN_CALC,
MODEL_UPDATE,
MODEL_COMPUTE_HIDDEN,
MODEL_LOSS_CALC,
MODEL_GRAD_MUL,
MODEL_INPUT_ADD_ROW,
CREATE_RES_MODEL,
TRAIN,
SAVE_BIN,
ALL;
// disabled by default
private static final boolean DISABLED = !Boolean.parseBoolean(System.getProperty("events", "false"));
private ThreadLocal<Instant> start = new ThreadLocal<>();
private ConcurrentLinkedQueue<Long> times = new ConcurrentLinkedQueue<>();
public static boolean isDisabled() {
return DISABLED;
}
public void start() {
if (DISABLED) return;
Instant now = Instant.now();
if (start.get() != null) throw new IllegalStateException();
start.set(now);
}
public void end() {
if (DISABLED) return;
Instant now = Instant.now();
Instant start = this.start.get();
if (start == null) throw new IllegalStateException();
this.start.set(null);
long time = ChronoUnit.MICROS.between(start, now);
times.add(time);
}
public int size() {
return times.size();
}
public double average() {
return times.stream().mapToDouble(t -> t).average().orElse(Double.NaN) / 1_000_000;
}
public double sum() {
return times.stream().mapToLong(t -> t).sum() / 1_000_000d;
}
@Override
public String toString() {
return StringUtils.rightPad(name(), 40) +
StringUtils.rightPad(String.valueOf(size()), 15) +
StringUtils.rightPad(String.valueOf(average()), 25) +
StringUtils.rightPad(String.valueOf(sum()), 20);
}
public static String print() {
if (DISABLED) return null;
return Arrays.stream(values()).map(Events::toString).collect(Collectors.joining("\n"));
}
}