Advertisement
Guest User

code

a guest
Mar 2nd, 2019
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <omp.h>
  4.  
  5. #define n 1000
  6. using namespace std;
  7. double par, seq;
  8. bool show_c = 0;
  9. float A[n][n] = { 0 };
  10. float B[n] = { 0 };
  11. float C0[n] = { 0 };
  12. float C1[n] = { 0 };
  13. float C2[n] = { 0 };
  14. float C4[n] = { 0 };
  15.  
  16. void print_vector(float arr[n]) {
  17.     for (int i = 0; i < n; i++) {
  18.         printf("%.2f ", arr[i]);
  19.     }
  20.     cout << "\n";
  21. }
  22.  
  23. void parallel_method(float A[n][n], float B[n], float C[n], int thr_num)
  24. {
  25.     double t1, t2;
  26.     float tmp = 0;
  27.     int i, j;
  28.  
  29.     t1 = omp_get_wtime();
  30.     omp_set_dynamic(0);
  31.     omp_set_num_threads(thr_num);
  32. #pragma omp parallel private(tmp, j)
  33.     {
  34. #pragma omp for
  35.         for (i = 0; i < n; i++) {
  36.             tmp = 0;
  37.             for (j = 0; j < n; j++) {
  38.                 tmp += A[i][j] * B[j];
  39.             }
  40.             C[i] += tmp;
  41.         }
  42.         t2 = omp_get_wtime();
  43.     }
  44.     if (show_c) print_vector(C);
  45.     par = t2 - t1;
  46.     printf("Parallel_method (%d c) time = %.15f\n", thr_num, par);
  47.     //printf("Parallel Speedup = %.3f\n", seq / par);
  48.     //printf("Parallel Efficiency = %.3f\n", seq / (par * thr_num));
  49. }
  50.  
  51. void sequential_method(float A[n][n], float B[n], float C[n])
  52. {
  53.     double ts1, ts2;
  54.     float tmp = 0;
  55.  
  56.     ts1 = omp_get_wtime();
  57.     for (int i = 0; i < n; i++) {
  58.         tmp = 0;
  59.         for (int j = 0; j < n; j++) {
  60.             tmp += A[i][j] * B[j];
  61.         }
  62.         C[i] = tmp;
  63.     }
  64.  
  65.     ts2 = omp_get_wtime();
  66.  
  67.     if (show_c) print_vector(C);
  68.     seq = ts2 - ts1;
  69.     printf("seq_method time = %.15f\n", seq);
  70. }
  71.  
  72. int main()
  73. {
  74.     for (int i = 0; i < n; i++) {
  75.         for (int j = 0; j < n; j++) {
  76.             A[i][j] = (float)(i + 1) * log(j + 1);
  77.         }
  78.         B[i] = (float)sqrt(i + 1);
  79.     }
  80.     cout << "n = " << n << endl << endl;
  81.     sequential_method(A, B, C0);
  82.     parallel_method(A, B, C1, 1);
  83.     parallel_method(A, B, C2, 2);
  84.     parallel_method(A, B, C4, 4);
  85.    
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement