ich weiß nicht wohin ich posten kann hier. Evtl. muss ich verschoben werden.
Ich programmiere seit kurzem Parallel auf einem Cluster mit OpenMPI. Mir ist dabei etwas einfaches aber grundlegendes nicht ganz klar.
Wenn ich eine exceptions (C++) über throw auslöse und diese z.B. in die main hochreiche, diese exceptions aber nur auf einem Prozess ausgelöst wurde - wie kann ich dann sicherstellen dass der Error-string nur ein einziges mal auf die shell geworfen wird. mir ist klar dass wenn jeder prozess z.B. gleichen input bekommt dann gleich prüft kann man das so machen:
C++:
try { foo(); // hier drin wird eine exceptions geworfen } catch(std::runtime_error & ex) { if(my_id == 0) { //Irgendeine ausgabe die nur von Prozess mit ID 0 ausgegeben wird std::cerr << ex.what() << std::endl; } MPI_Abort(...); }
Wenn allerdings irgendwo mitten im algorithmus bzw. auf daten die jeder prozess lokal hält nur auf z.B. prozess mit ID 4 etwas passiert. muss dieser auch ein throw machen aber dann wird in dieser obigen Excpetion nicht der error-string ausgegeben und doch das programm beendet.
Wie erreiche ich denn eine ausgabe die nur einmal aber dann auch vom korrekten prozess ausgegeben wird?
Äh...die Exception wurde doch nur in einen Prozess geworfen, also wird sie auch nur in einem Prozess behandelt werden. Mir ist das Problem nicht ganz klar. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra