#include "pch.h"
#include <stdio.h>
#include <cstdlib>
#include <ctime>
#include <math.h>
#include <iostream>
#include <omp.h>
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;
}