bench prime: cli arg to pick chan size

This commit is contained in:
Simon Cruanes 2024-09-25 22:54:21 -04:00
parent d4be74c1b7
commit c7f517cc28
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4

View file

@ -14,10 +14,10 @@ let filter' in_chan out_chan prime =
in in
loop () loop ()
let main ~n ~on_prime () : unit = let main ~chan_size ~n ~on_prime () : unit =
let@ runner = Moonpool.Ws_pool.with_ () in let@ runner = Moonpool.Ws_pool.with_ () in
let@ () = Moonpool.Ws_pool.run_wait_block runner in let@ () = Moonpool.Ws_pool.run_wait_block runner in
let primes = ref @@ Moonpool.Chan.create ~max_size:32 () in let primes = ref @@ Moonpool.Chan.create ~max_size:chan_size () in
Moonpool.run_async runner Moonpool.run_async runner
(let chan = !primes in (let chan = !primes in
fun () -> generate' chan); fun () -> generate' chan);
@ -25,7 +25,7 @@ let main ~n ~on_prime () : unit =
for _i = 1 to n do for _i = 1 to n do
let prime = Moonpool.Chan.pop !primes in let prime = Moonpool.Chan.pop !primes in
on_prime prime; on_prime prime;
let filtered_chan = Moonpool.Chan.create ~max_size:32 () in let filtered_chan = Moonpool.Chan.create ~max_size:chan_size () in
Moonpool.run_async runner Moonpool.run_async runner
(let in_chan = !primes in (let in_chan = !primes in
fun () -> filter' in_chan filtered_chan prime); fun () -> filter' in_chan filtered_chan prime);
@ -34,11 +34,13 @@ let main ~n ~on_prime () : unit =
let () = let () =
let n = ref 10_000 in let n = ref 10_000 in
let chan_size = ref 0 in
let time = ref true in let time = ref true in
let opts = let opts =
[ [
"-n", Arg.Set_int n, " number of iterations"; "-n", Arg.Set_int n, " number of iterations";
"--no-time", Arg.Clear time, " do not compute time"; "--no-time", Arg.Clear time, " do not compute time";
"--chan-size", Arg.Set_int chan_size, " channel size";
] ]
|> Arg.align |> Arg.align
in in
@ -48,7 +50,7 @@ let () =
let t_start = Unix.gettimeofday () in let t_start = Unix.gettimeofday () in
let n_primes = Atomic.make 0 in let n_primes = Atomic.make 0 in
main ~n:!n ~on_prime:(fun _ -> Atomic.incr n_primes) (); main ~n:!n ~chan_size:!chan_size ~on_prime:(fun _ -> Atomic.incr n_primes) ();
let elapsed : float = Unix.gettimeofday () -. t_start in let elapsed : float = Unix.gettimeofday () -. t_start in
Printf.printf "computed %d primes%s\n%!" (Atomic.get n_primes) Printf.printf "computed %d primes%s\n%!" (Atomic.get n_primes)