`Multicore_bench.Util`

Utilities for creating benchmarks.

⚠️ In the future we expect to regroup these utilities under different modules and deprecate them in this module.

A multiplier depending various factors such as whether we are running on a 32- or 64-bit machine (1x/10x), bytecode or native (1x/10x), and whether we are running on single-core or multicore OCaml (1x/10x).

`alloc ~batch n`

tries to decrement the specified atomic variable `n`

by at most the optional amount `~batch`

and not beyond `n`

having value `0`

. Returns the amount by which `n`

was decremented, which is `0`

only in case `n`

is `0`

.

`cross xs ys`

returns a list formed by pairing each element of `xs`

with each element of `ys`

.

For example:

```
# Util.cross [1; 2; 3] ["a"; "b"]
- : (int * string) list =
[(1, "a"); (1, "b"); (2, "a"); (2, "b"); (3, "a"); (3, "b")]
```

`module Bits : sig ... end`

A minimalistic bitset data structure.

```
val generate_push_and_pop_sequence :
?state:Stdlib.Random.State.t ->
int ->
Bits.t
```

`generate_push_and_pop_sequence n`

generates a bitset where each `true`

bit represents a "push" operation and each `false`

bit represents a "try_pop" operation. Performing the operations on an initially empty dispenser leaves the dispenser empty. The sequence may include "try_pop" operations at points where the dispenser will be empty.