@@ -25,13 +25,13 @@ let write_heavy_workload () =
2525(* A regular workload with 90% reads, 9% adds and 1% removes. *)
2626let read_heavy_workload () =
2727 let sl = Atomicskiplist. create () in
28- let elems = Array. init num_elems (fun _ -> Random. int 100 ) in
28+ let elems = Array. init num_elems (fun _ -> Random. int 10000 ) in
2929 let push = (fun () -> Domain. spawn ( fun () ->
3030 let start_time = Unix. gettimeofday () in
3131 for i = 0 to (num_elems - 1 ) do (
3232 if i mod 1000 < 90 then
3333 Atomicskiplist. add sl elems.(i) |> ignore
34- else if i mod 1000 > 90 && i mod 1000 < 100 then
34+ else if i mod 1000 > = 90 && i mod 1000 < 100 then
3535 Atomicskiplist. remove sl elems.(i) |> ignore
3636 else
3737 Atomicskiplist. find sl elems.(i) |> ignore
@@ -44,14 +44,39 @@ let read_heavy_workload () =
4444 let end_time = Unix. gettimeofday () in
4545 let time_diff = end_time -. (List. nth start_time_threads 0 ) in
4646 time_diff
47-
47+
48+
49+ let moderate_heavy_workload () =
50+ let sl = Atomicskiplist. create () in
51+ let elems = Array. init num_elems (fun _ -> Random. int 10000 ) in
52+ let push = (fun () -> Domain. spawn ( fun () ->
53+ let start_time = Unix. gettimeofday () in
54+ for i = 0 to (num_elems - 1 ) do (
55+ if i mod 1000 < 200 then
56+ Atomicskiplist. add sl elems.(i) |> ignore
57+ else if i mod 1000 > = 200 && i mod 1000 < 300 then
58+ Atomicskiplist. remove sl elems.(i) |> ignore
59+ else
60+ Atomicskiplist. find sl elems.(i) |> ignore
61+ )
62+ done ;
63+ start_time
64+ )) in
65+ let threads = List. init num_threads (fun _ -> push () ) in
66+ let start_time_threads = List. map (fun domain -> Domain. join domain) threads in
67+ let end_time = Unix. gettimeofday () in
68+ let time_diff = end_time -. (List. nth start_time_threads 0 ) in
69+ time_diff
70+
4871
4972
5073let bench ~workload_type () =
5174 let workload =
5275 if workload_type = " read_heavy" then
5376 read_heavy_workload
54- else
77+ else if workload_type == " moderate_heavy" then
78+ moderate_heavy_workload
79+ else
5580 write_heavy_workload
5681 in
5782 let results = ref [] in
0 commit comments