diff --git a/src/lib_shell_benchmarks/encoding_benchmarks.ml b/src/lib_shell_benchmarks/encoding_benchmarks.ml index 009c6ec66f06d5c6a9c258f9f20e97d416a8dab1..5411a2548dc30154751f4d742edc71d4a7dac95f 100644 --- a/src/lib_shell_benchmarks/encoding_benchmarks.ml +++ b/src/lib_shell_benchmarks/encoding_benchmarks.ml @@ -295,6 +295,16 @@ let nat_decoding = let () = Registration.register_simple_with_num nat_decoding +let nat_decoding_intercept = + make_decode_variable_size + ~name:"DECODING_NAT" + ~encoding:Data_encoding.n + ~intercept:true + ~generator:(fun _ -> (Z.zero, {bytes = 0})) + () + +let () = Registration.register_simple_with_num nat_decoding_intercept + let int_encoding = make_encode_variable_size ~name:"ENCODING_INT" @@ -323,6 +333,16 @@ let int_decoding = let () = Registration.register_simple_with_num int_decoding +let int_decoding_intercept = + make_decode_variable_size + ~name:"DECODING_INT" + ~encoding:Data_encoding.z + ~intercept:true + ~generator:(fun _ -> (Z.zero, {bytes = 0})) + () + +let () = Registration.register_simple_with_num int_decoding_intercept + let string_encoding = make_encode_variable_size ~name:"ENCODING_STRING" diff --git a/src/lib_shell_benchmarks/encoding_benchmarks_helpers.ml b/src/lib_shell_benchmarks/encoding_benchmarks_helpers.ml index 0f8b701848775fcc5f34de45beeb9414fa3e9b02..b40842e120b40d9979db9d59d0c0c6fddd2a9e92 100644 --- a/src/lib_shell_benchmarks/encoding_benchmarks_helpers.ml +++ b/src/lib_shell_benchmarks/encoding_benchmarks_helpers.ml @@ -106,7 +106,8 @@ struct (module Bench : Benchmark.Simple_with_num) (* Generic function to cook benchmarks for linear-time encodings *) - let linear_shared ?(check = fun () -> ()) ~name ~generator ~make_bench () = + let linear_shared ?(check = fun () -> ()) ~name ?(intercept = false) + ~generator ~make_bench () = let const = fv (Format.asprintf "%s_const" name) in let coeff = fv (Format.asprintf "%s_coeff" name) in let model = @@ -115,9 +116,15 @@ struct ~model:(Model.affine ~name:(ns name) ~intercept:const ~coeff) in let module Bench : Benchmark.Simple_with_num = struct - let name = ns name + let name = + if intercept then Namespace.make ns name "intercept" else ns name - let info = Format.asprintf "Benchmarking %a" Namespace.pp name + let info = + Format.asprintf + "Benchmarking %a%s" + Namespace.pp + name + (if intercept then " (intercept case)" else "") let module_filename = Info.file @@ -223,13 +230,18 @@ struct generator:(Random.State.t -> a * Shared_linear.workload) -> unit -> (module Benchmark.Simple_with_num) = - fun ?check ~name ~encoding ~generator -> - linear_shared ?check ~name ~generator ~make_bench:(fun generator () -> + fun ?check ~name ~encoding ~generator () -> + linear_shared + ?check + ~name + ~generator + ~make_bench:(fun generator () -> let generated, workload = generator () in let closure () = ignore (Data_encoding.Binary.to_bytes_exn encoding generated) in Generator.Plain {workload; closure}) + () let make_decode_fixed_size : type a. @@ -253,11 +265,17 @@ struct ?check:(unit -> unit) -> name:string -> encoding:a Data_encoding.t -> + ?intercept:bool -> generator:(Random.State.t -> a * Shared_linear.workload) -> unit -> (module Benchmark.Simple_with_num) = - fun ?check ~name ~encoding ~generator -> - linear_shared ?check ~name ~generator ~make_bench:(fun generator () -> + fun ?check ~name ~encoding ?(intercept = false) ~generator -> + linear_shared + ?check + ~name + ~intercept + ~generator + ~make_bench:(fun generator () -> let generated, workload = generator () in let encoded = Data_encoding.Binary.to_bytes_exn encoding generated in let closure () = @@ -304,11 +322,16 @@ struct generator:(Random.State.t -> a * Shared_linear.workload) -> unit -> (module Benchmark.Simple_with_num) = - fun ?check ~name ~to_string ~generator -> - linear_shared ?check ~name ~generator ~make_bench:(fun generator () -> + fun ?check ~name ~to_string ~generator () -> + linear_shared + ?check + ~name + ~generator + ~make_bench:(fun generator () -> let generated, workload = generator () in let closure () = ignore (to_string generated) in Generator.Plain {workload; closure}) + () let make_decode_fixed_size_from_string : type a. @@ -351,12 +374,17 @@ struct generator:(Random.State.t -> a * Shared_linear.workload) -> unit -> (module Benchmark.Simple_with_num) = - fun ?check ~name ~to_string ~from_string ~generator -> - linear_shared ?check ~name ~generator ~make_bench:(fun generator () -> + fun ?check ~name ~to_string ~from_string ~generator () -> + linear_shared + ?check + ~name + ~generator + ~make_bench:(fun generator () -> let generated, workload = generator () in let string = to_string generated in let closure () = ignore (from_string string) in Generator.Plain {workload; closure}) + () let make_decode_variable_size_from_bytes : type a. @@ -367,10 +395,15 @@ struct generator:(Random.State.t -> a * Shared_linear.workload) -> unit -> (module Benchmark.Simple_with_num) = - fun ?check ~name ~to_bytes ~from_bytes ~generator -> - linear_shared ?check ~name ~generator ~make_bench:(fun generator () -> + fun ?check ~name ~to_bytes ~from_bytes ~generator () -> + linear_shared + ?check + ~name + ~generator + ~make_bench:(fun generator () -> let generated, workload = generator () in let string = to_bytes generated in let closure () = ignore (from_bytes string) in Generator.Plain {workload; closure}) + () end