From 04e1aafd85f6e4246604a97f925b81dc88f652af Mon Sep 17 00:00:00 2001 From: Tyge Løvset <60263450+tylo-work@users.noreply.github.com> Date: Sat, 21 Mar 2020 17:27:18 +0100 Subject: Add files via upload --- benchmark.cpp | 50 ++++++++++++++++---------------------------------- 1 file changed, 16 insertions(+), 34 deletions(-) (limited to 'benchmark.cpp') diff --git a/benchmark.cpp b/benchmark.cpp index 2686c79c..38f76b8c 100644 --- a/benchmark.cpp +++ b/benchmark.cpp @@ -7,14 +7,11 @@ #include #include "others/bytell_hash_map.hpp" #include "others/robin_hood.hpp" -#include "others/khash.h" declare_CMap(ii, int64_t, int64_t); declare_CVector_string(s); declare_CMap(ix, short, short); -KHASH_MAP_INIT_INT64(ii, uint64_t) - const size_t seed = 123; // time(NULL); const double maxLoadFactor = 0.77; #define RAND() rand() * rand() @@ -28,17 +25,6 @@ const double maxLoadFactor = 0.77; #define CMAP_BUCKETS(tag) cmap_buckets(map) #define CMAP_CLEAR(tag) cmap_##tag##_destroy(&map) - -#define KMAP_SETUP(tag, Key, Value) khash_t(ii)* map = kh_init(ii); \ - khiter_t ki; int ret -#define KMAP_PUT(tag, key, value) kh_value(map, kh_put(ii, map, key, &ret)) = value -#define KMAP_DEL(tag, key) (ki = kh_get(ii, map, key)) != kh_end(map) ? kh_del(ii, map, ki), 1 : 0 -#define KMAP_FIND(tag, key) (kh_get(ii, map, key) != kh_end(map)) -#define KMAP_SIZE(tag) ((size_t) kh_size(map)) -#define KMAP_BUCKETS(tag) ((size_t) kh_n_buckets(map)) -#define KMAP_CLEAR(tag) kh_destroy(ii, map) - - #define UMAP_SETUP(tag, Key, Value) std::unordered_map map; map.max_load_factor(maxLoadFactor) #define UMAP_PUT(tag, key, value) (map[key] = value) #define UMAP_FIND(tag, key) (map.find(key) != map.end()) @@ -47,7 +33,6 @@ const double maxLoadFactor = 0.77; #define UMAP_BUCKETS(tag) map.bucket_count() #define UMAP_CLEAR(tag) map.clear() - #define BMAP_SETUP(tag, Key, Value) ska::bytell_hash_map map; map.max_load_factor(maxLoadFactor) #define BMAP_PUT(tag, key, value) (map[key] = value) #define BMAP_FIND(tag, key) (map.find(key) != map.end()) @@ -56,6 +41,14 @@ const double maxLoadFactor = 0.77; #define BMAP_BUCKETS(tag) map.bucket_count() #define BMAP_CLEAR(tag) map.clear() +#define FMAP_SETUP(tag, Key, Value) ska::flat_hash_map map; map.max_load_factor(maxLoadFactor) +#define FMAP_PUT(tag, key, value) (map[key] = value) +#define FMAP_FIND(tag, key) (map.find(key) != map.end()) +#define FMAP_DEL(tag, key) map.erase(key) +#define FMAP_SIZE(tag) map.size() +#define FMAP_BUCKETS(tag) map.bucket_count() +#define FMAP_CLEAR(tag) map.clear() + #define RMAP_SETUP(tag, Key, Value) robin_hood::unordered_map map #define RMAP_PUT(tag, key, value) (map[key] = value) #define RMAP_FIND(tag, key) (map.find(key) != map.end()) @@ -67,28 +60,17 @@ const double maxLoadFactor = 0.77; #define MAP_TEST1(M, tag) \ { \ - const size_t N = 10000000; \ + const size_t N = 7000000; \ M##_SETUP(tag, int64_t, int64_t); \ - uint64_t checksum = 0, inserted = 0, erased = 0; \ + uint64_t checksum = 0, erased = 0; \ srand(seed); \ clock_t difference, before = clock(); \ for (size_t i = 0; i < N; ++i) { \ - int64_t key = RAND(); \ - switch (rand() & 1) { \ - case 0: { \ - checksum += ++M##_PUT(tag, key, i); \ - ++inserted; \ - break; \ - } \ - case 1: { \ - bool found = M##_FIND(tag, key); \ - if (found) erased += M##_DEL(tag, key); \ - break; \ - } \ - } \ + checksum += ++M##_PUT(tag, RAND(), i); \ + erased += M##_DEL(tag, RAND()); \ } \ difference = clock() - before; \ - printf(#M "(" #tag "): sz: %llu, bk: %llu, time: %.02f, sum: %llu, ins: %llu, del: %llu\n", M##_SIZE(tag), M##_BUCKETS(tag), (float) difference / CLOCKS_PER_SEC, checksum, inserted, erased); \ + printf(#M "(" #tag "): sz: %llu, bucks: %llu, time: %.02f, sum: %llu, erase: %llu\n", M##_SIZE(tag), M##_BUCKETS(tag), (float) difference / CLOCKS_PER_SEC, checksum, erased); \ M##_CLEAR(tag); \ } @@ -105,7 +87,7 @@ const double maxLoadFactor = 0.77; for (size_t i = 0; i < N; ++i) \ erased += M##_DEL(tag, i*123); \ difference = clock() - before; \ - printf(#M "(" #tag "): sz: %llu, bk: %llu, time: %.02f, del %llu\n", M##_SIZE(tag), M##_BUCKETS(tag), (float) difference / CLOCKS_PER_SEC, erased); \ + printf(#M "(" #tag "): sz: %llu, bucks: %llu, time: %.02f, erase %llu\n", M##_SIZE(tag), M##_BUCKETS(tag), (float) difference / CLOCKS_PER_SEC, erased); \ M##_CLEAR(tag); \ } @@ -114,14 +96,14 @@ int main() { MAP_TEST1(UMAP, ii) MAP_TEST1(CMAP, ii) - MAP_TEST1(KMAP, ii) MAP_TEST1(BMAP, ii) + MAP_TEST1(FMAP, ii) MAP_TEST1(RMAP, ii) MAP_TEST2(UMAP, ii) MAP_TEST2(CMAP, ii) - MAP_TEST2(KMAP, ii) MAP_TEST2(BMAP, ii) + MAP_TEST2(FMAP, ii) MAP_TEST2(RMAP, ii) printf("ix entry size %llu\n", sizeof(CMapEntry_ix)); -- cgit v1.2.3