mirror of
https://github.com/c-cube/moonpool.git
synced 2025-12-06 11:15:38 -05:00
bench prime: cli arg to pick chan size
This commit is contained in:
parent
d4be74c1b7
commit
c7f517cc28
1 changed files with 6 additions and 4 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue