From ad8782afc1d7149fe90dcf14c96da530753831b9 Mon Sep 17 00:00:00 2001 From: Carine Morel Date: Tue, 27 Jun 2023 17:48:47 +0200 Subject: [PATCH] Renaming atomicskiplist to skiplist --- ...h_atomic_skiplist.ml => bench_skiplist.ml} | 8 +-- bench/main.ml | 6 +-- src/{atomicskiplist.ml => skiplist.ml} | 2 +- src/{atomicskiplist.mli => skiplist.mli} | 0 src_lockfree/saturn_lockfree.ml | 2 +- src_lockfree/saturn_lockfree.mli | 2 +- test/atomicskiplist/dune | 22 -------- test/skiplist/dune | 22 ++++++++ .../qcheck_skiplist.ml} | 53 +++++++++---------- .../skiplist_dscheck.ml} | 4 +- .../stm_skiplist.ml} | 14 ++--- 11 files changed, 66 insertions(+), 69 deletions(-) rename bench/{bench_atomic_skiplist.ml => bench_skiplist.ml} (88%) rename src/{atomicskiplist.ml => skiplist.ml} (99%) rename src/{atomicskiplist.mli => skiplist.mli} (100%) delete mode 100644 test/atomicskiplist/dune create mode 100644 test/skiplist/dune rename test/{atomicskiplist/qcheck_atomic_skiplist.ml => skiplist/qcheck_skiplist.ml} (75%) rename test/{atomicskiplist/atomic_skiplist_dscheck.ml => skiplist/skiplist_dscheck.ml} (96%) rename test/{atomicskiplist/stm_atomicskiplist.ml => skiplist/stm_skiplist.ml} (88%) diff --git a/bench/bench_atomic_skiplist.ml b/bench/bench_skiplist.ml similarity index 88% rename from bench/bench_atomic_skiplist.ml rename to bench/bench_skiplist.ml index 111fe27c..70cde512 100644 --- a/bench/bench_atomic_skiplist.ml +++ b/bench/bench_skiplist.ml @@ -1,7 +1,7 @@ open Lockfree let workload num_elems num_threads add remove = - let sl = Atomicskiplist.create () in + let sl = Skiplist.create () in let elems = Array.init num_elems (fun _ -> Random.int 10000) in let push () = Domain.spawn (fun () -> @@ -9,10 +9,10 @@ let workload num_elems num_threads add remove = for i = 0 to (num_elems - 1) / num_threads do Domain.cpu_relax (); let prob = Random.float 1.0 in - if prob < add then Atomicskiplist.add sl (Random.int 10000) |> ignore + if prob < add then Skiplist.add sl (Random.int 10000) |> ignore else if prob >= add && prob < add +. remove then - Atomicskiplist.remove sl (Random.int 10000) |> ignore - else Atomicskiplist.mem sl elems.(i) |> ignore + Skiplist.remove sl (Random.int 10000) |> ignore + else Skiplist.mem sl elems.(i) |> ignore done; start_time) in diff --git a/bench/main.ml b/bench/main.ml index ab536444..ecae2a54 100644 --- a/bench/main.ml +++ b/bench/main.ml @@ -16,10 +16,10 @@ let benchmark_list = Mpmc_queue.bench ~use_cas:true ~takers:4 ~pushers:4; Mpmc_queue.bench ~use_cas:true ~takers:1 ~pushers:8; Mpmc_queue.bench ~use_cas:true ~takers:8 ~pushers:1; - Bench_atomic_skiplist.bench ~workload_type:"read_heavy" ~num_elems:2000000 + Bench_skiplist.bench ~workload_type:"read_heavy" ~num_elems:2000000 + ~num_threads:2; + Bench_skiplist.bench ~workload_type:"moderate_heavy" ~num_elems:2000000 ~num_threads:2; - Bench_atomic_skiplist.bench ~workload_type:"moderate_heavy" - ~num_elems:2000000 ~num_threads:2; ] @ backoff_benchmarks diff --git a/src/atomicskiplist.ml b/src/skiplist.ml similarity index 99% rename from src/atomicskiplist.ml rename to src/skiplist.ml index 3c6e35af..b81e806e 100644 --- a/src/atomicskiplist.ml +++ b/src/skiplist.ml @@ -31,7 +31,7 @@ let get_random_level sl = count_level 1 (** Create a new skiplist *) -let create ?(max_height=10) () = +let create ?(max_height = 10) () = let tail = create_new_node Int.max_int max_height in let next = Array.init (max_height + 1) (fun _ -> diff --git a/src/atomicskiplist.mli b/src/skiplist.mli similarity index 100% rename from src/atomicskiplist.mli rename to src/skiplist.mli diff --git a/src_lockfree/saturn_lockfree.ml b/src_lockfree/saturn_lockfree.ml index 449eb385..35795c3f 100644 --- a/src_lockfree/saturn_lockfree.ml +++ b/src_lockfree/saturn_lockfree.ml @@ -33,4 +33,4 @@ module Single_prod_single_cons_queue = Spsc_queue module Single_consumer_queue = Mpsc_queue module Relaxed_queue = Mpmc_relaxed_queue module Backoff = Backoff -module Atomicskiplist = Atomicskiplist +module Skiplist = Skiplist diff --git a/src_lockfree/saturn_lockfree.mli b/src_lockfree/saturn_lockfree.mli index 032d323b..c0a59720 100644 --- a/src_lockfree/saturn_lockfree.mli +++ b/src_lockfree/saturn_lockfree.mli @@ -40,4 +40,4 @@ module Relaxed_queue = Mpmc_relaxed_queue (** {2 Other} *) module Backoff = Backoff -module Atomicskiplist = Atomicskiplist +module Skiplist = Skiplist diff --git a/test/atomicskiplist/dune b/test/atomicskiplist/dune deleted file mode 100644 index 0dadbae8..00000000 --- a/test/atomicskiplist/dune +++ /dev/null @@ -1,22 +0,0 @@ -(rule - (copy ../../src/backoff.ml backoff.ml)) - -(rule - (copy ../../src/atomicskiplist.ml atomicskiplist.ml)) - -(test - (name atomic_skiplist_dscheck) - (libraries atomic dscheck alcotest) - (modules atomicskiplist atomic_skiplist_dscheck)) - -(test - (name qcheck_atomic_skiplist) - (libraries lockfree qcheck qcheck-alcotest) - (modules qcheck_atomic_skiplist)) - -(test - (name stm_atomicskiplist) - (modules stm_atomicskiplist) - (libraries lockfree qcheck-stm.sequential qcheck-stm.domain) - (action - (run %{test} --verbose))) \ No newline at end of file diff --git a/test/skiplist/dune b/test/skiplist/dune new file mode 100644 index 00000000..1a75d05f --- /dev/null +++ b/test/skiplist/dune @@ -0,0 +1,22 @@ +(rule + (copy ../../src/backoff.ml backoff.ml)) + +(rule + (copy ../../src/skiplist.ml skiplist.ml)) + +(test + (name skiplist_dscheck) + (libraries atomic dscheck alcotest) + (modules skiplist skiplist_dscheck)) + +(test + (name qcheck_skiplist) + (libraries lockfree qcheck qcheck-alcotest) + (modules qcheck_skiplist)) + +(test + (name stm_skiplist) + (modules stm_skiplist) + (libraries lockfree qcheck-stm.sequential qcheck-stm.domain) + (action + (run %{test} --verbose))) diff --git a/test/atomicskiplist/qcheck_atomic_skiplist.ml b/test/skiplist/qcheck_skiplist.ml similarity index 75% rename from test/atomicskiplist/qcheck_atomic_skiplist.ml rename to test/skiplist/qcheck_skiplist.ml index 9e55f102..484bdeac 100644 --- a/test/atomicskiplist/qcheck_atomic_skiplist.ml +++ b/test/skiplist/qcheck_skiplist.ml @@ -1,4 +1,4 @@ -module Atomicskiplist = Lockfree.Atomicskiplist +module Skiplist = Lockfree.Skiplist let tests_sequential = QCheck. @@ -6,23 +6,22 @@ let tests_sequential = (* TEST 1: add*) Test.make ~name:"add" (list int) (fun lpush -> assume (lpush <> []); - let sl = Atomicskiplist.create () in + let sl = Skiplist.create () in let rec add_all_elems l = match l with - | h :: t -> - if Atomicskiplist.add sl h then add_all_elems t else false + | h :: t -> if Skiplist.add sl h then add_all_elems t else false | [] -> true in add_all_elems lpush); (*TEST 2: add_remove*) Test.make ~name:"add_remove" (list int) (fun lpush -> let lpush = List.sort_uniq Int.compare lpush in - let sl = Atomicskiplist.create () in - List.iter (fun key -> ignore (Atomicskiplist.add sl key)) lpush; + let sl = Skiplist.create () in + List.iter (fun key -> ignore (Skiplist.add sl key)) lpush; let rec remove_all_elems l = match l with | h :: t -> - if Atomicskiplist.remove sl h then remove_all_elems t else false + if Skiplist.remove sl h then remove_all_elems t else false | [] -> true in remove_all_elems lpush); @@ -30,21 +29,20 @@ let tests_sequential = Test.make ~name:"add_find" (list int) (fun lpush -> let lpush = List.sort_uniq Int.compare lpush in let lpush = Array.of_list lpush in - let sl = Atomicskiplist.create () in + let sl = Skiplist.create () in let len = Array.length lpush in let pos = Array.sub lpush 0 (len / 2) in let neg = Array.sub lpush (len / 2) (len / 2) in - Array.iter (fun key -> ignore @@ Atomicskiplist.add sl key) pos; + Array.iter (fun key -> ignore @@ Skiplist.add sl key) pos; let rec check_pos index = if index < len / 2 then - if Atomicskiplist.mem sl pos.(index) then check_pos (index + 1) + if Skiplist.mem sl pos.(index) then check_pos (index + 1) else false else true in let rec check_neg index = if index < len / 2 then - if not @@ Atomicskiplist.mem sl neg.(index) then - check_neg (index + 1) + if not @@ Skiplist.mem sl neg.(index) then check_neg (index + 1) else false else true in @@ -52,14 +50,13 @@ let tests_sequential = (* TEST 4: add_remove_find *) Test.make ~name:"add_remove_find" (list int) (fun lpush -> let lpush = List.sort_uniq Int.compare lpush in - let sl = Atomicskiplist.create () in - List.iter (fun key -> ignore @@ Atomicskiplist.add sl key) lpush; - List.iter (fun key -> ignore @@ Atomicskiplist.remove sl key) lpush; + let sl = Skiplist.create () in + List.iter (fun key -> ignore @@ Skiplist.add sl key) lpush; + List.iter (fun key -> ignore @@ Skiplist.remove sl key) lpush; let rec not_find_all_elems l = match l with | h :: t -> - if not @@ Atomicskiplist.mem sl h then not_find_all_elems t - else false + if not @@ Skiplist.mem sl h then not_find_all_elems t else false | [] -> true in @@ -72,14 +69,14 @@ let tests_two_domains = (* TEST 1: Two domains doing multiple adds *) Test.make ~name:"parallel_add" (pair small_nat small_nat) (fun (npush1, npush2) -> - let sl = Atomicskiplist.create () in + let sl = Skiplist.create () in let sema = Semaphore.Binary.make false in let lpush1 = List.init npush1 (fun i -> i) in let lpush2 = List.init npush2 (fun i -> i + npush1) in let work lpush = List.map (fun elt -> - let completed = Atomicskiplist.add sl elt in + let completed = Skiplist.add sl elt in Domain.cpu_relax (); completed) lpush @@ -107,7 +104,7 @@ let tests_two_domains = (* TEST 2: Two domains doing multiple one push and one pop in parallel *) Test.make ~count:10000 ~name:"parallel_add_remove" (pair small_nat small_nat) (fun (npush1, npush2) -> - let sl = Atomicskiplist.create () in + let sl = Skiplist.create () in let sema = Semaphore.Binary.make false in let lpush1 = List.init npush1 (fun i -> i) in @@ -116,9 +113,9 @@ let tests_two_domains = let work lpush = List.map (fun elt -> - ignore @@ Atomicskiplist.add sl elt; + ignore @@ Skiplist.add sl elt; Domain.cpu_relax (); - Atomicskiplist.remove sl elt) + Skiplist.remove sl elt) lpush in @@ -138,17 +135,17 @@ let tests_two_domains = let rec check_none_present l = match l with | h :: t -> - if Atomicskiplist.mem sl h then false else check_none_present t + if Skiplist.mem sl h then false else check_none_present t | [] -> true in check_none_present lpush1 && check_none_present lpush2); (* TEST 3: Parallel push and pop using the same elements in two domains *) Test.make ~name:"parallel_add_remove_same_list" (list int) (fun lpush -> - let sl = Atomicskiplist.create () in + let sl = Skiplist.create () in let sema = Semaphore.Binary.make false in - let add_all_elems l = List.map (Atomicskiplist.add sl) l in - let remove_all_elems l = List.map (Atomicskiplist.remove sl) l in + let add_all_elems l = List.map (Skiplist.add sl) l in + let remove_all_elems l = List.map (Skiplist.remove sl) l in let domain1 = Domain.spawn (fun () -> @@ -170,7 +167,7 @@ let tests_two_domains = let rec check_none_present l = match l with | h :: t -> - if Atomicskiplist.mem sl h then false else check_none_present t + if Skiplist.mem sl h then false else check_none_present t | [] -> true in check_none_present lpush); @@ -178,7 +175,7 @@ let tests_two_domains = let () = let to_alcotest = List.map QCheck_alcotest.to_alcotest in - Alcotest.run "Atomic Skip List" + Alcotest.run "Skip List" [ ("test_sequential", to_alcotest tests_sequential); ("tests_two_domains", to_alcotest tests_two_domains); diff --git a/test/atomicskiplist/atomic_skiplist_dscheck.ml b/test/skiplist/skiplist_dscheck.ml similarity index 96% rename from test/atomicskiplist/atomic_skiplist_dscheck.ml rename to test/skiplist/skiplist_dscheck.ml index a3eb521b..e620dcd3 100644 --- a/test/atomicskiplist/atomic_skiplist_dscheck.ml +++ b/test/skiplist/skiplist_dscheck.ml @@ -1,4 +1,4 @@ -open Atomicskiplist +open Skiplist let _two_mem () = Atomic.trace (fun () -> @@ -80,7 +80,7 @@ let _two_remove () = Atomic.final (fun () -> Atomic.check (fun () -> let found1 = mem sl 1 in - !added1 && !removed1 && not !removed2 && not found1))) + !added1 && !removed1 && (not !removed2) && not found1))) let () = let open Alcotest in diff --git a/test/atomicskiplist/stm_atomicskiplist.ml b/test/skiplist/stm_skiplist.ml similarity index 88% rename from test/atomicskiplist/stm_atomicskiplist.ml rename to test/skiplist/stm_skiplist.ml index ce4054fc..50d96da5 100644 --- a/test/atomicskiplist/stm_atomicskiplist.ml +++ b/test/skiplist/stm_skiplist.ml @@ -2,7 +2,7 @@ open QCheck open STM -module Skiplist = Lockfree.Atomicskiplist +module Skiplist = Lockfree.Skiplist module WSDConf = struct type cmd = Mem of int | Add of int | Remove of int @@ -13,11 +13,11 @@ module WSDConf = struct | Add i -> "Add " ^ string_of_int i | Remove i -> "Remove " ^ string_of_int i - module Sint = Set.Make ( - struct - type t = int - let compare = compare - end) + module Sint = Set.Make (struct + type t = int + + let compare = compare + end) type state = Sint.t type sut = Skiplist.t @@ -67,4 +67,4 @@ let () = [ WSDT_seq.agree_test ~count ~name:"STM Lockfree.Skiplist test sequential"; WSDT_dom.agree_test_par ~count ~name:"STM Lockfree.Skiplist test parallel"; - ] + ]