X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=main.ml;h=c8ed40e1cfed841f0c95f99ba0da467a8ab10a13;hb=05d12de7ce75866e7e7e19fba37720fda99c38ad;hp=985a5b2fba0334288536e403a981fa8910e1e4c6;hpb=6131f2f9e380543197c9fa253325bbc84749e6e8;p=SXSI%2Fxpathcomp.git diff --git a/main.ml b/main.ml index 985a5b2..c8ed40e 100644 --- a/main.ml +++ b/main.ml @@ -13,7 +13,7 @@ let time f x = let t1 = Unix.gettimeofday () in let r = f x in let t2 = Unix.gettimeofday () in - let t = (1000. *.(t2 -. t1)) in + let t = (1000. *. (t2 -. t1)) in l:= t::!l; Printf.eprintf " %fms\n%!" t ; r @@ -35,41 +35,55 @@ let main v query output = in XPath.Ast.print Format.err_formatter query; Format.fprintf Format.err_formatter "\n%!"; -(* Printf.eprintf "Dummy iteration : "; - time (fill_hashtag) v; - Printf.eprintf "Dummy iteration (tag access cached) : "; - time (fill_hashtag) v; -*) Printf.eprintf "Compiling query : "; let auto,ltags,contains = time XPath.Compile.compile query in let _ = Ata.dump Format.err_formatter auto in let _ = Printf.eprintf "%!" in - let _ = match contains with - None -> () + + let do_contains = match contains with + None -> false | Some s -> let r = Tree.count v s in + Printf.eprintf "%i documents in the TextCollection\n" (Tree.text_size v); Printf.eprintf "Global count is %i, using " r; - if r < !Options.tc_threshold then begin - Printf.eprintf "TextCollection contains\nCalling global contains : "; - time (Tree.init_contains v) s + if r < !Options.tc_threshold then begin + Printf.eprintf "TextCollection contains\nTiming call to raw global contains (1st time): "; + time (Tree.unsorted_contains v) s; + Printf.eprintf "Calling global contains : "; + time (Tree.init_contains v) s; + Printf.eprintf "Timing call to global count contains : "; + let r = time (Tree.count_contains v) s + in + Printf.eprintf " number of matching nodes %i \n%!" r; + Printf.eprintf "Timing call to raw global contains (2nd time): "; + time (Tree.unsorted_contains v) s; end else begin Printf.eprintf "Naive contains\nCalling global contains : "; time (Tree.init_naive_contains v) s - end + end;true in - Printf.eprintf "Execution time %s : " (if !Options.count_only then "(counting only)" else ""); + Printf.eprintf "Execution time %s : " + (if !Options.count_only then "(counting only)" else if !Options.backward then "(bottomup)" else ""); begin let _ = Gc.full_major();Gc.compact() in let _ = Gc.set (disabled_gc) in - if !Options.count_only then - let r = time ( run_count auto )v in + if !Options.backward then + let tag,set = List.hd ltags in + let r = if do_contains + then time (bottom_up_count_contains auto) v + else time (bottom_up_count auto v) tag in + let _ = Printf.eprintf "Number of nodes in the result set : %i\n%!" r + in () + else + if !Options.count_only then + let r = time ( top_down_count auto ) v in (* not clean *) let _ = Printf.eprintf "Number of nodes in the result set : %i\n%!" r in () else - - let result,rcount = time (if !Options.time then run_time auto else run auto) v in + let result = time (top_down auto) v in + let rcount = IdSet.length result in Printf.eprintf "Number of nodes in the result set : %i\n" rcount; Printf.eprintf "\n%!"; begin @@ -80,9 +94,11 @@ let main v query output = time( fun () -> let oc = open_out f in output_string oc "\n"; - TS.iter (fun t -> output_string oc "----------\n"; - Tree.print_xml_fast oc t; - output_char oc '\n') result) (); + IdSet.iter (fun t -> + Tree.print_xml_fast oc t; + output_char oc '\n'; + output_string oc "----------\n"; + ) result) (); end; end; let _ = Gc.set enabled_gc in @@ -98,8 +114,8 @@ let v = begin Printf.eprintf "Loading from file : "; time (Tree.load ~sample:!Options.sample_factor ) - (Filename.chop_suffix !Options.input_file ".srx"); - end + (Filename.chop_suffix !Options.input_file ".srx"); + end else let v = time (fun () -> let v = Tree.parse_xml_uri !Options.input_file;