IFNDEF UTILS_ML__ THEN DEFINE UTILS__ML__ IFDEF WORDSIZE64 THEN DEFINE WORDSIZE = 64 DEFINE HALFWORDSIZE = 32 DEFINE INTSIZE = 63 DEFINE HALFINTSIZE = 31 DEFINE HALF_MAX_INT = 2305843009213693951 DEFINE HPARAM = 65599 DEFINE HPARAM2 = 4303228801 DEFINE HPARAM3 = 282287506116799 ELSE DEFINE WORDSIZE = 32 DEFINE HALFWORDSIZE = 16 DEFINE INTSIZE = 31 DEFINE HALFINTSIZE = 15 DEFINE HALF_MAX_INT = 536870911 DEFINE HPARAM = 65599 DEFINE HPARAM2 = 8261505 DEFINE HPARAM3 = 780587199 END DEFINE HASHINT2 (x,y) = ((x)+HPARAM*(y)) DEFINE HASHINT3 (x,y,z) = ((x) + (y) * HPARAM + (z) * HPARAM2) DEFINE HASHINT4 (x,y,z,t) = ((x) + (y) * HPARAM + (z)*HPARAM2 + (t)* HPARAM3) DEFINE PRIME1 = 7 DEFINE PRIME2 = 19 DEFINE PRIME3 = 83 DEFINE PRIME4 = 223 DEFINE PRIME5 = 491 DEFINE PRIME6 = 733 DEFINE PRIME7 = 1009 DEFINE PRIME8 = 4093 DEFINE PRIME9 = 65599 (* Magic Constant used for hashing *) DEFINE SMALL_H_SIZE = PRIME2 DEFINE MED_H_SIZE = PRIME5 DEFINE BIG_H_SIZE = PRIME8 let read_procmem () = let pid = Unix.getpid() in let cin = open_in (Printf.sprintf "/proc/%i/status" pid) in let pattern = "VmRSS" in let matchline s = let l = String.length pattern in if (String.length s) < l then false else let s' = String.sub s 0 l in (s' = pattern) in let rec loop () = let s = input_line cin in if matchline s then s else loop () in let s = try loop() with _ -> "Could not read mem!" in close_in cin; s ;; let l = ref [] ;; let init_timer() = l := [];; let time f x = let s1 = read_procmem() in let t1 = Unix.gettimeofday () in let r = f x in let s2 = read_procmem() in let t2 = Unix.gettimeofday () in let t = (1000. *. (t2 -. t1)) in l:= t::!l; Printf.eprintf " %fms\n%!" t ; Printf.eprintf "Mem use before: %s\n%!" s1; Printf.eprintf "Mem use after: %s\n\n\n%!" s2; r ;; let total_time () = List.fold_left (+.) 0. !l;; END (* IFNDEF UTILS__ML__ *)