Advertisement
Guest User

Untitled

a guest
Oct 17th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.98 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <map>
  4. #include <string>
  5. #include <fstream>
  6. #include <vector>
  7. #include "omp.h"
  8.  
  9. #define ll long long
  10.  
  11. using namespace std;
  12.  
  13. // Use naive method
  14. bool isPrime(ll n)
  15. {
  16.     if(n<2)
  17.         return false;
  18.        
  19.     for(ll i=2;i*i<=n;i++)
  20.         if(n%i==0)
  21.             return false;
  22.  
  23.     return true;
  24. }
  25.  
  26. // Read numbers from file and add to vector
  27. std::vector<ll> reaadFile(char* arg){
  28.     vector<ll> numbersFromFile;
  29.     std::ifstream infile(arg);
  30.     ll number;
  31.  
  32.     while (infile >> number) {
  33.         numbersFromFile.push_back(number);
  34.     }
  35.  
  36.     return numbersFromFile;
  37. }
  38.  
  39. int main(int argc, char** argv )
  40. {
  41.     if ( argc != 3 )
  42.     {
  43.         printf("Pass number of threads and file path\n");
  44.         return -1;
  45.     }
  46.     int numberOfThreads;
  47.     numberOfThreads= strtol(argv[1], NULL, 10);
  48.  
  49.     vector<ll> numbersFromFile = reaadFile(argv[2]);
  50.    
  51.     // Copy to array because std::vector is not thread safe
  52.     ll numbersFromFileArr[numbersFromFile.size()];
  53.     std::copy(numbersFromFile.begin(), numbersFromFile.end(), numbersFromFileArr);
  54.  
  55.     unsigned int i;
  56.     std::map<ll, string> results;
  57.     auto startTime = omp_get_wtime();
  58.  
  59.     #pragma omp parallel for default(none) shared(results, numbersFromFileArr) private(i) schedule(dynamic) num_threads(numberOfThreads)
  60.     for (i = 0 ; i < sizeof(numbersFromFileArr)/sizeof(numbersFromFileArr[0]) ; i++) {
  61.         if (isPrime(numbersFromFileArr[i])){
  62.             results.insert(std::make_pair(numbersFromFileArr[i], "prime"));
  63.         } else {
  64.             results.insert(std::make_pair(numbersFromFileArr[i], "composite"));
  65.         }
  66.     }
  67.  
  68.     auto finishTime = omp_get_wtime();
  69.     cout << "Time: " << ((finishTime - startTime) * 1000) << "ms\n" ;
  70.  
  71.     // Print results
  72.     std::map<ll, string>::iterator it = results.begin();
  73.     while(it != results.end())
  74.     {
  75.         std::cout<<it->first<<" "<<it->second<<std::endl;
  76.         it++;
  77.     }
  78.  
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement