FBVectorBenchmarks.cpp.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*
  2. * Copyright 2011-present Facebook, Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. /**
  17. * This file is supposed to be included from within
  18. * FBVectorBenchmark. Do not use otherwise.
  19. */
  20. BENCHMARK(BENCHFUN(zzInitRNG)) {
  21. srand(seed);
  22. }
  23. BENCHMARK(BENCHFUN(defaultCtor), iters) {
  24. FOR_EACH_RANGE (i, 0, iters) {
  25. VECTOR v;
  26. doNotOptimizeAway(&v);
  27. }
  28. }
  29. void BENCHFUN(sizeCtor)(int iters, int size) {
  30. FOR_EACH_RANGE (i, 0, iters) {
  31. VECTOR v(size);
  32. doNotOptimizeAway(&v);
  33. }
  34. }
  35. BENCHMARK_PARAM(BENCHFUN(sizeCtor), 16)
  36. BENCHMARK_PARAM(BENCHFUN(sizeCtor), 128)
  37. BENCHMARK_PARAM(BENCHFUN(sizeCtor), 1024)
  38. void BENCHFUN(fillCtor)(int iters, int size) {
  39. FOR_EACH_RANGE (i, 0, iters) {
  40. VECTOR v(size_t(size), randomObject<VECTOR::value_type>());
  41. doNotOptimizeAway(&v);
  42. }
  43. }
  44. BENCHMARK_PARAM(BENCHFUN(fillCtor), 16)
  45. BENCHMARK_PARAM(BENCHFUN(fillCtor), 128)
  46. BENCHMARK_PARAM(BENCHFUN(fillCtor), 1024)
  47. #ifndef SKIP_RESERVE
  48. void BENCHFUN(reserve)(int iters, int size) {
  49. auto const obj = randomObject<VECTOR::value_type>();
  50. FOR_EACH_RANGE (i, 0, iters) {
  51. VECTOR v(random(0U, 1U), obj);
  52. v.reserve(size);
  53. }
  54. }
  55. BENCHMARK_PARAM(BENCHFUN(reserve), 16)
  56. BENCHMARK_PARAM(BENCHFUN(reserve), 128)
  57. BENCHMARK_PARAM(BENCHFUN(reserve), 1024)
  58. #endif
  59. void BENCHFUN(insertFront)(int iters, int initialSize) {
  60. BenchmarkSuspender braces;
  61. auto const obj = randomObject<VECTOR::value_type>();
  62. VECTOR v(initialSize, obj);
  63. braces.dismissing([&]() {
  64. FOR_EACH_RANGE (i, 0, iters) { v.insert(v.begin(), obj); }
  65. });
  66. }
  67. BENCHMARK_PARAM(BENCHFUN(insertFront), 16)
  68. BENCHMARK_PARAM(BENCHFUN(insertFront), 128)
  69. BENCHMARK_PARAM(BENCHFUN(insertFront), 1024)
  70. BENCHMARK_PARAM(BENCHFUN(insertFront), 10240)
  71. BENCHMARK_PARAM(BENCHFUN(insertFront), 102400)
  72. BENCHMARK_PARAM(BENCHFUN(insertFront), 1024000)
  73. void BENCHFUN(pushBack)(int iters, int initialSize) {
  74. BenchmarkSuspender braces;
  75. auto const obj = randomObject<VECTOR::value_type>();
  76. VECTOR v(initialSize, obj);
  77. braces.dismissing([&]() {
  78. FOR_EACH_RANGE (i, 0, iters) { v.push_back(obj); }
  79. });
  80. }
  81. BENCHMARK_PARAM(BENCHFUN(pushBack), 16)
  82. BENCHMARK_PARAM(BENCHFUN(pushBack), 128)
  83. BENCHMARK_PARAM(BENCHFUN(pushBack), 1024)
  84. BENCHMARK_PARAM(BENCHFUN(pushBack), 10240)
  85. BENCHMARK_PARAM(BENCHFUN(pushBack), 102400)
  86. BENCHMARK_PARAM(BENCHFUN(pushBack), 1024000)