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
//! Per-instruction profiling for the rival machine.
//!
//! Rival's evaluator exposes profiling data via [`Execution`] records,
//! which can be accessed via [`Machine::execution_records`](crate::Machine::execution_records)
//! or [`Machine::take_executions`](crate::Machine::take_executions).
/// A single recorded execution of a Rival interval operator.
///
/// Each execution corresponds to a single interval operator being executed.
/// The [`name`](Execution::name) names the operator, except the special
/// name `"adjust"`, in which case it refers to an internal precision-tuning
/// pass.
/// The [`number`](Execution::number) gives its position in the compiled
/// instruction sequence; this allows disambiguating if an expression contains,
/// say, multiple addition operations.
/// The [`precision`](Execution::precision) is the working precision in bits
/// that the operator was executed at,
/// the [`time_ms`](Execution::time_ms) is the time, in milliseconds, that
/// the execution took,
/// and the [`iteration`](Execution::iteration) records which sampling
/// iteration triggered the execution.
///
/// Note that, because Rival executes the register machine multiple times,
/// the same operator (with the same name and number) can appear multiple
/// times for a single point. On the other hand, in some iterations Rival
/// might skip some operators, if the precision is unchanged from previous
/// iterations, so not every operator may show up in the executions list
/// the same number of times.
pub