handle_bench.cpp 2.3 KB

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