Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ---- Lab 2 -----
- ---- fake ------
- ---- lab 3 ------
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <omp.h>
- #define N 500
- #define M 600
- #define P 700
- int main() {
- srand(time(NULL));
- int i, j, k;
- double suma = 0;
- double** dyn_matrix1;
- dyn_matrix1 = (double**)malloc(N * sizeof(double*));
- for(i = 0; i < N; i++)
- dyn_matrix1[i] = (double*)malloc(M * sizeof(double));
- double** dyn_matrix2;
- dyn_matrix2 = (double**)malloc(M * sizeof(double*));
- for(i = 0; i < M; i++)
- dyn_matrix2[i] = (double*)malloc(P * sizeof(double));
- double** dyn_result;
- dyn_result = (double**)malloc(N * sizeof(double*));
- for(i = 0; i < N; i++)
- dyn_result[i] = (double*)malloc(P * sizeof(double));
- double** dyn_result_serial;
- dyn_result_serial = (double**)malloc(N * sizeof(double*));
- for(i = 0; i < N; i++)
- dyn_result_serial[i] = (double*)malloc(P * sizeof(double));
- for (i = 0; i < N; i++) {
- for (j = 0; j < M; j++)
- dyn_matrix1[i][j] = rand() % 1000;
- }
- for (i = 0; i < M; i++) {
- for (j = 0; j < P; j++)
- dyn_matrix2[i][j] = rand() % 1000;;
- }
- double start = omp_get_wtime();
- for (i = 0; i < N; i++) {
- #pragma omp parallel for num_threads(6) schedule(static) private(k) reduction(+:suma)
- for (j = 0; j < P; j++) {
- for (k = 0; k < M; k++) {
- suma = suma + dyn_matrix1[i][k] * dyn_matrix2[k][j];
- }
- dyn_result[i][j] = suma;
- suma = 0;
- }
- }
- printf("Czas równoległy: %f \n", omp_get_wtime() - start);
- suma = 0;
- start = omp_get_wtime();
- for (i = 0; i < N; i++) {
- for (j = 0; j < P; j++) {
- for (k = 0; k < M; k++) {
- suma = suma + dyn_matrix1[i][k] * dyn_matrix2[k][j];
- }
- dyn_result_serial[i][j] = suma;
- suma = 0;
- }
- }
- printf("Czas szeregowy: %f \n", omp_get_wtime() - start);
- for (i = 0; i < N; i++) {
- for (j = 0; j < P; j++) {
- if(dyn_result_serial[i][j] != dyn_result[i][j]) printf("NIE!");
- }
- }
- /*for (i = 0; i < N; i++) {
- for (j = 0; j < P; j++) {
- printf("%lf ", dyn_result[i][j]);
- }
- printf("\n");
- }
- printf("\n");printf("\n");
- for (i = 0; i < N; i++) {
- for (j = 0; j < P; j++) {
- printf("%lf ", dyn_result_serial[i][j]);
- }
- printf("\n");
- }*/
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement