1 /*
2 * Copyright 2010-2019 Branimir Karadzic. All rights reserved.
3 * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
4 */
5
6 #include <bx/timer.h>
7 #include <bx/handlealloc.h>
8 #include <bx/maputil.h>
9
10 #include <tinystl/allocator.h>
11 #include <tinystl/unordered_map.h>
12
13 #include <unordered_map>
14
15 #include <stdio.h>
16 #include <assert.h>
17
main()18 int main()
19 {
20 const uint32_t numElements = 4<<10;
21 const uint32_t numIterations = 16;
22
23 //
24 {
25 int64_t elapsed = -bx::getHPCounter();
26
27 for (uint32_t ii = 0; ii < numIterations; ++ii)
28 {
29 typedef tinystl::unordered_map<uint64_t, uint16_t> TinyStlUnorderedMap;
30 TinyStlUnorderedMap map;
31 // map.reserve(numElements);
32 for (uint32_t jj = 0; jj < numElements; ++jj)
33 {
34 tinystl::pair<TinyStlUnorderedMap::iterator, bool> ok = map.insert(tinystl::make_pair(uint64_t(jj), uint16_t(jj) ) );
35 assert(ok.second); BX_UNUSED(ok);
36 }
37
38 for (uint32_t jj = 0; jj < numElements; ++jj)
39 {
40 bool ok = bx::mapRemove(map, uint64_t(jj) );
41 assert(ok); BX_UNUSED(ok);
42 }
43
44 assert(map.size() == 0);
45 }
46
47 elapsed += bx::getHPCounter();
48 printf(" TinyStl: %15f\n", double(elapsed) );
49 }
50
51 ///
52 {
53 int64_t elapsed = -bx::getHPCounter();
54
55 for (uint32_t ii = 0; ii < numIterations; ++ii)
56 {
57 typedef std::unordered_map<uint64_t, uint16_t> StdUnorderedMap;
58 StdUnorderedMap map;
59 map.reserve(numElements);
60 for (uint32_t jj = 0; jj < numElements; ++jj)
61 {
62 std::pair<StdUnorderedMap::iterator, bool> ok = map.insert(std::make_pair(uint64_t(jj), uint16_t(jj) ) );
63 assert(ok.second); BX_UNUSED(ok);
64 }
65
66 for (uint32_t jj = 0; jj < numElements; ++jj)
67 {
68 bool ok = bx::mapRemove(map, uint64_t(jj) );
69 assert(ok); BX_UNUSED(ok);
70 }
71
72 assert(map.size() == 0);
73 }
74
75 elapsed += bx::getHPCounter();
76 printf(" STL: %15f\n", double(elapsed) );
77 }
78
79 ///
80 {
81 int64_t elapsed = -bx::getHPCounter();
82
83 for (uint32_t ii = 0; ii < numIterations; ++ii)
84 {
85 typedef bx::HandleHashMapT<numElements+numElements/2, uint64_t> HandleHashMap;
86 HandleHashMap map;
87 for (uint32_t jj = 0; jj < numElements; ++jj)
88 {
89 bool ok = map.insert(jj, uint16_t(jj) );
90 assert(ok); BX_UNUSED(ok);
91 }
92
93 for (uint32_t jj = 0; jj < numElements; ++jj)
94 {
95 bool ok = map.removeByKey(uint64_t(jj) );
96 assert(ok); BX_UNUSED(ok);
97 }
98
99 assert(map.getNumElements() == 0);
100 }
101
102 elapsed += bx::getHPCounter();
103 printf("HandleHashMap: %15f\n", double(elapsed) );
104 }
105
106 extern void simd_bench();
107 simd_bench();
108
109 extern void math_bench();
110 math_bench();
111
112 return bx::kExitSuccess;
113 }
114