Guest User

Untitled

a guest
Oct 23rd, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. #include "../tests/testutil.hpp"
  2.  
  3. #include <trie.hpp>
  4. #include <radix_tree.hpp>
  5.  
  6. #include <benchmark/benchmark.h>
  7. #include <chrono>
  8. #include <cstddef>
  9. #include <cstdio>
  10. #include <cstdlib>
  11. #include <random>
  12. #include <vector>
  13.  
  14. const std::size_t nkeys = 10000;
  15. const std::size_t nqueries = 100000;
  16. const std::size_t warmup_runs = 10;
  17. const std::size_t samples = 10;
  18. const std::size_t key_length = 20;
  19. const char* chars = "abcdefghijklmnopqrstuvwxyz0123456789";
  20. const int chars_len = 36;
  21.  
  22. static void BM_TrieLookup(benchmark::State& state)
  23. {
  24. state.PauseTiming();
  25. std::minstd_rand rng(123456789);
  26. std::vector<unsigned char*> input_set;
  27. std::vector<unsigned char*> queries;
  28. input_set.reserve(nkeys);
  29. queries.reserve(nqueries);
  30.  
  31. for (std::size_t i = 0; i < nkeys; ++i) {
  32. unsigned char* key = new unsigned char[key_length];
  33. for (std::size_t j = 0; j < key_length; j++)
  34. key[j] = static_cast<unsigned char>(chars[rng() % chars_len]);
  35. input_set.emplace_back(key);
  36. }
  37. for (std::size_t i = 0; i < nqueries; ++i)
  38. queries.push_back(input_set[rng() % nkeys]);
  39.  
  40. zmq::trie_t trie;
  41. for (auto key : input_set) {
  42. trie.add(key, key_length);
  43. }
  44.  
  45. state.ResumeTiming();
  46. for (auto _ : state) {
  47. for (auto query : queries)
  48. benchmark::DoNotOptimize(trie.check(query, key_length));
  49. }
  50. }
  51.  
  52. static void BM_RadixTreeLookup(benchmark::State& state)
  53. {
  54. state.PauseTiming();
  55. std::minstd_rand rng(123456789);
  56. std::vector<unsigned char*> input_set;
  57. std::vector<unsigned char*> queries;
  58. input_set.reserve(nkeys);
  59. queries.reserve(nqueries);
  60.  
  61. for (std::size_t i = 0; i < nkeys; ++i) {
  62. unsigned char* key = new unsigned char[key_length];
  63. for (std::size_t j = 0; j < key_length; j++)
  64. key[j] = static_cast<unsigned char>(chars[rng() % chars_len]);
  65. input_set.emplace_back(key);
  66. }
  67. for (std::size_t i = 0; i < nqueries; ++i)
  68. queries.push_back(input_set[rng() % nkeys]);
  69.  
  70. zmq::radix_tree tree;
  71. for (auto key : input_set) {
  72. tree.add(key, key_length);
  73. }
  74.  
  75. state.ResumeTiming();
  76. for (auto _ : state) {
  77. for (auto query : queries)
  78. benchmark::DoNotOptimize(tree.check(query, key_length));
  79. }
  80. }
  81.  
  82. // BENCHMARK(BM_TrieLookup)->Unit(benchmark::kMillisecond)->UseRealTime();
  83. BENCHMARK(BM_RadixTreeLookup)->Unit(benchmark::kMillisecond);
  84.  
  85. BENCHMARK_MAIN();
Add Comment
Please, Sign In to add comment