Untitled
unknown
plain_text
3 years ago
2.8 kB
11
Indexable
/* gcc OpenMP_Matrix_Add.c -o OpenMP_Matrix_Add -fopenmp -lgomp && ./OpenMP_Matrix_Add n p max_rep gcc problema1_mp_2_matrici.c -o problema1_mp_2_matrici -fopenmp -lgomp ./problema1_mp_2_matrici 1024 1 1 n p repetii */ #include <math.h> #include <omp.h> #include <stdio.h> #include <stdlib.h> #include <sys/time.h> int main(int argc, char const *argv[]) { int n = 1024, p = 4, max_rep = 1; float **Jianu, **IonutBogdan; float JianuIonutBogdan; int i, j, rep, k; struct timeval t1, t2; float tp; // Citire parametri if (argc >= 2) n = atoi(argv[1]); if (argc >= 3) p = atoi(argv[2]); if (argc >= 4) max_rep = atoi(argv[3]); // Testare parametri if (n <= 1) { printf("Eroare n < 2\n"); exit(0); } if (p < 1) { printf("Eroare p < 1\n"); exit(0); } if (max_rep < 1) { printf("Eroare max_rep < 1\n"); exit(0); } // Alocarea datelor Jianu = (float **)malloc(sizeof(float *) * n); IonutBogdan = (float **)malloc(sizeof(float *) * n); for (i = 0; i < n; i++) { Jianu[i] = (float *)malloc(sizeof(float) * n); IonutBogdan[i] = (float *)malloc(sizeof(float) * n); } // Initializarea matricilor if (n <= 16) { for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { Jianu[i][j] = i; IonutBogdan[i][j] = i; } } } gettimeofday(&t1, NULL); for (rep = 0; rep < max_rep; rep++) { // Algorimul secvential: if (p == 1) { for (i = 0; i < n; i++) JianuIonutBogdan+=Jianu[i][i]*IonutBogdan[i][i]; } // paralel else { //fiecare thread p, va avea i-ul si j-ul lui; A,X shared #pragma omp parallel num_threads(p) shared(Jianu, IonutBogdan, JianuIonutBogdan) private(i, j) { // primul for care urmeaza dupa #pragma omp for va fi partitionat !! #pragma omp for for (i = 0; i < n; i++) { JianuIonutBogdan+=Jianu[i][i]*IonutBogdan[i][i]; } } } } gettimeofday(&t2, NULL); tp = ((float)(t2.tv_sec - t1.tv_sec) + 0.000001*(t2.tv_usec - t1.tv_usec))/max_rep; // Afisare timp executie mediat pe max_rep teste repetate printf("%d rep, n = %d, p = %d, t = %f sec\n", max_rep, n, p, tp); if (n <= 16) { for (i = 0; i < n; i++){ printf("%4.0f ",Jianu[i][i]); } for (i = 0; i < n; i++){ printf("%4.0f ", IonutBogdan[i][i]); } } return 0; }
Editor is loading...