Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- #include <omp.h>
- #define WYMIAR 13
- main ()
- {
- double a[WYMIAR][WYMIAR];
- int n,i,j;
- for(i=0;i<WYMIAR;i++) for(j=0;j<WYMIAR;j++) a[i][j]=1.02*i+1.01*j;
- n=WYMIAR;
- double suma=0.0;
- for(i=0;i<WYMIAR;i++) {
- for(j=0;j<WYMIAR;j++) {
- suma += a[i][j];
- }
- }
- printf("Suma wyrazów tablicy: %lf\n", suma);
- omp_set_nested(1);
- printf("Petla z reduction dla static, liczba porcji 3\n");
- double suma_parallel=0.0;
- #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
- // ...
- for(i=0;i<WYMIAR;i++) {
- int id_w = omp_get_thread_num();
- // ...
- #pragma omp for schedule(static,3) reduction(+:suma_parallel) private(j)
- for(j=0;j<WYMIAR;j++) {
- suma_parallel += a[i][j];
- // ...
- printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
- }
- // ...
- printf("\n");
- }
- printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
- printf("Petla z reduction dla static, liczba porcji default\n");
- suma_parallel=0.0;
- #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
- // ...
- for(i=0;i<WYMIAR;i++) {
- int id_w = omp_get_thread_num();
- // ...
- #pragma omp for schedule(static) reduction(+:suma_parallel) private(j)
- for(j=0;j<WYMIAR;j++) {
- suma_parallel += a[i][j];
- // ...
- printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
- }
- // ...
- printf("\n");
- }
- printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
- printf("Petla z reduction dla dynamic, liczba porcji 3\n");
- suma_parallel=0.0;
- #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
- // ...
- for(i=0;i<WYMIAR;i++) {
- int id_w = omp_get_thread_num();
- // ...
- #pragma omp for schedule(dynamic,2) reduction(+:suma_parallel) private(j)
- for(j=0;j<WYMIAR;j++) {
- suma_parallel += a[i][j];
- // ...
- printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
- }
- }
- printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
- printf("Petla z reduction dla dynamic, liczba porcji default\n");
- suma_parallel=0.0;
- #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
- // ...
- for(i=0;i<WYMIAR;i++) {
- int id_w = omp_get_thread_num();
- // ...
- #pragma omp for schedule(dynamic) reduction(+:suma_parallel) private(j)
- for(j=0;j<WYMIAR;j++) {
- suma_parallel += a[i][j];
- // ...
- printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
- }
- // ...
- printf("\n");
- }
- printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
- //punkt 2
- printf("Punkt 2, (static,3)\n");
- suma_parallel=0.0;
- #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
- {
- double *tab;
- #pragma omp single copyprivate(tab)
- {
- tab = malloc(sizeof(double) * omp_get_num_threads());
- }
- // ...
- for(i=0;i<WYMIAR;i++) {
- int id_w = omp_get_thread_num();
- // ...
- #pragma omp for schedule(static,3) private(j) ordered
- for(j=0;j<WYMIAR;j++) {
- suma_parallel += a[i][j];
- // ...
- #pragma omp ordered
- printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
- }
- }
- #pragma omp single
- {
- int a;
- for(a=0;a<omp_get_num_threads();++a){
- suma_parallel += tab[a];
- }
- }
- }
- printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
- printf("Punkt 2, (static,default)\n");
- suma_parallel=0.0;
- #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
- {
- double *tab;
- #pragma omp single copyprivate(tab)
- {
- tab = malloc(sizeof(double) * omp_get_num_threads());
- }
- // ...
- for(i=0;i<WYMIAR;i++) {
- int id_w = omp_get_thread_num();
- // ...
- #pragma omp for schedule(static) private(j) ordered
- for(j=0;j<WYMIAR;j++) {
- suma_parallel += a[i][j];
- // ...
- #pragma omp ordered
- printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
- }
- }
- #pragma omp single
- {
- int a;
- for(a=0;a<omp_get_num_threads();++a){
- suma_parallel += tab[a];
- }
- }
- }
- printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
- printf("Punkt 2, (dynamic,2)\n");
- suma_parallel=0.0;
- #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
- {
- double *tab;
- #pragma omp single copyprivate(tab)
- {
- tab = malloc(sizeof(double) * omp_get_num_threads());
- }
- // ...
- for(i=0;i<WYMIAR;i++) {
- int id_w = omp_get_thread_num();
- // ...
- #pragma omp for schedule(dynamic,2) private(j) ordered
- for(j=0;j<WYMIAR;j++) {
- suma_parallel += a[i][j];
- // ...
- #pragma omp ordered
- printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
- }
- }
- #pragma omp single
- {
- int a;
- for(a=0;a<omp_get_num_threads();++a){
- suma_parallel += tab[a];
- }
- }
- }
- printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
- printf("Punkt 2, (dynamic,default)\n");
- suma_parallel=0.0;
- #pragma omp parallel default(none) shared(suma_parallel, a) private(i,j)
- {
- double *tab;
- #pragma omp single copyprivate(tab)
- {
- tab = malloc(sizeof(double) * omp_get_num_threads());
- }
- // ...
- for(i=0;i<WYMIAR;i++) {
- int id_w = omp_get_thread_num();
- // ...
- #pragma omp for schedule(dynamic) private(j) ordered
- for(j=0;j<WYMIAR;j++) {
- suma_parallel += a[i][j];
- // ...
- #pragma omp ordered
- printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
- }
- // ...
- printf("\n");
- }
- #pragma omp single
- {
- int a;
- for(a=0;a<omp_get_num_threads();++a){
- suma_parallel += tab[a];
- }
- }
- }
- printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
- printf("Punkt 3, (static,3)\n");
- suma_parallel=0.0;
- #pragma omp parallel default(none) shared(suma_parallel, a) private(j)
- {
- double *tab;
- #pragma omp single copyprivate(tab)
- {
- tab = malloc(sizeof(double) * omp_get_num_threads());
- }
- // ...
- for(i=0;i<WYMIAR;i++) {
- int id_w = omp_get_thread_num();
- // ...
- double private_sum = 0.;
- #pragma omp for schedule(static,3) private(i) ordered
- for(j=0;j<WYMIAR;j++) {
- private_sum += a[i][j];
- #pragma omp ordered
- // ...
- printf("(%2d,%2d)-W(%1d,%1d) ",i,j,id_w,omp_get_thread_num());
- }
- #pragma omp critical
- {
- suma_parallel += a[i][j];
- }
- // ...
- printf("\n");
- }
- }
- printf("Suma wyrazów tablicy równolegle: %lf\n", suma_parallel);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement