Witam,
moim zadaniem jest wykonanie takiego tematu:
Równoległe wyznaczanie liczb pierwszych. Korzystając z interfejsu
OpenMP napisać wersje równoległe programu wyznaczania liczb
pierwszych metodą sita Eratostenesa. Rozważyć dwa sposoby
zrównoleglenia problemu:
a) jako dekompozycje funkcjonalną
b) jako dekompozycję danych
Porównać przyspieszenia obu wersji równoległych.
Kodzik napisałem taki:
#include <stdio.h>
#include <omp.h>
int main ()
{
int n;
int j;
int i;
int Od;
int odczyt;
printf("Wyszukaj liczby pierwsze od 2 do: \n");
scanf("%d", &n);
int tab[n+1];
for(i = 1; i<=n; i++) tab[i]=1;
#pragma omp parallel num_threads(5)
{
for (i = 2; i*i<=n; i++)
{
if (tab[i]==0)
continue;
for(j = i + i; j<=n; j += i)
tab[j]=0;
}
}
for (odczyt = 2; odczyt <= n; odczyt++)
{
if (tab[odczyt] == 1)
printf("%d\n", odczyt);
}
return 0;
}
Jednak nie wiem jak poradzić sobie z podpunktami:
a) jako dekompozycje funkcjonalną
b) jako dekompozycję danych
W necie doszukałem się czegoś takiego:
· Równoległość danych – #pragma for
· Równoległość funkcjonalna – #pragma sections
· Aplikacja sekwencyjna – #pragma single
jednak po dodaniu #pragma for wysykakuje mi błąd:
invalid controlling predicate
Ktoś wie jak to poskładać w całość :) ?