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