Advertisement
Guest User

Untitled

a guest
Feb 18th, 2015
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. int main()
  2. {
  3. vector<thread> threads;
  4. threads.reserve(8);
  5. mutex m;
  6.  
  7. vector<int> ints;
  8. ints.reserve(8000000);
  9. for (int i = 0; i < 800000; ++i)
  10. ints.push_back(1);
  11.  
  12. int sum = 0;
  13. auto start = chrono::high_resolution_clock::now();
  14.  
  15. for (int i = 0; i < 800000; ++i)
  16. sum += ints[i];
  17.  
  18. auto end = chrono::high_resolution_clock::now();
  19. auto diff = end - start;
  20.  
  21. cout << "index loop: " << chrono::duration<double, milli> (diff).count() << "ms" << endl;
  22.  
  23. sum = 0;
  24. start = chrono::high_resolution_clock::now();
  25.  
  26. for (auto& val : ints)
  27. sum += val;
  28.  
  29. end = chrono::high_resolution_clock::now();
  30. diff = end - start;
  31.  
  32. cout << "range loop: " << chrono::duration<double, milli>(diff).count() << "ms" << endl;
  33.  
  34. sum = 0;
  35. start = chrono::high_resolution_clock::now();
  36.  
  37. for (auto it = ints.begin(); it != ints.end(); ++it)
  38. sum += *it;
  39.  
  40. end = chrono::high_resolution_clock::now();
  41. diff = end - start;
  42.  
  43. cout << "iterator loop: " << chrono::duration<double, milli>(diff).count() << "ms" << endl;
  44. sum = 0;
  45. vector<chrono::duration<double, milli>> times;
  46. times.resize(8);
  47.  
  48. auto func = [&](int start, int total, int index)
  49. {
  50. int partial_sum = 0;
  51.  
  52. auto s = chrono::high_resolution_clock::now();
  53. for (int i = start; i < start + total; ++i)
  54. partial_sum += ints[i];
  55. auto e = chrono::high_resolution_clock::now();
  56. auto d = e - s;
  57.  
  58. m.lock();
  59. cout << "thread " + to_string(index) + ": " << chrono::duration<double, milli>(d).count() << "ms" << endl;
  60. sum += partial_sum;
  61. m.unlock();
  62.  
  63. times[index] = chrono::duration<double, milli>(d);
  64. };
  65.  
  66. for (int i = 0; i < 8; ++i)
  67. threads.push_back(thread(func, i * 100000, 100000, i));
  68.  
  69. for (int i = 0; i < 8; ++i)
  70. threads[i].join();
  71.  
  72. chrono::duration<double, milli> total;
  73. for (int i = 0; i < 8; ++i)
  74. total += times[i];
  75.  
  76. cout << threads.size() << " threads total: " << total.count() << "ms" << endl;
  77. cout << sum << endl;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement