handle_bench.cpp 1.7 KB

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