OpenMPI: Fehlermeldung bei MPI_Finalize
-
Mal wild geraten: Rufen Methoden von MumpsInterface MPI_Finalize() auf? Ich denke da vor allem an den Destruktor.
-
Ich würde auch sagen, das sieht schwer danach aus als ob MPI_Finalize schon mal vorher aufgerufen wird an einer Stelle, die wir hier nicht sehen.
-
MUMPS benutzt anscheinend intern schon MPI. Du solltest dich da mal schlau machen, welche MPI-Funktionen man dann noch manuell aufrufen muss bzw darf.
-
MumpsInterface ist offenbar Teil von Boost Numeric Bindings welches wohl nicht mehr maintained wird. Ich finde da zumindest keine brauchbaren Infos zu. Sag doch mal, was du da genau verwendest.
-
Max3000 schrieb:
delete mumps; cout << mumps->rank << " says goodbye\n";Find den Fehler im rechten Bild

-
Solche Fehler hast du verdient, wenn du manuell Speicher verwaltest :p
-
ub schrieb:
Max3000 schrieb:
delete mumps; cout << mumps->rank << " says goodbye\n";Find den Fehler im rechten Bild

Arg, warum hab ich das nicht gesehen?
-
Hallo nochmal.
Sorry dass ich erst so spät antworte.
Seldon hat voll ins Schwarze getroffen:MumpMumpsInterface::~MumpsInterface() { // Destroy MUMPS Instance id.job = -2; dmumps_c(&id); MPI_Finalize(); }Da steckt schon Finalize drin. Wenn ich die Zeile lösche funktioniert es. Wie peinlich, dass ich das nicht selbst mitbekommen habe
. MumpsInterface ist übrigens nicht das aus boost sondern eine eigene Implementierung.Jetzt kommt allerdings ein andere Fehler:
*** glibc detected *** optpde: munmap_chunk(): invalid pointer: 0x00007fb7db81d988 *** *** glibc detected *** optpde: munmap_chunk(): invalid pointer: 0x00007f80cf52a988 *** [uranos:00612] *** Process received signal *** [uranos:00612] Signal: Aborted (6) [uranos:00612] Signal code: (-6) ======= Backtrace: ========= /lib/libc.so.6(+0x71e16)[0x7fb7d79b3e16] ...Vom Code her kann ich nicht erkennen, was da das Problem ist.
Sequentiell läuft das Programm ohne Fehler durch.
Ich versuch vielleicht mal mit Valgrind Speicherprobleme herauszufinden, habe mich aber mit dem Tool noch nie beschäftigt. Ich melde mich sobald ich mehr weiß.Vielen Dank für eure Hinweise.
-
ub schrieb:
Max3000 schrieb:
delete mumps; cout << mumps->rank << " says goodbye\n";Find den Fehler im rechten Bild

Herrgott bin ich doof.
Sorry, ich wusste erst nicht was du meintest.
Jetzt ist alles klar
.
Danke. Jetzt funktioniert alles.
Das war wahrscheinlich das Zeichen dass ich mal eine Pause mit der Programmiererei machen sollte.Vielen vielen Dank euch.
-
Max3000 schrieb:
Danke. Jetzt funktioniert alles.
Ich hoffe, du hast als Botschaft jetzt nicht mitgenommen, das delete eine Zeile höher zu setzen. Denn der wahre Ratschlag ist:
Nexus schrieb:
Solche Fehler hast du verdient, wenn du manuell Speicher verwaltest :p
Es gibt nirgendwo einen Grund, nicht mindestens einen Smartpointer zu benutzen. Hier geht es sogar noch weiter, da das Objekt ohnehin nur Scopelebensdauer hat. Das heißt, die ganze umständliche Speicherverwaltung war von vornherein unnötig und ein automatisches Objekt würde hervorragend funktionieren! So wie fast immer, weswegen das ja auch das normale Vorgehen in C++ ist.
-
[quote="SeppJ"]
Max3000 schrieb:
Es gibt nirgendwo einen Grund, nicht mindestens einen Smartpointer zu benutzen. Hier geht es sogar noch weiter, da das Objekt ohnehin nur Scopelebensdauer hat. Das heißt, die ganze umständliche Speicherverwaltung war von vornherein unnötig und ein automatisches Objekt würde hervorragend funktionieren! So wie fast immer, weswegen das ja auch das normale Vorgehen in C++ ist.
Da hast du natürlich recht.
Ich nutze jetzt mumps als normales Objekt, nicht als Pointer und wenn ich den Scope verlasse wird sowieso alles aufgeräumt. Mit Referenzen kann ich das Objekt dann auch an andere Funktionen übergeben. Das ist dann wirklich die schönere Lösung.Danke für den Hinweis.