From c952b72df544e5d4cb555140f4d0c3f251444b45 Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Sat, 2 Oct 2021 11:35:45 +0200 Subject: Fixed benchmarks regarding cmap find bug. --- benchmarks/cdeq_benchmark.cpp | 6 +++--- benchmarks/clist_benchmark.cpp | 4 ++-- benchmarks/cmap_benchmark.cpp | 6 ++++-- benchmarks/csmap_benchmark.cpp | 6 ++++-- benchmarks/cvec_benchmark.cpp | 4 ++-- benchmarks/shootout2_cmap.cpp | 2 +- benchmarks/shootout3_csmap.cpp | 9 ++------- include/stc/cmap.h | 2 +- 8 files changed, 19 insertions(+), 20 deletions(-) diff --git a/benchmarks/cdeq_benchmark.cpp b/benchmarks/cdeq_benchmark.cpp index a12dddf0..0c4def50 100644 --- a/benchmarks/cdeq_benchmark.cpp +++ b/benchmarks/cdeq_benchmark.cpp @@ -43,8 +43,8 @@ Sample test_std_deque() { c_forrange (N) con.push_back(stc64_random() & mask2); s.test[FIND].t1 = clock(); size_t sum = 0; - container::iterator it; // Iteration - not inherent find - skipping + //container::iterator it; //c_forrange (S) if ((it = std::find(con.begin(), con.end(), stc64_random() & mask2)) != con.end()) sum += *it; s.test[FIND].t2 = clock(); s.test[FIND].sum = sum; @@ -88,8 +88,8 @@ Sample test_stc_deque() { c_forrange (N) cdeq_x_push_back(&con, stc64_random() & mask2); s.test[FIND].t1 = clock(); size_t sum = 0; - cdeq_x_iter_t it; - //c_forrange (S) if ((it = cdeq_x_find(&con, stc64_random() & mask2)).ref) sum += *it.ref; + //cdeq_x_iter_t it, end = cdeq_x_end(&con); + //c_forrange (S) if ((it = cdeq_x_find(&con, stc64_random() & mask2)).ref != end.ref) sum += *it.ref; s.test[FIND].t2 = clock(); s.test[FIND].sum = sum; s.test[ITER].t1 = clock(); diff --git a/benchmarks/clist_benchmark.cpp b/benchmarks/clist_benchmark.cpp index 7c1f164e..8151afa9 100644 --- a/benchmarks/clist_benchmark.cpp +++ b/benchmarks/clist_benchmark.cpp @@ -85,8 +85,8 @@ Sample test_stc_forward_list() { c_forrange (N) clist_x_push_front(&con, stc64_random() & mask2); s.test[FIND].t1 = clock(); size_t sum = 0; - clist_x_iter_t it; - //c_forrange (S) if ((it = clist_x_find(&con, stc64_random() & mask2)).ref) sum += *it.ref; + //clist_x_iter_t it, end = clist_x_end(&con); + //c_forrange (S) if ((it = clist_x_find(&con, stc64_random() & mask2)).ref != end.ref) sum += *it.ref; s.test[FIND].t2 = clock(); s.test[FIND].sum = sum; s.test[ITER].t1 = clock(); diff --git a/benchmarks/cmap_benchmark.cpp b/benchmarks/cmap_benchmark.cpp index 98f90479..6e0ef325 100644 --- a/benchmarks/cmap_benchmark.cpp +++ b/benchmarks/cmap_benchmark.cpp @@ -91,8 +91,10 @@ Sample test_stc_unordered_map() { stc64_srandom(seed); s.test[FIND].t1 = clock(); size_t sum = 0; - cmap_x_iter_t it; - c_forrange (N) if ((it = cmap_x_find(&con, stc64_random() & mask1)).ref) sum += it.ref->second; + cmap_x_value_t* val; + c_forrange (N) + if ((val = cmap_x_get(&con, stc64_random() & mask1))) + sum += val->second; s.test[FIND].t2 = clock(); s.test[FIND].sum = sum; s.test[ITER].t1 = clock(); diff --git a/benchmarks/csmap_benchmark.cpp b/benchmarks/csmap_benchmark.cpp index cd7f5509..18af9a34 100644 --- a/benchmarks/csmap_benchmark.cpp +++ b/benchmarks/csmap_benchmark.cpp @@ -91,8 +91,10 @@ Sample test_stc_map() { stc64_srandom(seed); s.test[FIND].t1 = clock(); size_t sum = 0; - csmap_x_iter_t it; - c_forrange (N) if ((it = csmap_x_find(&con, stc64_random() & mask1)).ref) sum += it.ref->second; + csmap_x_value_t* val; + c_forrange (N) + if ((val = csmap_x_get(&con, stc64_random() & mask1))) + sum += val->second; s.test[FIND].t2 = clock(); s.test[FIND].sum = sum; s.test[ITER].t1 = clock(); diff --git a/benchmarks/cvec_benchmark.cpp b/benchmarks/cvec_benchmark.cpp index 755659a7..5cc2fb34 100644 --- a/benchmarks/cvec_benchmark.cpp +++ b/benchmarks/cvec_benchmark.cpp @@ -84,8 +84,8 @@ Sample test_stc_vector() { c_forrange (N) cvec_x_push_back(&con, stc64_random() & mask2); s.test[FIND].t1 = clock(); size_t sum = 0; - cvec_x_iter_t it; - //c_forrange (S) if ((it = cvec_x_find(&con, stc64_random() & mask2)).ref) sum += *it.ref; + //cvec_x_iter_t it, end = cvec_x_end(&con); + //c_forrange (S) if ((it = cvec_x_find(&con, stc64_random() & mask2)).ref != end.ref) sum += *it.ref; s.test[FIND].t2 = clock(); s.test[FIND].sum = sum; s.test[ITER].t1 = clock(); diff --git a/benchmarks/shootout2_cmap.cpp b/benchmarks/shootout2_cmap.cpp index 6224c1f3..77d458bc 100644 --- a/benchmarks/shootout2_cmap.cpp +++ b/benchmarks/shootout2_cmap.cpp @@ -38,7 +38,7 @@ stc64_t rng; #define CMAP_PUT(X, key, val) cmap_##X##_emplace_or_assign(&map, key, val).ref->second #define CMAP_EMPLACE(X, key, val) cmap_##X##_emplace(&map, key, val).ref->second #define CMAP_ERASE(X, key) cmap_##X##_erase(&map, key) -#define CMAP_FIND(X, key) (cmap_##X##_find(map, key) != NULL) +#define CMAP_FIND(X, key) cmap_##X##_contains(map, key) #define CMAP_FOR(X, i) c_foreach (i, cmap_##X, map) #define CMAP_ITEM(X, i) i.ref->second #define CMAP_SIZE(X) cmap_##X##_size(map) diff --git a/benchmarks/shootout3_csmap.cpp b/benchmarks/shootout3_csmap.cpp index 6f124cd8..35abf8a8 100644 --- a/benchmarks/shootout3_csmap.cpp +++ b/benchmarks/shootout3_csmap.cpp @@ -179,8 +179,8 @@ static void ins_and_access_csmap_i(picobench::state& s) picobench::scope scope(s); c_forrange (s.iterations()) { result += ++csmap_i_emplace(&map, stc64_random() & mask, 0).ref->second; - csmap_i_iter_t it = csmap_i_find(&map, stc64_random() & mask); - if (it.ref) csmap_i_erase(&map, it.ref->first); + csmap_i_value_t* val = csmap_i_get(&map, stc64_random() & mask); + if (val) csmap_i_erase(&map, val->first); } s.set_result(result + csmap_i_size(map)); csmap_i_del(&map); @@ -216,11 +216,6 @@ static void ins_and_access_s(picobench::state& s) c_forrange (s.iterations()) { randomize(&str[0], str.size()); result += map.erase(str); - /*auto it = map.find(str); - if (it != map.end()) { - ++result; - map.erase(it); - }*/ } s.set_result(result + map.size()); } diff --git a/include/stc/cmap.h b/include/stc/cmap.h index fd8711ad..1cb61d00 100644 --- a/include/stc/cmap.h +++ b/include/stc/cmap.h @@ -240,7 +240,7 @@ STC_DEF uint64_t c_default_hash(const void *key, size_t len) { #ifndef CMAP_H_INCLUDED //STC_INLINE size_t fastrange_uint64_t(uint64_t x, uint64_t n) // { uint64_t lo, hi; c_umul128(x, n, &lo, &hi); return hi; } -#define fastrange_uint32_t(x, n) ((size_t) (((uint32_t)(x)*(uint64_t)(n)) >> 32)) +#define fastrange_uint32_t(x, n) (uint32_t)((uint32_t)(x)*(uint64_t)(n) >> 32) #define chash_index_(h, entryPtr) ((entryPtr) - (h).table) #endif -- cgit v1.2.3