Facebook
From Whipped Guinea Pig, 5 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 229
  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.         pocz = clock();
  29.         float matrixA[MATRIX_SIZE][MATRIX_SIZE];
  30.         float matrixB[MATRIX_SIZE][MATRIX_SIZE];
  31.         float matrixC[MATRIX_SIZE][MATRIX_SIZE];
  32.         float matrixD[MATRIX_SIZE][MATRIX_SIZE];
  33.         float matrixAB[MATRIX_SIZE][MATRIX_SIZE];
  34.         float matrixCD[MATRIX_SIZE][MATRIX_SIZE];
  35. #pragma omp parallel for
  36.         for (int i = 0; i < MATRIX_SIZE; i++) {
  37.                 czekaj(2);
  38.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  39. #pragma omp parallel num_threads(2) private(numerw) shared(matrixA, matrixB)
  40.                         { numerw = omp_get_thread_num();
  41.                         if (numerw == 0) matrixA[i][j] = (rand() % MAX_RANDOM)*0.1234 + 1.111;
  42.                         if (numerw == 1) matrixB[i][j] = (rand() % MAX_RANDOM)*0.345 + 1.333;
  43.                         }
  44.                 }
  45.         };
  46.        
  47.         cout << "Czas trwania operacji 1: " << (clock() - pocz) << endl << endl;
  48.  
  49.         int minB = matrixB[0][0];
  50.         int maxA = matrixA[0][0];
  51.  
  52.         pocz = clock();
  53. #pragma omp parallel for
  54.         for (int i = 0; i < MATRIX_SIZE; i++) {
  55.                 czekaj(4);
  56.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  57. #pragma omp parallel num_threads(2) private(numerw)
  58.                         {numerw = omp_get_thread_num();
  59.                         if (numerw == 2)matrixC[i][j] = 1 / matrixA[i][j];
  60.                         if (numerw == 3)matrixD[i][j] = sqrt(matrixB[i][j]);
  61.                         }
  62.                 }
  63.         };
  64.         cout << "Czas trwania operacji 2: " << (clock() - pocz) << endl << endl;
  65.  
  66.         pocz = clock();
  67.         for (int i = 0; i < MATRIX_SIZE; i++) {
  68.                 czekaj(4);
  69.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  70.                         matrixAB[i][j] = matrixA[i][j] + matrixB[i][j];
  71.                 }
  72.         }
  73.  
  74.         pocz = clock();
  75.         for (int i = 0; i < MATRIX_SIZE; i++) {
  76.                 czekaj(4);
  77.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  78.                         matrixCD[i][j] = matrixC[i][j] * matrixD[i][j];
  79.                 }
  80.         }
  81.         cout << "Czas trwania operacji 4: " << (clock() - pocz) << endl << endl;
  82.  
  83.         pocz = clock();
  84.         for (int i = 0; i < MATRIX_SIZE; i++) {
  85.                 czekaj(4);
  86.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  87.                         if (matrixA[i][j] > maxA) maxA = matrixA[i][j];
  88.                 }
  89.         }
  90.         cout << "Czas trwania operacji 5: " << (clock() - pocz) << endl << endl;
  91.        
  92.         pocz = clock();
  93.         for (int i = 0; i < MATRIX_SIZE; i++) {
  94.                 czekaj(4);
  95.                 for (int j = 0; j < MATRIX_SIZE; j++) {
  96.                         if (matrixB[i][j] < minB) minB = matrixB[i][j];
  97.                 }
  98.         }
  99.         cout << "Czas trwania operacji 6: " << (clock() - pocz) << endl << endl;
  100.        
  101.        
  102.        
  103.        
  104.         return 0;
  105. }