Program wykorzystujący OpenMP nie uruchamia się


(przemeks91) #1

Witam,


(pebal) #2

Błąd który masz wynika z faktu, że nie można przerywać pętli OpenMP. Dodatkowo, gdyby twój kod się wykonał, wszystkie rdzenie procesora analizowałyby dokładnie ten sam zbiór wartości, zamiast się nim podzielić.

Możesz to zadanie zrealizować tak:

bool TestPierwsza(long long p)
{
  long r = (long)sqrt(p);
  bool pierwsza = true;
	
  #pragma omp parallel for
  for (long i = 2; i <= r; ++i)
  {
    if (pierwsza && !(p % i))
      pierwsza = false;
  }

  return pierwsza;
}

(przemeks91) #3

Po głębszym namyśle postamowiłem zmienić rodzaj zadania. Teraz mam program, który oblicza interpolację Newtona. Mam nadzieje, że ten będzie bardziej pasował niż obliczanie liczby pierwszej.

Oto kod:

#include <cstdlib>
#include <math.h>
#include <iostream>
#include <omp.h>
using namespace std;
int main(int argc, char *argv[])
{
    int n;
    cout << "Podaj stopien wielomianu:\n";    
    do
    {
            cin >> n;
    } while((n<1)||(n>10000));
    double x[n];    double c[n];
    cout << "Podaj wezly i wartosci:\n";
    for(int i=0;i<n;i++)
    {
                cout << " x" << i << ": ";                cin >> x[i];
                cout << " y" << i << ": ";
                cin >> c[i];
        }

 #pragma omp parallel

 for(int k=1;k<n;k++)
    {
               for(int i=n;i>k;i--)
               {
                     c[i] = (c[i] - c[i-1])/(x[i]-x[i-k]);//te 2 petle trzeba zamienic               }
    }

    cout << "W(x) = ";
    for(int i=0;i<n;i++)    {
                cout << c[i];
                for(int j=0;j<i;j++)
            {
                        cout << "(x";                        if(x[j]>0) cout << "-";
                        else cout << "+";
                    cout << fabs(x[j]) << ")";
            }
                if(i!=n-1)cout<<"+";        }
    cout<<endl;

 
    
}
system("PAUSE");
return 0;
}

Niestety nie wiem, czy w odpowiedni sposób użyłem pragmy. Wiem jak wykonać prosty interfejs, ale niestety nie wiem jak zrobić aby odpowiedni kod z programu zgadzał się z odpowiednimi polani w interfejsie (np. wpisywanie w pole odpowiedniego współczynnika x0 lub okno w którym znajduj się wynik. Nie wiem w jaki sposób można zmodyfikować potrzebne parametry. Czy w podanym poniżej programie jest to w ogóle możliwe do wykonania?

 

Oto interfejs:

7a51628da378f996med.jpg