Facebook
From Filip Wicha, 5 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 268
  1. #include <iostream>
  2. #include <omp.h>
  3. #include <time.h>
  4. #include <chrono>
  5. #include <iomanip>
  6.  
  7. double factorial(double n)
  8. {
  9.         return (n == 1 || n == 0) ? 1 : factorial(n - 1) * n;
  10. }
  11.  
  12. int main()
  13. {
  14.         double accuracy;
  15.         long numberOfLoops = 1;
  16.         std::cout << "Set accuracy: \n";
  17.         std::cin >> accuracy;
  18.         std::cout << " \n";
  19.         double e = 0;
  20.         long minTime = INFINITY;
  21.         long maxTime = 0;
  22.         long sq_time = 0;
  23.         long mt_time = 0;
  24.  
  25.         auto start = std::chrono::high_resolution_clock::now();
  26.         auto finish = std::chrono::high_resolution_clock::now();
  27.  
  28.  
  29.         //Sequenial
  30.         std::cout << "Sequential:\n";
  31.         {
  32.                 e = 0;
  33.                 start = std::chrono::high_resolution_clock::now();
  34.                 ////////////////////////
  35.                 for (double i = 0; i <= accuracy; i++)
  36.                 {
  37.                         e += 1/factorial(i);
  38.                 }
  39.                 ////////////////////////
  40.                 finish = std::chrono::high_resolution_clock::now();
  41.                 long currentTime = std::chrono::duration_cast<std::chrono::nanoseconds>(finish - start).count();
  42.                 sq_time += currentTime;
  43.         }
  44.  
  45.         std::cout << "Time  = " << sq_time / numberOfLoops << "ns\n";
  46.         std::cout << "e number  =       " << std::setprecision(30) << e << "\n\n";
  47.         e = 0;
  48.  
  49.  
  50.         minTime = INFINITY;
  51.         maxTime = 0;
  52.  
  53.         //Parallel
  54.         std::cout << "Parallel:\n";
  55.         {
  56.                 e = 0;
  57.                 start = std::chrono::high_resolution_clock::now();
  58.                 ////////////////////////
  59. #pragma omp parallel for
  60.                 for (double i = 0; i <= accuracy; i++)
  61.                 {
  62.                         e += 1 / factorial(i);
  63.                 }
  64.                 ////////////////////////
  65.  
  66.  
  67.                 finish = std::chrono::high_resolution_clock::now();
  68.                 long currentTime = std::chrono::duration_cast<std::chrono::nanoseconds>(finish - start).count();
  69.                 mt_time += currentTime;
  70.         }
  71.  
  72.         std::cout << "Avg time  = " << mt_time / numberOfLoops << "ns\n";
  73.         std::cout << "e number  =       " << std::setprecision(30) << e << "\n\n";
  74.         e = 0;
  75.  
  76.  
  77.         std::cin.ignore(2);
  78.         return 0;
  79. }