Advertisement
loulett

time_measure

Feb 25th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #include <thread>
  2. #include <chrono>
  3. #include <random>
  4. #include <vector>
  5. #include <iostream>
  6. #include <numeric>
  7.  
  8. int BIG = 10000;
  9. std::vector<double> for_sum;
  10. std::vector<double> array;
  11.  
  12. void job(int num, int numberOfThreads) {
  13.     size_t start = num * (BIG / numberOfThreads), finish;
  14.     if (num + 1 < numberOfThreads) {
  15.         finish = (num + 1) * (BIG / numberOfThreads);
  16.     }
  17.     else {
  18.         finish = BIG;
  19.     }
  20.     for_sum.push_back(std::accumulate(array.begin() + start, array.begin() + finish, 0));
  21. }
  22.  
  23. int main() {
  24.     std::random_device rd;
  25.     std::mt19937 gen(rd());
  26.     std::uniform_real_distribution<> dis(0, 10000);
  27.     int numberOfThreads = 1;
  28.     for (;numberOfThreads < 20; numberOfThreads++) {
  29.         std::vector<std::thread> threads;
  30.         for (int i = 0; i < BIG; i++) {
  31.             array.push_back(dis(gen));
  32.         }
  33.         double ans = 0;
  34.         std::chrono::steady_clock::time_point start, end;
  35.         start = std::chrono::steady_clock::now();
  36.         for (int i = 0; i < numberOfThreads; i++) {
  37.             threads.push_back(std::thread(job, i, numberOfThreads));
  38.         }
  39.         ans = std::accumulate(for_sum.begin(), for_sum.end(), 0);
  40.         end = std::chrono::steady_clock::now();
  41.         for (auto&& t : threads)
  42.             t.join();
  43.         std::cout << numberOfThreads << ' ' << (end - start).count() << std::endl;
  44.     }
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement