Facebook
From Queen Sloth, 5 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 231
  1. #include "pch.h"
  2. #include <stdio.h>
  3. #include <cstdlib>
  4. #include <ctime>
  5. #include <math.h>
  6. #include <iostream>
  7. #include <omp.h>
  8.  
  9.  
  10. using namespace std;
  11.  
  12. #define MATRIX_SIZE 200
  13. #define MAX_RANDOM 100
  14.  
  15.  
  16.  
  17. void czekaj(int milis) {
  18.         time_t koniec;
  19.         koniec = clock() + milis;
  20.         while (koniec > clock()) {};
  21. }
  22.  
  23. int main()
  24. {
  25.         time_t pocz, czas;
  26.         int numerw;
  27.         srand((unsigned)time(nullptr));
  28.         float matrixA[MATRIX_SIZE][MATRIX_SIZE];
  29.         float matrixB[MATRIX_SIZE][MATRIX_SIZE];
  30.         float matrixC[MATRIX_SIZE][MATRIX_SIZE];
  31.         float matrixD[MATRIX_SIZE][MATRIX_SIZE];
  32.         float matrixAB[MATRIX_SIZE][MATRIX_SIZE];
  33.         float matrixCD[MATRIX_SIZE][MATRIX_SIZE];
  34.         pocz = clock();
  35.  
  36.         for (int i = 0; i < MATRIX_SIZE; i++) {
  37.                 // czekaj(2);
  38.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  39.                         matrixA[i][j] = (rand() % MAX_RANDOM) + 1;
  40.                         matrixB[i][j] = (rand() % MAX_RANDOM) + 1;
  41.                 }
  42.         }
  43.         cout << "Czas trwania operacji 1: " << (clock() - pocz) << endl << endl;
  44.  
  45.         //Tablica A i B rownolegle
  46.         pocz = clock();
  47.         for (int i = 0; i < MATRIX_SIZE; i++) {
  48.                 // czekaj(2);
  49.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  50. #pragma  (omp parallel) num_threads(2) private(numerw)
  51.                         {
  52.                                 numerw = omp_get_thread_num();
  53.                                 if (numerw == 0) matrixA[i][j] = (rand() % MAX_RANDOM) + 1;
  54.                                 if (numerw == 1) matrixB[i][j] = (rand() % MAX_RANDOM);
  55.                         }
  56.                 }
  57.         }
  58.         cout<< "Czas trwania operacji 1 rownolegle: " << (clock() - pocz) << endl << endl;
  59.  
  60.  
  61.         int minB = matrixB[0][0];
  62.         int maxA = matrixA[0][0];
  63.  
  64.         // tablice C i D
  65.         pocz = clock();
  66.         for (int i = 0; i < MATRIX_SIZE; i++) {
  67.                 //czekaj(4);
  68.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  69.                         matrixC[i][j] = 1 / matrixA[i][j];
  70.                         matrixD[i][j] = sqrt(matrixB[i][j]);
  71.                         }
  72.                 }
  73.        
  74.         cout << "Czas trwania operacji 2: " << (clock() - pocz) << endl << endl;
  75.  
  76.         // tablice C i D rownolegle
  77.         pocz = clock();
  78.         for (int i = 0; i < MATRIX_SIZE; i++) {
  79.                 //czekaj(4);
  80.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  81. #pragma  (omp parallel) num_threads(2) private(numerw)
  82.                         {
  83.                                 numerw = omp_get_thread_num();
  84.                                 if(numerw == 0)  matrixC[i][j] = 1 / matrixA[i][j];
  85.                                 if(numerw == 1)  matrixD[i][j] = sqrt(matrixB[i][j]);
  86.                         }
  87.                 }
  88.         }
  89.  
  90.         cout << "Czas trwania operacji 2 rownolegle: " << (clock() - pocz) << endl << endl;
  91.  
  92.         //tablica AB i CD
  93.         pocz = clock();
  94.         for (int i = 0; i < MATRIX_SIZE; i++) {
  95.                 //czekaj(4);
  96.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  97.                         matrixAB[i][j] = matrixA[i][j] + matrixB[i][j];
  98.                         matrixCD[i][j] = matrixC[i][j] * matrixD[i][j];
  99.                 }
  100.         }
  101.  
  102.         cout << "Czas trwania operacji 3: " << (clock() - pocz) << endl << endl;
  103.  
  104.         //tablica AB i CD rownolegle
  105.         pocz = clock();
  106.         for (int i = 0; i < MATRIX_SIZE; i++) {
  107.                 //czekaj(4);
  108.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  109. #pragma  (omp parallel) num_threads(2) private(numerw)
  110.                         {
  111.                                 numerw = omp_get_thread_num();
  112.                                 if(numerw == 0)matrixAB[i][j] = matrixA[i][j] + matrixB[i][j];
  113.                                 if(numerw == 1)matrixCD[i][j] = matrixC[i][j] * matrixD[i][j];
  114.                         }
  115.                 }
  116.         }
  117.  
  118.         cout << "Czas trwania operacji 3 rownolegle: " << (clock() - pocz) << endl << endl;
  119.  
  120.         //MaxA i minB
  121.         pocz = clock();
  122.         for (int i = 0; i < MATRIX_SIZE; i++) {
  123.                 //czekaj(4);
  124.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  125.                         if (matrixA[i][j] > maxA) maxA = matrixA[i][j];
  126.                         if (matrixB[i][j] < minB) minB = matrixB[i][j];
  127.                 }
  128.         }
  129.         cout << "Czas trwania operacji 4: " << (clock() - pocz) << endl << endl;
  130.  
  131.  
  132.         cout << "Maksymalna liczba z tablicy A: " << maxA << endl;
  133.         cout << "Maksymalna liczba z tablicy A: " << minB << endl;
  134.        
  135.        
  136.        
  137.        
  138.         getchar();
  139.         return 0;
  140. }
  141.