- #include "pch.h"
- #include <iostream>
- #include <conio.h>
- #include <math.h>
- #include <ctime>
- #include <omp.h>
- using namespace std;
- int main()
- {
- time_t pocz, czas; //do liczenia czasu wykonywania
- int numerw = 0; //numer watku
- int lproc, irob;
- int zakres = 50000; //zakres losowanie tablicy
- int A[200][200];
- int B[200][200];
- int C[200][200];
- int D[200][200];
- int AB[200][200];
- int CD[200][200];
- int maxA = 0;
- int minB = zakres;
- void czekaj(int milis);
- /*
- //watki
- lproc = omp_get_num_procs();
- cout << "liczba procesorow: " << lproc << endl;
- irob = omp_get_max_threads();
- cout << "maksymalna liczba watkow: " << irob << endl << endl;
- */
- //tablica A i B
- pocz = clock();
- for (int i = 0; i < 200; ++i)
- {
- //czekaj(5);
- for (int j = 0; j < 200; ++j)
- {
- A[i][j] = (rand() % zakres) + 1;
- B[i][j] = rand() % zakres;
- }
- }
- cout << "Czas trwania operacji 1: " << (clock() - pocz) << endl;
- //tablica A i B rownolegle
- /* pocz = clock();
- for (int i = 0; i < 200; ++i)
- {
- //czekaj(5);
- for (int j = 0; j < 200; j += 8)
- {
- #pragma (omp parallel) num_threads(2) private(numerw)
- {
- numerw = omp_get_thread_num();
- if (numerw == 0) A[i][j] = (rand() % zakres) + 1;
- if (numerw == 1) B[i][j] = rand() % zakres;
- }
- }
- }
- cout << "Czas trwania operacji 1 rownolegle: " << (clock() - pocz) << endl << endl;
- */
- //tablica C i D
- pocz = clock();
- for (int i = 0; i < 200; ++i)
- {
- //czekaj(3);
- for (int j = 0; j < 200; ++j)
- {
- C[i][j] = (1 / A[i][j]);
- D[i][j] = sqrt(B[i][j]);
- }
- }
- cout << "Czas trwania operacji 2: " << (clock() - pocz) << endl;
- /* //tablica C i D rownolegle
- pocz = clock();
- for (int i = 0; i < 200; ++i)
- {
- //czekaj(3);
- for (int j = 0; j < 200; ++j)
- {
- #pragma (omp parallel) num_threads(2) private(numerw)
- {
- numerw = omp_get_thread_num();
- if (numerw == 0) C[i][j] = (1 / A[i][j]);
- if (numerw == 1) D[i][j] = sqrt(B[i][j]);
- }
- }
- }
- cout << "Czas trwania operacji 2 rownolegle: " << (clock() - pocz) << endl << endl;
- */
- //tablica AB i CD
- pocz = clock();
- for (int i = 0; i < 200; ++i)
- {
- //czekaj(3);
- for (int j = 0; j < 200; ++j)
- {
- AB[i][j] = A[i][j] + B[i][j];
- CD[i][j] = C[i][j] * D[i][j];
- }
- }
- cout << "Czas trwania operacji 3: " << (clock() - pocz) << endl;
- /* //tablica AB i CD rownolegle
- pocz = clock();
- for (int i = 0; i < 200; ++i)
- {
- //czekaj(3);
- for (int j = 0; j < 200; ++j)
- {
- #pragma (omp parallel) num_threads(2) private(numerw)
- {
- numerw = omp_get_thread_num();
- if (numerw == 0) AB[i][j] = A[i][j] + B[i][j];
- if (numerw == 1) CD[i][j] = C[i][j] * D[i][j];
- }
- }
- }
- cout << "Czas trwania operacji 3 rownolegle: " << (clock() - pocz) << endl << endl;
- */
- //maxA i minB
- pocz = clock();
- for (int i = 0; i < 200; ++i)
- {
- //czekaj(3);
- for (int j = 0; j < 200; ++j)
- {
- if (A[i][j] > maxA)
- maxA = A[i][j];
- if (B[i][j] < minB)
- minB = B[i][j];
- }
- }
- cout << "Czas trwania operacji 4: " << (clock() - pocz) << endl << endl;
- cout << "Maksymalna liczba z tablicy A: " << maxA << endl;
- cout << "Minimalna liczba z tablicy B: " << minB << endl;
- _getch();
- return 0;
- }
- void czekaj(int milis) {
- time_t koniec;
- koniec = clock() + milis;
- while (koniec > clock()) {};
- }