fork(4) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. const int BUFFER_SIZE = 50000000;
  5. double* list = new double[BUFFER_SIZE];
  6.  
  7. double tightLoop() {
  8.  
  9. // VERSION 1
  10. // double sum = 0.0;
  11. // for (int i = 0; i < BUFFER_SIZE; ++i) {
  12. // sum += list[i];
  13. // }
  14. // return sum;
  15.  
  16. // VERSION 2. 7x faster!
  17. double sum = 0.0;
  18. for (int i = 0; i < BUFFER_SIZE; i+=4) {
  19. sum += list[i];
  20. sum += list[i + 1];
  21. sum += list[i + 2];
  22. sum += list[i + 3];
  23. }
  24. return sum;
  25.  
  26. // VERSION 3. No more gain than simple loop unrolling
  27. // double sum1 = 0.0, sum2 = 0.0, sum3 = 0.0, sum4 = 0.0;
  28. // for (int i = 0; i < BUFFER_SIZE; i += 4) {
  29. // sum1 += list[i];
  30. // sum2 += list[i + 1];
  31. // sum3 += list[i + 2];
  32. // sum4 += list[i + 3];
  33. // }
  34. // return (sum1 + sum2) + (sum3 + sum4);
  35. }
  36.  
  37. int main() {
  38.  
  39. double force = 0.0;
  40. force += tightLoop();
  41. force += tightLoop();
  42. force += tightLoop();
  43. force += tightLoop();
  44. force += tightLoop();
  45. force += tightLoop();
  46. force += tightLoop();
  47. cout << force;
  48. delete[] list;
  49. return 0;
  50. }
Success #stdin #stdout 0.17s 3296KB
stdin
Standard input is empty
stdout
Standard output is empty