From 3d972cc0cd2f75487907b1036c6f8f7db595f13a Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Wed, 7 Jun 2023 21:03:26 -0400 Subject: [PATCH] add benchs/ with a basic fib test --- benchs/dune | 4 ++++ benchs/fib_rec.ml | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 benchs/dune create mode 100644 benchs/fib_rec.ml diff --git a/benchs/dune b/benchs/dune new file mode 100644 index 00000000..aec7e281 --- /dev/null +++ b/benchs/dune @@ -0,0 +1,4 @@ + +(executables + (names fib_rec) + (libraries moonpool)) diff --git a/benchs/fib_rec.ml b/benchs/fib_rec.ml new file mode 100644 index 00000000..f2904438 --- /dev/null +++ b/benchs/fib_rec.ml @@ -0,0 +1,46 @@ +open Moonpool + +let rec fib_direct x = + if x <= 1 then + 1 + else + fib_direct (x - 1) + fib_direct (x - 2) + +let rec fib ~on x : int Fut.t = + if x <= 20 then + Fut.spawn ~on (fun () -> fib_direct x) + else + let open Fut.Infix_local in + let+ t1 = fib ~on (x - 1) and+ t2 = fib ~on (x - 2) in + t1 + t2 + +let () = assert (List.init 10 fib_direct = [ 1; 1; 2; 3; 5; 8; 13; 21; 34; 55 ]) + +let run ~psize ~n ~seq () : unit = + let res = + if seq then ( + Printf.printf "compute fib %d sequentially\n%!" n; + fib_direct n + ) else ( + Printf.printf "compute fib %d with pool size=%d\n%!" n psize; + let pool = Pool.create ~min:psize () in + fib ~on:pool n |> Fut.wait_block_exn + ) + in + Printf.printf "fib %d = %d\n%!" n res + +let () = + let n = ref 40 in + let psize = ref 16 in + let seq = ref false in + let opts = + [ + "-psize", Arg.Set_int psize, " pool size"; + "-n", Arg.Set_int n, " fib "; + "-seq", Arg.Set seq, " sequential"; + ] + |> Arg.align + in + + Arg.parse opts ignore ""; + run ~psize:!psize ~n:!n ~seq:!seq ()