Sprawdzenie, czy prawidłowo zostało użyte OpenMP
Ostatnio zmodyfikowano 2014-03-18 17:10
przemeks91 Temat założony przez niniejszego użytkownika |
Sprawdzenie, czy prawidłowo zostało użyte OpenMP » 2014-03-18 17:10:22 Witam, 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ć prosty 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ć obliczanie interpolacji Newtona. Program został napisany w C++, w Visual Studio. Niestety nie wiem, czy wybrałem dobry przykład do wykonania tego zadania. Może miałby ktoś inny pomysł co bardziej pasowałoby do wytycznych zadania i co w prosty sposób dałoby się wykonać. Wiem jak wykonać prosty interfejs, ale niestety nie wiem jak zrobić aby odpowiedni kod z programu zgadzał się z odpowiednimi polami 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? Bardzo prosiłbym o pomoc i wyrozumiałość. 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 ] ); } 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; } }
|
|
« 1 » |