diff options
| author | Tyge Løvset <[email protected]> | 2020-03-21 17:27:18 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-03-21 17:27:18 +0100 |
| commit | 04e1aafd85f6e4246604a97f925b81dc88f652af (patch) | |
| tree | 8937fdc107ac3e19f80460f3bcddd670228d2ed3 | |
| parent | fa86677fb79d16163bd1c7d6c1bd128f0a1c3ee9 (diff) | |
| download | STC-modified-04e1aafd85f6e4246604a97f925b81dc88f652af.tar.gz STC-modified-04e1aafd85f6e4246604a97f925b81dc88f652af.zip | |
Add files via upload
| -rw-r--r-- | benchmark.cpp | 50 |
1 files changed, 16 insertions, 34 deletions
diff --git a/benchmark.cpp b/benchmark.cpp index 2686c79c..38f76b8c 100644 --- a/benchmark.cpp +++ b/benchmark.cpp @@ -7,14 +7,11 @@ #include <c_lib/cmap.h>
#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<Key, Value> 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<Key, Value> 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<Key, Value> 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<Key, Value> 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));
|
