mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-08 04:05:30 -05:00
update benchmarks (ignoring hamt); remove useless old script
This commit is contained in:
parent
a0f3a5d24b
commit
0a7d2a2411
5 changed files with 21 additions and 143 deletions
10
_oasis
10
_oasis
|
|
@ -102,7 +102,7 @@ Executable run_benchs
|
||||||
MainIs: run_benchs.ml
|
MainIs: run_benchs.ml
|
||||||
BuildDepends: containers, qcheck,
|
BuildDepends: containers, qcheck,
|
||||||
containers.data, containers.iter,
|
containers.data, containers.iter,
|
||||||
sequence, gen, benchmark, hamt
|
sequence, gen, benchmark
|
||||||
|
|
||||||
Executable run_bench_hash
|
Executable run_bench_hash
|
||||||
Path: benchs/
|
Path: benchs/
|
||||||
|
|
@ -130,14 +130,6 @@ Test all
|
||||||
TestTools: run_qtest
|
TestTools: run_qtest
|
||||||
Run$: flag(tests) && flag(unix)
|
Run$: flag(tests) && flag(unix)
|
||||||
|
|
||||||
Executable mem_measure
|
|
||||||
Path: benchs/
|
|
||||||
Install: false
|
|
||||||
CompiledObject: native
|
|
||||||
MainIs: mem_measure.ml
|
|
||||||
Build$: flag(bench)
|
|
||||||
BuildDepends: sequence, unix, containers, containers.data, hamt
|
|
||||||
|
|
||||||
Executable id_sexp
|
Executable id_sexp
|
||||||
Path: examples/
|
Path: examples/
|
||||||
Install: false
|
Install: false
|
||||||
|
|
|
||||||
|
|
@ -1,119 +0,0 @@
|
||||||
|
|
||||||
(* goal: measure memory consumption *)
|
|
||||||
|
|
||||||
(* number of words allocated *)
|
|
||||||
let mem_allocated () =
|
|
||||||
let gc = Gc.stat () in
|
|
||||||
gc.Gc.minor_words +. gc.Gc.major_words -. gc.Gc.promoted_words
|
|
||||||
|
|
||||||
(* overhead in memory *)
|
|
||||||
let mem_occupied x = Objsize.size_kb (Obj.repr x)
|
|
||||||
|
|
||||||
type stats = {
|
|
||||||
time: float;
|
|
||||||
occ: int;
|
|
||||||
alloc: float;
|
|
||||||
}
|
|
||||||
|
|
||||||
let measure_time_mem f =
|
|
||||||
let mem_alloc1 = mem_allocated () in
|
|
||||||
let start = Unix.gettimeofday() in
|
|
||||||
let x = f () in
|
|
||||||
let stop = Unix.gettimeofday() in
|
|
||||||
Gc.compact ();
|
|
||||||
let mem_alloc2 = mem_allocated () in
|
|
||||||
let mem_occupied = mem_occupied x in
|
|
||||||
ignore x;
|
|
||||||
{ occ=mem_occupied;
|
|
||||||
alloc=mem_alloc2-.mem_alloc1;
|
|
||||||
time=stop -. start;
|
|
||||||
}
|
|
||||||
|
|
||||||
let spf = Printf.sprintf
|
|
||||||
|
|
||||||
let do_test ~name f =
|
|
||||||
Format.printf "test %s...@." name;
|
|
||||||
let res = measure_time_mem f in
|
|
||||||
Format.printf " allocated:%.2f MB, occupied:%d kB, time: %.2f s@."
|
|
||||||
(res.alloc *. 8. /. 1_000_000.)
|
|
||||||
res.occ
|
|
||||||
res.time
|
|
||||||
|
|
||||||
let test_hashtrie n =
|
|
||||||
let module M = CCHashTrie.Make(CCInt) in
|
|
||||||
do_test ~name:(spf "hashtrie(%d)" n)
|
|
||||||
(fun () ->
|
|
||||||
let m = M.of_seq Sequence.(1 -- n |> map (fun x-> x,x)) in
|
|
||||||
m
|
|
||||||
)
|
|
||||||
|
|
||||||
let test_hamt n =
|
|
||||||
let module M = Hamt.Make'(CCInt) in
|
|
||||||
do_test ~name:(spf "hamt(%d)" n)
|
|
||||||
(fun () ->
|
|
||||||
let m = Sequence.(1 -- n
|
|
||||||
|> map (fun x-> x,x)
|
|
||||||
|> fold (fun m (k,v) -> M.add k v m) M.empty
|
|
||||||
) in
|
|
||||||
m
|
|
||||||
)
|
|
||||||
|
|
||||||
let test_map n =
|
|
||||||
let module M = CCMap.Make(CCInt) in
|
|
||||||
do_test ~name:(spf "map(%d)" n)
|
|
||||||
(fun () ->
|
|
||||||
let m = M.of_seq Sequence.(1 -- n |> map (fun x-> x,x)) in
|
|
||||||
m
|
|
||||||
)
|
|
||||||
|
|
||||||
let test_wbt n =
|
|
||||||
let module M = CCWBTree.Make(CCInt) in
|
|
||||||
do_test ~name:(spf "wbt(%d)" n)
|
|
||||||
(fun () ->
|
|
||||||
let m = M.of_seq Sequence.(1 -- n |> map (fun x-> x,x)) in
|
|
||||||
m
|
|
||||||
)
|
|
||||||
|
|
||||||
let test_hashtbl n =
|
|
||||||
let module H = CCHashtbl.Make(CCInt) in
|
|
||||||
do_test ~name:(spf "hashtbl(%d)" n)
|
|
||||||
(fun () ->
|
|
||||||
let m = H.of_seq Sequence.(1 -- n |> map (fun x-> x,x)) in
|
|
||||||
m
|
|
||||||
)
|
|
||||||
|
|
||||||
let test_intmap n =
|
|
||||||
let module M = CCIntMap in
|
|
||||||
do_test ~name:(spf "intmap(%d)" n)
|
|
||||||
(fun () ->
|
|
||||||
let m = M.of_seq Sequence.(1 -- n |> map (fun x-> x,x)) in
|
|
||||||
m
|
|
||||||
)
|
|
||||||
|
|
||||||
let tests_ =
|
|
||||||
[ "hashtrie", test_hashtrie
|
|
||||||
; "map", test_map
|
|
||||||
; "hamt", test_hamt
|
|
||||||
; "wbt", test_wbt
|
|
||||||
; "hashtbl", test_hashtbl
|
|
||||||
; "intmap", test_intmap
|
|
||||||
]
|
|
||||||
|
|
||||||
let run_test ~n name = List.assoc name tests_ n
|
|
||||||
|
|
||||||
let print_list () =
|
|
||||||
Format.printf "@[<v2>tests:@ [@[%a@]]@]@."
|
|
||||||
CCFormat.(list string) (List.map fst tests_)
|
|
||||||
|
|
||||||
let () =
|
|
||||||
let to_test = ref [] in
|
|
||||||
let n = ref 1_000_000 in
|
|
||||||
let options = Arg.align
|
|
||||||
[ "-n", Arg.Set_int n, " size of the collection"
|
|
||||||
] in
|
|
||||||
Arg.parse options (CCList.Ref.push to_test) "usage: mem_measure [name*]";
|
|
||||||
match !to_test with
|
|
||||||
| [] ->
|
|
||||||
print_list ();
|
|
||||||
exit 0
|
|
||||||
| _ -> List.iter (run_test ~n:!n) (List.rev !to_test)
|
|
||||||
|
|
@ -25,15 +25,15 @@ let rec eq t1 t2 = match t1, t2 with
|
||||||
| Node _, _
|
| Node _, _
|
||||||
| _, Node _ -> false
|
| _, Node _ -> false
|
||||||
|
|
||||||
let rec hash_tree t h = match t with
|
let rec hash_tree t = match t with
|
||||||
| Empty -> CCHash.string "empty" h
|
| Empty -> CCHash.string "empty"
|
||||||
| Node (i, l) ->
|
| Node (i, l) ->
|
||||||
CCHash.list hash_tree l (CCHash.int i (CCHash.string "node" h))
|
CCHash.(combine2 (int i) (list hash_tree l))
|
||||||
|
|
||||||
module H = Hashtbl.Make(struct
|
module H = Hashtbl.Make(struct
|
||||||
type t = tree
|
type t = tree
|
||||||
let equal = eq
|
let equal = eq
|
||||||
let hash = CCHash.apply hash_tree
|
let hash = hash_tree
|
||||||
end)
|
end)
|
||||||
|
|
||||||
let print_hashcons_stats st =
|
let print_hashcons_stats st =
|
||||||
|
|
|
||||||
|
|
@ -558,6 +558,7 @@ module Tbl = struct
|
||||||
end in
|
end in
|
||||||
(module T)
|
(module T)
|
||||||
|
|
||||||
|
(*
|
||||||
let hamt : type a. a key_type -> (module MUT with type key = a)
|
let hamt : type a. a key_type -> (module MUT with type key = a)
|
||||||
= fun k ->
|
= fun k ->
|
||||||
let (module K), name = arg_make k in
|
let (module K), name = arg_make k in
|
||||||
|
|
@ -568,6 +569,7 @@ module Tbl = struct
|
||||||
end in
|
end in
|
||||||
let module U = MUT_OF_IMMUT(T) in
|
let module U = MUT_OF_IMMUT(T) in
|
||||||
(module U)
|
(module U)
|
||||||
|
*)
|
||||||
|
|
||||||
let modules_int =
|
let modules_int =
|
||||||
[ hashtbl_make Int
|
[ hashtbl_make Int
|
||||||
|
|
@ -579,7 +581,7 @@ module Tbl = struct
|
||||||
; flat_hashtbl
|
; flat_hashtbl
|
||||||
; hashtrie Int
|
; hashtrie Int
|
||||||
; hashtrie_mut Int
|
; hashtrie_mut Int
|
||||||
; hamt Int
|
(* ; hamt Int *)
|
||||||
]
|
]
|
||||||
|
|
||||||
let modules_string =
|
let modules_string =
|
||||||
|
|
@ -588,7 +590,7 @@ module Tbl = struct
|
||||||
; wbt Str
|
; wbt Str
|
||||||
; hashtrie Str
|
; hashtrie Str
|
||||||
; persistent_hashtbl Str
|
; persistent_hashtbl Str
|
||||||
; hamt Str
|
(* ; hamt Str *)
|
||||||
; trie
|
; trie
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
9
opam
9
opam
|
|
@ -6,11 +6,9 @@ maintainer: "simon.cruanes@inria.fr"
|
||||||
build: [
|
build: [
|
||||||
["./configure"
|
["./configure"
|
||||||
"--prefix" prefix
|
"--prefix" prefix
|
||||||
"--%{base-threads:enable}%-thread"
|
|
||||||
"--disable-bench"
|
"--disable-bench"
|
||||||
"--disable-tests"
|
"--disable-tests"
|
||||||
"--%{base-bigarray:enable}%-bigarray"
|
"--%{base-bigarray:enable}%-bigarray"
|
||||||
"--%{sequence:enable}%-advanced"
|
|
||||||
"--%{base-unix:enable}%-unix"
|
"--%{base-unix:enable}%-unix"
|
||||||
"--enable-docs"
|
"--enable-docs"
|
||||||
]
|
]
|
||||||
|
|
@ -32,7 +30,12 @@ depends: [
|
||||||
"cppo" {build}
|
"cppo" {build}
|
||||||
"ocamlbuild" {build}
|
"ocamlbuild" {build}
|
||||||
]
|
]
|
||||||
depopts: [ "sequence" "base-bigarray" "base-unix" "base-threads" "qtest" { test } ]
|
depopts: [
|
||||||
|
"base-bigarray"
|
||||||
|
"base-unix"
|
||||||
|
"base-threads"
|
||||||
|
"qtest" { test }
|
||||||
|
]
|
||||||
conflicts: [
|
conflicts: [
|
||||||
"sequence" { < "0.5" }
|
"sequence" { < "0.5" }
|
||||||
"qtest" { < "2.2" }
|
"qtest" { < "2.2" }
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue