Multicore_bench.TimesRecording 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 ->
trecord ~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 listto_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.