Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <omp.h>
- #define N 1000
- int main(int argc, char **argv)
- {
- double start, stop;
- int wektor[N];
- long int i,suma_lokalna, suma = 0;
- srand(time(NULL));
- // uzupelniania wektora losowymi elementami
- for(i = 0; i < N; i++)
- {
- wektor[i] = rand()%15 + 3;
- }
- start = omp_get_wtime(); // pobieramy czas
- // Tutaj definiujemy sobie zmienna suma_lokalna ktora musi byc wczesniej zadeklarowana i dodana do zmiennych prywatnych
- // Bo kazdy rdzen musi miec wlasna kopie zmiennej suma_lokalna aby dodawac do niej elementy z wektora.
- #pragma omp parallel default(none) private(i, suma_lokalna) shared(wektor, suma)
- {
- suma_lokalna = 0;
- #pragma omp single
- printf("Program wykonuje sie z %d watkami\n",omp_get_num_threads());
- #pragma omp for
- for(i = 0; i < N; i++)
- {
- suma_lokalna += wektor[i];
- }
- // Dyrektywa critical natomiast stosowana jest po to aby na koniec obliczen kazdy rdzen dostal sie zmiennej suma
- // a tam dodal swoja sume_lokalna. Pozwala to uniknac momentow gdy dwa rdzenie na raz potrzebuja dostepu do zmiennej.
- #pragma omp critical
- suma += suma_lokalna;
- }
- stop = omp_get_wtime();
- printf("Czas obliczen funkcja omp_get_wtime(): %lfs.\n", stop-start);
- printf(" Suma: %d\n", suma);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment