fork(3) download
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <ctime>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. class mytimer
  9. {
  10. public:
  11. mytimer() { _start_time = clock(); }
  12. void restart() { _start_time = clock(); }
  13. clock_t elapsed() const
  14. { return clock() - _start_time; }
  15.  
  16. private:
  17. clock_t _start_time;
  18. }; // timer
  19.  
  20. int main()
  21. {
  22. const int num_samples = 1000;
  23. float* samples = new float[num_samples];
  24. mytimer timer;
  25. for (int x = 0 ; x != 100000 ; x++) {
  26. for (int i = 0; i < num_samples; i++) {
  27. samples[i] = 1.f;
  28. }
  29. }
  30. double result = timer.elapsed();
  31. std::cout << "rewrite of " << (num_samples*sizeof(float)/(1024*1024)) << " Mb takes " << result << std::endl;
  32.  
  33. timer.restart();
  34. float sum;
  35. for (int x = 0 ; x != 100000 ; x++) {
  36. sum=0;
  37. for (int i = 0; i < num_samples; i++) {
  38. sum += samples[i];
  39. }
  40. }
  41. result = timer.elapsed();
  42. std::cout << "naive:\t\t" << result << ", sum = " << sum << std::endl;
  43.  
  44. timer.restart();
  45. float* end = samples + num_samples;
  46. for (int x = 0 ; x != 100000 ; x++) {
  47. sum = 0;
  48. for(float* i = samples; i < end; i++) {
  49. sum += *i;
  50. }
  51. }
  52. result = timer.elapsed();
  53. std::cout << "pointers:\t" << result << ", sum = " << sum << std::endl;
  54.  
  55. timer.restart();
  56. sum = 0;
  57. for (int x = 0 ; x != 100000 ; x++) {
  58.  
  59. sum = std::accumulate(samples, end, 0.0F);
  60. }
  61. result = timer.elapsed();
  62. std::cout << "algorithm:\t" << result << ", sum = " << sum << std::endl;
  63.  
  64. }
  65.  
Success #stdin #stdout 0.63s 3472KB
stdin
Standard input is empty
stdout
rewrite of 0 Mb takes 90000
naive:		180000, sum = 1000
pointers:	180000, sum = 1000
algorithm:	180000, sum = 1000