fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. #include <future>
  5. #include <chrono>
  6. #include <cmath>
  7.  
  8. int main() {
  9.  
  10. {
  11. std::vector<double> vin(10000000, 5.0);
  12. std::vector<double> vout(10000000);
  13.  
  14. auto s = std::chrono::system_clock::now();
  15.  
  16. for (int i = 0; i < 10000000; i++)
  17. vout[i] = pow(vin[i] * vin[i] / 4.0, vin[i] * vin[i] / 4.0);
  18.  
  19. std::cout << (std::chrono::system_clock::now() - s).count() << std::endl;
  20. }
  21.  
  22. {
  23. std::cout << std::thread::hardware_concurrency() << std::endl;
  24.  
  25. std::vector<double> vin(10000000, 5.0);
  26. std::vector<double> vout(10000000);
  27.  
  28. auto s = std::chrono::system_clock::now();
  29.  
  30. std::list<std::future<void>> fs;
  31.  
  32. auto f = [&vin, &vout](int i1, int i2){
  33. for (int i = i1; i < i2; i++)
  34. vout[i] = pow(vin[i] * vin[i] / 4.0, vin[i] * vin[i] / 4.0);
  35. };
  36.  
  37. for (int i = 0; i < 10 ; i++) {
  38. fs.emplace_back(std::async(std::launch::async, f, i*1000000, (i+1)*1000000));
  39. }
  40.  
  41. for (auto& f : fs) f.get();
  42.  
  43. std::cout << (std::chrono::system_clock::now() - s).count() << std::endl;
  44. }
  45.  
  46. return 0;
  47. }
Success #stdin #stdout 0.78s 159800KB
stdin
Standard input is empty
stdout
355242576
8
341057049