13 DEFINE HASHINT2 (x,y) = ((x)+HPARAM*(y))
14 DEFINE HASHINT3 (x,y,z) = ((x) + (y) * HPARAM + (z) * HPARAM2)
15 DEFINE HASHINT4 (x,y,z,t) = ((x) + (y) * HPARAM + (z)*HPARAM2 + (t)* HPARAM3)
16 DEFINE HASHINT5 (x,y,z,t,u) = ((x) + (y) * HPARAM + (z)*HPARAM2 + (t)* HPARAM3 + (u)*HPARAM4)
26 DEFINE PRIME9 = 65599 (* Magic Constant used for hashing *)
28 DEFINE SMALL_H_SIZE = PRIME2
29 DEFINE MED_H_SIZE = PRIME5
30 DEFINE BIG_H_SIZE = PRIME8
32 DEFINE SMALL_A_SIZE = 128
33 DEFINE MED_A_SIZE = 2048
34 DEFINE BIG_A_SIZE = 8192
38 let pid = Unix.getpid() in
39 let cin = open_in (Printf.sprintf "/proc/%i/status" pid) in
40 let pattern = "VmHWM" in
41 let matchline s = let l = String.length pattern in
42 if (String.length s) < l then false
43 else let s' = String.sub s 0 l in
47 let s = input_line cin in
51 let s = try loop() with _ -> "Could not read mem!"
58 let init_timer() = l := [];;
60 let s1 = read_procmem() in
61 let t1 = Unix.gettimeofday () in
63 let s2 = read_procmem() in
64 let t2 = Unix.gettimeofday () in
65 let t = (1000. *. (t2 -. t1)) in
67 Printf.eprintf " %fms\n%!" t ;
68 Printf.eprintf "Mem use before: %s\n%!" s1;
69 Printf.eprintf "Final Mem: %s\n\n\n%!" s2;
72 let time f ?(count=1) ?(msg="") x =
75 let t1 = Unix.gettimeofday () in
77 let t2 = Unix.gettimeofday () in
78 let t = (1000. *. (t2 -. t1)) in
79 Printf.eprintf "%s: " msg;
80 if (count != 1) then Printf.eprintf "run %i/%i, " i count;
81 Printf.eprintf "%fms\n%!" t;
82 if i >= count then (l:= t::!l;r)
86 let total_time () = List.fold_left (+.) 0. !l;;
90 let v = v lor (v lsr 1) in
91 let v = v lor (v lsr 2) in
92 let v = v lor (v lsr 4) in
93 let v = v lor (v lsr 8) in
94 let v = v lor (v lsr 16) in
97 external vb : bool -> int = "%identity"
101 END (* IFNDEF UTILS__ML__ *)