Advertisement
Guest User

Untitled

a guest
Mar 7th, 2017
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <string>
  4. #include <ctime>
  5. #include <cstdlib>
  6. #include <fstream>
  7. #include <omp.h>
  8.  
  9. using namespace std;
  10.  
  11. int *arr_sum(const int *a, const int *b, int N) {
  12.     int *c = new int[N];
  13.     for (int i = 0; i < N; i++)
  14.         c[i] = a[i] + b[i];
  15.  
  16.     return c;
  17. }
  18.  
  19. int *arr_sum_par(const int *a, const int *b, int N) {
  20.     int *c = new int[N];
  21.     int i = 0;
  22.  
  23.     omp_set_dynamic(0);
  24.     int nThreads = omp_get_max_threads();
  25.     if (!nThreads) nThreads = 2;
  26.     omp_set_num_threads(nThreads);
  27.  
  28.     #pragma omp parallel shared(a, b, c) private(i, N)
  29.     {
  30.         #pragma omp parallel for
  31.         for (i = 0; i < N; i++)
  32.             c[i] = a[i] + b[i];
  33.     }
  34.  
  35.     return c;
  36. }
  37.  
  38. void print_arr(string filename, int *arr, int N) {
  39.     ofstream out(filename);
  40.     for (int i = 0; i < N; i++)
  41.         out << arr[i] << " ";
  42.     out << endl;
  43.     out.close();
  44. }
  45.  
  46. int main() {
  47.     srand(time(NULL));
  48.  
  49.     int N = 50000;
  50.     int *a = new int[N];
  51.     int *b = new int[N];
  52.     int *c = nullptr;
  53.  
  54.     for (int i = 0; i < N; i++) {
  55.         a[i] = rand() % N;
  56.         b[i] = rand() % N;
  57.     }
  58.  
  59.     double start = clock()/(double)CLOCKS_PER_SEC;
  60.     c = arr_sum(a, b, N);
  61.     double finish = clock()/(double)CLOCKS_PER_SEC;
  62.     const double time1 = finish - start;
  63.  
  64.     print_arr("sum.txt", c, N);
  65.     delete[] c;
  66.  
  67.     start = clock()/(double)CLOCKS_PER_SEC;
  68.     c = arr_sum_par(a, b, N);
  69.     finish = clock()/(double)CLOCKS_PER_SEC;
  70.     const double time2 = finish - start;
  71.  
  72.     print_arr("sum_par.txt", c, N);
  73.     delete[] c;
  74.  
  75.     cout << "time1: " << time1 << endl;
  76.     cout << "time2: " << time2 << endl;
  77.  
  78.     delete[] a;
  79.     delete[] b;
  80.  
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement