Multicore_bench.Times
Recording timings of benchmarks running on multiple domains in parallel and producing metrics from the recorded timings.
Represents a record of elapsed times of multiple runs of a benchmark running on multiple domains.
val record :
budgetf:float ->
n_domains:int ->
?ensure_multi_domain:bool ->
?domain_local_await:[< `Busy_wait | `Neglect Busy_wait ] ->
?n_warmups:int ->
?n_runs_min:int ->
?n_runs_max:int ->
?before:(unit -> unit) ->
init:(int -> 's) ->
?wrap:(int -> 's -> (unit -> unit) -> unit) ->
work:(int -> 's -> unit) ->
?after:(unit -> unit) ->
unit ->
t
record ~budgetf ~n_domains ~init ~work ()
essentially repeatedly runs let x = init i in wrap i x (fun () -> .. work i x ..)
on specified number of domains, i ∊ [0, n_domains-1]
, and records the times that calls of work
take. The calls of work
are synchronized to start as simultaneously as possible.
Optional arguments:
~ensure_multi_domain
: Whether to run an extra busy untimed domain when n_domains
is 1
. Doing so prevents the OCaml runtime from using specialized runtime implementations. Defaults to true
.~domain_local_await
: Specifies whether and how to configure domain-local-await or DLA. `Neglect
does not reconfigure DLA. `Busy_wait
configures DLA to use a busy-wait implementation, which prevents domains from going to sleep. Defaults to `Busy_wait
.~n_warmups
: Specifies the number of warmup runs to perform before the actual measurements. Defaults to 3
.~n_runs_min
: Specifies the minimum number of timed runs. The upper bound is determined dynamically based on budgetf
. Defaults to 7
.~n_runs_max
: Specifies the maximum number of timed runs. Defaults to 1023
.~before
: Specifies an action to run on one domain before init
.~after
: Specifies an action to run on one domain after work
.val to_thruput_metrics :
n:int ->
singular:string ->
?plural:string ->
config:string ->
?unit_of_time:Unit_of_time.t ->
?unit_of_rate:Unit_of_rate.t ->
t ->
Metric.t list
to_thruput_metrics ~n ~singular ~config times
produces a pair of metrics from the recorded times
where one metric is for the time a single operation takes and the other is the thruput of operations over all domains.
Optional arguments:
~plural
: Plural for the operation. Defaults to singular + "s"
.~unit_of_time
: Unit of time for the duration of a single operation. Defaults to `ns
.~unit_of_rate
: Unit of rate for the number of operations per second. Defaults to `M
.