X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Ftatoo.ml;h=5e8144da55a55d75ed2f76c3622858c5100a9932;hp=5dec2f69a7b72ed4bc5f40cc68c32ad0e91f57e2;hb=84751fead39221a8e01d20a4692faf0b63a7c996;hpb=b73ad7605777c49c65673e34f6f9ee635053db13 diff --git a/src/tatoo.ml b/src/tatoo.ml index 5dec2f6..5e8144d 100644 --- a/src/tatoo.ml +++ b/src/tatoo.ml @@ -14,6 +14,13 @@ (***********************************************************************) open Format +let default_gc = Gc.get() +let tuned_gc = { default_gc with + Gc.minor_heap_size = 32*1024*1024; + Gc.major_heap_increment = 8*1024*1024; + Gc.max_overhead = 1000000; + Gc.space_overhead = 100; +} let time f arg msg = let t1 = Unix.gettimeofday () in @@ -44,15 +51,27 @@ let restart_sequential run auto_list tree nodes () = let main () = let () = Options.parse () in + let tree_model = List.assoc !Options.tree_model + Options.supported_models + in + let module T = (val tree_model) in + let module Runtime = Run.Make(T) + in + let doc = let fd, close_fd = match !Options.input_file with None | Some "-" | Some "/dev/stdin" -> stdin, ignore | Some input -> let fd = open_in input in fd, fun () -> close_in fd in - let d = time Compact_tree.load_xml_file fd "parsing xml document" in + let d = time Runtime.Tree.load_xml_file fd "parsing xml document" in close_fd (); d in + let () = + Gc.full_major(); + Gc.compact(); + Gc.set (tuned_gc) + in let queries = time (fun l -> @@ -104,24 +123,23 @@ let main () = Logger.msg `STATS "@[Automaton: @\n%a@]" Ata.print auto) auto_list; end; - let module Naive = Run.Make(Compact_tree)(Compact_node_list) in let result_list = - let root = Compact_node_list.create () in - let () = Compact_node_list.add (Compact_tree.root doc) root in + let root = Runtime.ResultSet.create () in + let () = Runtime.ResultSet.add (Runtime.Tree.root doc) root in let f, msg = match !Options.parallel, !Options.compose with true, true -> - compose_parallel Naive.eval auto_list doc root, "parallel/compose" + compose_parallel Runtime.eval auto_list doc root, "parallel/compose" | true, false -> - restart_parallel Naive.full_eval auto_list doc root, "parallel/restart" + restart_parallel Runtime.full_eval auto_list doc root, "parallel/restart" | false, true -> - compose_sequential Naive.eval auto_list doc root , "sequential/compose" + compose_sequential Runtime.eval auto_list doc root , "sequential/compose" | false, false -> - restart_sequential Naive.eval auto_list doc root, "sequential/restart" + restart_sequential Runtime.eval auto_list doc root, "sequential/restart" in time f () ("evaluating query in " ^ msg ^ " mode") in - let s = Naive.stats () in + let s = Runtime.stats () in Run.( Logger.msg `STATS "@[tree size: %d@\ntraversals: %d@\ntransition fetch cache miss ratio: %f@\ntransition eval cache miss ratio: %f@\nNumber of visited nodes per pass: %a@]" @@ -138,11 +156,11 @@ let main () = output_string output (string_of_int !count); output_string output "\" >\n"; if !Options.count then begin - output_string output (string_of_int (Compact_node_list.length results)); + output_string output (string_of_int (Runtime.ResultSet.length results)); output_char output '\n'; end else - Compact_node_list.iter (fun n -> - Compact_tree.print_xml output doc n; + Runtime.ResultSet.iter (fun n -> + Runtime.Tree.print_xml output doc n; output_char output '\n' ) results; output_string output "\n";