handle_bench.cpp 2.5 KB

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