#include "pch.h" #include #include #include #include #include #include using namespace std; #define MATRIX_SIZE 200 #define MAX_RANDOM 100 void czekaj(int milis) { time_t koniec; koniec = clock() + milis; while (koniec > clock()) {}; } int main() { time_t pocz, czas; int numerw; srand((unsigned)time(nullptr)); float matrixA[MATRIX_SIZE][MATRIX_SIZE]; float matrixB[MATRIX_SIZE][MATRIX_SIZE]; float matrixC[MATRIX_SIZE][MATRIX_SIZE]; float matrixD[MATRIX_SIZE][MATRIX_SIZE]; float matrixAB[MATRIX_SIZE][MATRIX_SIZE]; float matrixCD[MATRIX_SIZE][MATRIX_SIZE]; pocz = clock(); for (int i = 0; i < MATRIX_SIZE; i++) { // czekaj(2); for (int j = 0; j < MATRIX_SIZE; j++) { matrixA[i][j] = (rand() % MAX_RANDOM) + 1; matrixB[i][j] = (rand() % MAX_RANDOM) + 1; } } cout << "Czas trwania operacji 1: " << (clock() - pocz) << endl << endl; //Tablica A i B rownolegle pocz = clock(); for (int i = 0; i < MATRIX_SIZE; i++) { // czekaj(2); for (int j = 0; j < MATRIX_SIZE; j++) { #pragma (omp parallel) num_threads(2) private(numerw) { numerw = omp_get_thread_num(); if (numerw == 0) matrixA[i][j] = (rand() % MAX_RANDOM) + 1; if (numerw == 1) matrixB[i][j] = (rand() % MAX_RANDOM); } } } cout<< "Czas trwania operacji 1 rownolegle: " << (clock() - pocz) << endl << endl; int minB = matrixB[0][0]; int maxA = matrixA[0][0]; // tablice C i D pocz = clock(); for (int i = 0; i < MATRIX_SIZE; i++) { //czekaj(4); for (int j = 0; j < MATRIX_SIZE; j++) { matrixC[i][j] = 1 / matrixA[i][j]; matrixD[i][j] = sqrt(matrixB[i][j]); } } cout << "Czas trwania operacji 2: " << (clock() - pocz) << endl << endl; // tablice C i D rownolegle pocz = clock(); for (int i = 0; i < MATRIX_SIZE; i++) { //czekaj(4); for (int j = 0; j < MATRIX_SIZE; j++) { #pragma (omp parallel) num_threads(2) private(numerw) { numerw = omp_get_thread_num(); if(numerw == 0) matrixC[i][j] = 1 / matrixA[i][j]; if(numerw == 1) matrixD[i][j] = sqrt(matrixB[i][j]); } } } cout << "Czas trwania operacji 2 rownolegle: " << (clock() - pocz) << endl << endl; //tablica AB i CD pocz = clock(); for (int i = 0; i < MATRIX_SIZE; i++) { //czekaj(4); for (int j = 0; j < MATRIX_SIZE; j++) { matrixAB[i][j] = matrixA[i][j] + matrixB[i][j]; matrixCD[i][j] = matrixC[i][j] * matrixD[i][j]; } } cout << "Czas trwania operacji 3: " << (clock() - pocz) << endl << endl; //tablica AB i CD rownolegle pocz = clock(); for (int i = 0; i < MATRIX_SIZE; i++) { //czekaj(4); for (int j = 0; j < MATRIX_SIZE; j++) { #pragma (omp parallel) num_threads(2) private(numerw) { numerw = omp_get_thread_num(); if(numerw == 0)matrixAB[i][j] = matrixA[i][j] + matrixB[i][j]; if(numerw == 1)matrixCD[i][j] = matrixC[i][j] * matrixD[i][j]; } } } cout << "Czas trwania operacji 3 rownolegle: " << (clock() - pocz) << endl << endl; //MaxA i minB pocz = clock(); for (int i = 0; i < MATRIX_SIZE; i++) { //czekaj(4); for (int j = 0; j < MATRIX_SIZE; j++) { if (matrixA[i][j] > maxA) maxA = matrixA[i][j]; if (matrixB[i][j] < minB) minB = matrixB[i][j]; } } cout << "Czas trwania operacji 4: " << (clock() - pocz) << endl << endl; cout << "Maksymalna liczba z tablicy A: " << maxA << endl; cout << "Maksymalna liczba z tablicy A: " << minB << endl; getchar(); return 0; }