Modulaufruf in parallelisierten Programmen
-
Hallo zusammen,
ich hätte eine Frage zu einem Programm, was ich bisher immer sequentiell ausgeführt habe, jetzt aber mit Hilfe von OpenMP parallel arbeiten lassen möchte. Und dies funktioniert leider momentan nicht, da ich (nur in der parallelen Form) Heap corruption Fehler bekomme.
Um zu zeigen, was ich momentan mache, hier mal ein (verkürzter) Beispielcode://Main-Methode #include <omp.h> int main(int argc, char** argv) { double array_ergebnis[100]; double speicher[50][100]; int i, j; #pragma omp parallel { #pragma omp for private(array_ergebnis, j) for(i=0;i<50;i++) { berechnen(array_ergebnis); for(j=0;j<100;j++) { speicher[i][j]=array_ergebnis[j]; } } } return 0; } //hier steht die aufgerufene Methode void berechnen(array_ergebnis) { //Deklaration von Variablen, u.a. int m; int n=0; int zaehler=0; double array_zwischenergebnis[4]; //Hilfsberechnungen aufrufen for(m=0;m<25;m++) //100/4 { hilfsberechnungen(array_zwischenergebnis); for(n=0;n<4;n++) { array_ergebnis[zaehler]=array_zwischenergebnis[n]; zaehler++; } } } void hilfsberechnungen(array_zwischenergebnis); { //Berechnungen ausführen und in diesem Array speichern //Dabei werden Instanzen einer Modellierungsumgebung aufgerufen. //In dieser erfolgt die Modellbildung, welches dann letztendlich in //einer Lösungsumgebung, die ebenfalls hier aufgerufen wird //gelöst wird. }Dabei liegt das Problem meiner Einschätzung nach wahrscheinlich darin, dass in der parallelen Version alle Threads die gleiche Modellierungs- und die gleiche Lösungsumgebung verwenden. Allerdings weiß ich nicht, wie ich dies in meinem Programm umsetzen kann, sodass bsp. auf meinem DualCore-Rechner der Kern 1 die Modellierungs- und Lösungsumgebung 1 verwendet (Kern 2 entsprechend). Kann mir hier jemand weiterhelfen? Das wäre wirklich hilfreich!! Vielen Dank dafür!
Noch einen schönen Sonntag!!
viele Grüße
Titus
-
Gib mal was compilierbares, welches den Fehler auch noch zeigt.
-
Hallo,
vielen Dank für Deine Antwort. Was Kompilierbares kann ich leider nicht posten, obwohl es mir natürlich helfen würde (ich weiß). Vielleicht kann ja trotzdem jemand helfen bzw. einen Tipp geben (mit dem vorhandenen Beispielcode)?
Danke
Titus