handle_bench.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. for (uint32_t jj = 0; jj < numElements; ++jj)
  22. {
  23. tinystl::pair<TinyStlUnorderedMap::iterator, bool> ok = map.insert(tinystl::make_pair(uint64_t(jj), uint16_t(jj) ) );
  24. assert(ok.second);
  25. }
  26. for (uint32_t jj = 0; jj < numElements; ++jj)
  27. {
  28. bool ok = bx::mapRemove(map, uint64_t(jj) );
  29. assert(ok);
  30. }
  31. assert(map.size() == 0);
  32. }
  33. elapsed += bx::getHPCounter();
  34. printf(" TinyStl: %15f\n", double(elapsed) );
  35. }
  36. ///
  37. {
  38. int64_t elapsed = -bx::getHPCounter();
  39. for (uint32_t ii = 0; ii < numIterations; ++ii)
  40. {
  41. typedef std::unordered_map<uint64_t, uint16_t> StdUnorderedMap;
  42. StdUnorderedMap map;
  43. for (uint32_t jj = 0; jj < numElements; ++jj)
  44. {
  45. std::pair<StdUnorderedMap::iterator, bool> ok = map.insert(std::make_pair(uint64_t(jj), uint16_t(jj) ) );
  46. assert(ok.second);
  47. }
  48. for (uint32_t jj = 0; jj < numElements; ++jj)
  49. {
  50. bool ok = bx::mapRemove(map, uint64_t(jj) );
  51. assert(ok);
  52. }
  53. assert(map.size() == 0);
  54. }
  55. elapsed += bx::getHPCounter();
  56. printf(" STL: %15f\n", double(elapsed) );
  57. }
  58. ///
  59. {
  60. int64_t elapsed = -bx::getHPCounter();
  61. for (uint32_t ii = 0; ii < numIterations; ++ii)
  62. {
  63. typedef bx::HandleHashMapT<numElements+numElements/2, uint64_t> HandleHashMap;
  64. HandleHashMap map;
  65. for (uint32_t jj = 0; jj < numElements; ++jj)
  66. {
  67. bool ok = map.insert(jj, uint16_t(jj) );
  68. assert(ok);
  69. }
  70. for (uint32_t jj = 0; jj < numElements; ++jj)
  71. {
  72. bool ok = map.removeByKey(uint64_t(jj) );
  73. assert(ok);
  74. }
  75. assert(map.getNumElements() == 0);
  76. }
  77. elapsed += bx::getHPCounter();
  78. printf("HandleHashMap: %15f\n", double(elapsed) );
  79. }
  80. return EXIT_SUCCESS;
  81. }