diff --git a/DergunPiotr-WaskoDominik/zad1/macierz_omp.cpp b/DergunPiotr-WaskoDominik/zad1/macierz_omp.cpp index 7d67487..5ec062a 100644 --- a/DergunPiotr-WaskoDominik/zad1/macierz_omp.cpp +++ b/DergunPiotr-WaskoDominik/zad1/macierz_omp.cpp @@ -1,18 +1,22 @@ #include #include -#include +#include +#include using namespace std; -void array_alloc(double **arr, long arrsize) +void array_alloc(long **&arr, long arrsize) { try { - arr = new double* [arrsize]; - arr[0] = new double [arrsize*arrsize]; + arr = new long* [arrsize]; + + + arr[0] = new long [arrsize*arrsize]; - for(long i = 1; i < arrsize; i++) + for(long i = 1; i < arrsize; ++i) arr[i] = arr[i-1] + arrsize; + } catch (bad_alloc& ex) { @@ -21,7 +25,7 @@ void array_alloc(double **arr, long arrsize) } } -void array_destroy(double **arr) +void array_destroy(long **arr) { delete [] arr[0]; delete [] arr; @@ -29,9 +33,10 @@ void array_destroy(double **arr) int main(int argc, char *argv[]) { - double **A=NULL;//, **B=NULL, **C=NULL; + long **A=NULL, **B=NULL, **C=NULL; long rozmiar=0; char *endptr; + int threads_num=0; if (argc < 3) { @@ -52,10 +57,44 @@ int main(int argc, char *argv[]) cerr << "The number of matrix dimension must be positive" << endl; exit(1); } + + threads_num = strtol(argv[1], &endptr, 10); + + if (*endptr) + { + cerr << "Invalid number of threads format" << endl; + exit(1); + } + + if (threads_num <= 0) + { + cerr << "The number of threads must be positive" << endl; + exit(1); + } + + //ustawienie odpowiedniej ilosci watkow + omp_set_num_threads(threads_num); + + //alokacja macierzy array_alloc(A, rozmiar); - getchar(); + array_alloc(B, rozmiar); + array_alloc(C, rozmiar); - //jeszcze czyszczenie pamięci + //wypelnienie macierzy A liczbami "losowymi" + for (long i=0; i