mam za zadanie napisać program, który będzie współbieżnie realizował dowolne złożone współbieżne zadanie obliczeniowe w OpenMP. Ponadto program musi posiadać interfejs (trackbary, spinboxy, cokolwiek), w którym w czasie rzeczywistym będzie można modyfikować parametry zrównoleglenia (m.in. parametry w pragmach, liczbę sekcji, ziarnistość, cokolwiek)tego konkretnego algorytmu. Postanowiłem wykorzystać sprawdzanie, czy liczba jest pierwsza, czy złożona. Niestety pojawia się problem podczas użycia OpenMP.
Oto kod:
- Kod: Zaznacz wszystko
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <omp.h>
using namespace std;
int TestPierwsza(long long p)
{
long long r = sqrt(p);
long long i = 2;
#pragma omp parallel
{
while (i<=r) if(!(p%i++)) return 0;
return 1;
}
}
int main(void)
{
long long p;
cout << "Test pierwszosci liczby naturalnej." << endl;
cout << "Podaj liczbe: ";
cin >> p;
cout << endl;
if (TestPierwsza(p))
cout << p << " to liczba pierwsza" << endl;
else
cout << p << " to liczba zlozona" << endl;
system("PAUSE");
return 0;
}
Pojawiają mi się następujące błędy:
- w. 19 k. 36 [Error] invalid exit from OpenMP structured block
- w. 20 k. 10 [Error] invalid exit from OpenMP structured block
Nie wiem, czy wybrałem dobry przykład do wykonania zadania.
Niestety nie wiem jak wykonać interfejs do programu zgodnie z podanymi wytycznymi, oraz w jaki sposób można zmodyfikować parametry?