store_now_in_vector.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. // Copyright 2011 Vicente J. Botet Escriba
  2. // Copyright (c) Microsoft Corporation 2014
  3. // Distributed under the Boost Software License, Version 1.0.
  4. // See http://www.boost.org/LICENSE_1_0.txt
  5. #include <boost/chrono/chrono.hpp>
  6. #include <boost/chrono/chrono_io.hpp>
  7. #include <libs/chrono/example/timer.hpp>
  8. #include <boost/chrono/process_cpu_clocks.hpp>
  9. #include <vector>
  10. //#define BOOST_CHRONO_HAS_TIMES_AND_CLOCK
  11. #ifdef BOOST_CHRONO_HAS_TIMES_AND_CLOCK
  12. #include <sys/time.h> //for gettimeofday and timeval
  13. #include <sys/times.h> //for times
  14. #include <unistd.h>
  15. #endif
  16. static const std::size_t size = 1000000;
  17. typedef boost::chrono::timer<boost::chrono::high_resolution_clock> Stopwatch;
  18. template <typename Clock>
  19. void perf_constant(std::vector<typename Clock::time_point>& vec)
  20. {
  21. for (int i=size-1; i>=0; --i)
  22. {
  23. vec[i]=typename Clock::time_point();
  24. }
  25. }
  26. template <typename Clock>
  27. void perf(std::vector<typename Clock::time_point>& vec)
  28. {
  29. for (int i=size-1; i>=0; --i)
  30. {
  31. vec[i]=Clock::now();
  32. }
  33. }
  34. template <typename Clock>
  35. void test()
  36. {
  37. std::vector<typename Clock::time_point> vec(size);
  38. Stopwatch sw1;
  39. perf_constant<Clock>(vec);
  40. Stopwatch::duration t1 = sw1.elapsed();
  41. Stopwatch sw2;
  42. perf<Clock>(vec);
  43. Stopwatch::duration t2 = sw2.elapsed();
  44. std::cout <<" "<< (t2-t1) << std::endl;
  45. //std::cout <<" "<< ((t2-t1)/size) << std::endl;
  46. std::size_t cnt=0;
  47. for (int i=size-1; i>0; --i)
  48. {
  49. if (vec[i]!=vec[i-1]) ++cnt;
  50. }
  51. std::cout <<"changes: "<< cnt << std::endl;
  52. }
  53. #ifdef BOOST_CHRONO_HAS_TIMES_AND_CLOCK
  54. void perf2(std::vector<clock_t>& vec)
  55. {
  56. Stopwatch sw;
  57. for (int i=size-1; i>=0; --i)
  58. {
  59. tms tm;
  60. vec[i]=::times(&tm);
  61. }
  62. std::cout << sw.elapsed() << std::endl;
  63. }
  64. void perf3(std::vector<clock_t>& vec)
  65. {
  66. Stopwatch sw;
  67. for (int i=size-1; i>=0; --i)
  68. {
  69. vec[i]=::clock();
  70. }
  71. std::cout << sw.elapsed() << std::endl;
  72. }
  73. void test2()
  74. {
  75. std::vector<clock_t> vec(size);
  76. perf2(vec);
  77. std::size_t cnt=0;
  78. for (int i=10; i>0; --i)
  79. {
  80. if (vec[i]!=vec[i-1]) ++cnt;
  81. std::cout << vec[i] << " " ;
  82. }
  83. std::cout<< std::endl;
  84. std::cout <<"changes: "<< cnt << std::endl;
  85. }
  86. void test3()
  87. {
  88. std::vector<clock_t> vec(size);
  89. perf3(vec);
  90. std::size_t cnt=0;
  91. for (int i=10; i>0; --i)
  92. {
  93. if (vec[i]!=vec[i-1]) ++cnt;
  94. std::cout << vec[i] << " " ;
  95. }
  96. std::cout<< std::endl;
  97. std::cout <<"changes: "<< cnt << std::endl;
  98. }
  99. #endif
  100. int main() {
  101. std::cout << "system_clock ";
  102. test<boost::chrono::system_clock>();
  103. #ifdef BOOST_CHRONO_HAS_CLOCK_STEADY
  104. std::cout << "steady_clock " ;
  105. test<boost::chrono::steady_clock>();
  106. #endif
  107. std::cout << "high_resolution_clock " ;
  108. test<boost::chrono::high_resolution_clock>();
  109. #if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
  110. std::cout << "process_real_cpu_clock ";
  111. test<boost::chrono::process_real_cpu_clock>();
  112. #if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
  113. std::cout << "process_user_cpu_clock ";
  114. test<boost::chrono::process_user_cpu_clock>();
  115. std::cout << "process_system_cpu_clock " ;
  116. test<boost::chrono::process_system_cpu_clock>();
  117. std::cout << "process_cpu_clock " ;
  118. test<boost::chrono::process_cpu_clock>();
  119. #endif
  120. #endif
  121. std::cout << "system_clock ";
  122. test<boost::chrono::system_clock>();
  123. #if 0
  124. std::cout << "times ";
  125. test2();
  126. std::cout << "clock ";
  127. test3();
  128. #endif
  129. return 1;
  130. }