33#include <string.h>
44#include "mpi.h"
55
6+ void print_error (const char * msg , int rc )
7+ {
8+ char err_str [MPI_MAX_ERROR_STRING ];
9+ int resultlen = sizeof (err_str ) - 1 ;
10+
11+ MPI_Error_string (rc , err_str , & resultlen );
12+ fprintf (stderr , "%s return err code = %d (%s)\n" , msg , rc , err_str );
13+ }
14+
615void my_session_errhandler (MPI_Session * foo , int * bar , ...)
716{
817 fprintf (stderr , "errhandler called with error %d\n" , * bar );
@@ -21,26 +30,26 @@ int main (int argc, char *argv[])
2130
2231 rc = MPI_Session_create_errhandler (my_session_errhandler , & errhandler );
2332 if (MPI_SUCCESS != rc ) {
24- fprintf ( stderr , "Error handler creation failed with rc = %d\n " , rc );
25- abort () ;
33+ print_error ( "Error handler creation failed" , rc );
34+ return -1 ;
2635 }
2736
2837 rc = MPI_Info_create (& info );
2938 if (MPI_SUCCESS != rc ) {
30- fprintf ( stderr , "Info creation failed with rc = %d\n " , rc );
31- abort () ;
39+ print_error ( "Info creation failed" , rc );
40+ return -1 ;
3241 }
3342
3443 rc = MPI_Info_set (info , "mpi_thread_support_level" , "MPI_THREAD_MULTIPLE" );
3544 if (MPI_SUCCESS != rc ) {
36- fprintf ( stderr , "Info key/val set failed with rc = %d\n " , rc );
37- abort () ;
45+ print_error ( "Info key/val set failed" , rc );
46+ return -1 ;
3847 }
3948
4049 rc = MPI_Session_init (info , errhandler , & session );
4150 if (MPI_SUCCESS != rc ) {
42- fprintf ( stderr , "Session initialization failed with rc = %d\n " , rc );
43- abort () ;
51+ print_error ( "Session initialization failed" , rc );
52+ return -1 ;
4453 }
4554
4655 rc = MPI_Session_get_num_psets (session , MPI_INFO_NULL , & npsets );
@@ -49,13 +58,12 @@ int main (int argc, char *argv[])
4958 char name [256 ];
5059 MPI_Session_get_nth_pset (session , MPI_INFO_NULL , i , & psetlen , NULL );
5160 MPI_Session_get_nth_pset (session , MPI_INFO_NULL , i , & psetlen , name );
52- fprintf (stderr , " PSET %d: %s (len: %d)\n" , i , name , psetlen );
5361 }
5462
5563 rc = MPI_Group_from_session_pset (session , "mpi://WORLD" , & group );
5664 if (MPI_SUCCESS != rc ) {
57- fprintf ( stderr , "Could not get a group for mpi://WORLD. rc = %d\n " , rc );
58- abort () ;
65+ print_error ( "Could not get a group for mpi://WORLD. " , rc );
66+ return -1 ;
5967 }
6068
6169 MPI_Comm_create_from_group (group , "my_world" , MPI_INFO_NULL , MPI_ERRORS_RETURN , & comm_world );
@@ -66,7 +74,6 @@ int main (int argc, char *argv[])
6674
6775 MPI_Comm_free (& comm_world );
6876 MPI_Session_finalize (& session );
69- printf ("Done\n" );
7077
7178 MPI_Finalize ();
7279
0 commit comments