OpenMP - Frage
-
Ich habe einen Quellcode vorliegen, den ich mittel OpenMP parallelisieren möchte.
Der Quellcode besteht aus einer while-Schleife, in der verschiedene for-Schleifen, welche verschachtelt sein können, ausgeführt werden.
Einige dieser for-Schleifen bieten sich zur Parallelisierung an.
Um nicht bei jeder for-Schleife neue Threads zu erzeugen, möchte ich die
Threads schon vor der While-Schleife kreiieren. Leider ist mein momentanes Zwischenergebnis nicht korrekt.Ich habe hier einen minimalen Ausschnitt aus dem Programm:
int i,j; #pragma omp parallel private(count) while (count < target) { // Nicht parallelisierbare Schleife for (i = 1; i < s; ++i) { // parallelisierbare Schleife #pragma omp for for(l = 0; l < N; l++) { calculate something ... } ...Kann man hier schon Fehler feststellen?
Wenn ich mich recht entsinne, wird die i-Schleife von allen Threads gleichzeitig bearbeitet. Geschieht dann aber die Abarbeitung der l-Schleife parallel mit Datenverteilung, so dass jeder Thread N/num_threads Iterationen durchführt?
-
<Palantir=on>
shisha schrieb:
Kann man hier schon Fehler feststellen?
Dein "calculate Something" ist so nicht parallelisierbar
<Palantir=off>Zeig doch mal mehr Code. So wird Dir hier kaum jemand helfen koennen.
-
Du parallelisierst schon die while-Schleife, was zu Fehlern führt.
Schreib wirklich nur vor die innerste for-Schleife das pragma omp parallel for. Und wenn du die Threads vor den Schleifen schon erzeugen willst mach das hier:
#pragma omp parallel ; while () { // ... }Aber auch das alles wird hinfällig, wenn deine calculateSomething Funktion nicht parallelisierbar ist.