From: Julian Seward Date: Thu, 9 Mar 2006 19:08:20 +0000 (+0000) Subject: Give *all* MPI-1.1 and MPI-2 functions a wrapper; most of them get a X-Git-Tag: svn/VALGRIND_3_2_0~216 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=84a3cb863765f0318f2e5b24bfb67b1524a350b0;p=thirdparty%2Fvalgrind.git Give *all* MPI-1.1 and MPI-2 functions a wrapper; most of them get a default wrapper which can either run transparently, run transparently but give a warning, or abort the run -- depending on flags set in $MPIWRAP_DEBUG. Mess with flag handling accordingly. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5735 --- diff --git a/auxprogs/mpiwrap.c b/auxprogs/mpiwrap.c index 5a497783fa..0e4ef187c9 100644 --- a/auxprogs/mpiwrap.c +++ b/auxprogs/mpiwrap.c @@ -88,7 +88,8 @@ #include "mpi.h" /* Where are API symbols? - OpenPMPI lib/libmpi.so, soname = libmpi.so.0 + Open MPI lib/libmpi.so, soname = libmpi.so.0 + ditto Quadrics MPI */ /* ifdef OpenMPI ... */ #define I_WRAP_FNNAME_U(_name) I_WRAP_SONAME_FNNAME_ZU(libmpiZdsoZa,_name) @@ -102,6 +103,12 @@ typedef unsigned char Bool; #define False ((Bool)0) #define True ((Bool)1) +/* Word, UWord are machine words - same size as a pointer. This is + checked at startup. The wrappers below use 'long' to mean a + machine word - this too is tested at startup. */ +typedef signed long Word; +typedef unsigned long UWord; + /*------------------------------------------------------------*/ /*--- Simple helpers ---*/ @@ -116,7 +123,7 @@ static const char* preamble = "valgrind MPI wrappers"; static pid_t my_pid = -1; static char* options_str = NULL; static int opt_verbosity = 1; -static Bool opt_strict = False; +static Bool opt_missing = 0; /* 0:silent; 1:warn; 2:abort */ static Bool opt_help = False; static inline void before ( char* fnname ) @@ -129,18 +136,23 @@ static inline void before ( char* fnname ) my_pid = getpid(); options_str = getenv("MPIWRAP_DEBUG"); if (options_str) { - opt_help = NULL != strstr(options_str, "help"); - opt_strict = NULL != strstr(options_str, "strict"); + if (NULL != strstr(options_str, "warn")) + opt_missing = 1; + if (NULL != strstr(options_str, "strict")) + opt_missing = 2; if (NULL != strstr(options_str, "verbose")) opt_verbosity++; if (NULL != strstr(options_str, "quiet")) opt_verbosity--; + if (NULL != strstr(options_str, "help")) + opt_help = True; } if (opt_verbosity > 0) fprintf(stderr, "%s %5d: Active for pid %d\n", preamble, my_pid, my_pid); - /* Sanity check - that 'long' really is a machine word. */ - assert(sizeof(long) == sizeof(void*)); + /* Sanity check - that Word/UWord really are machine words. */ + assert(sizeof(Word) == sizeof(void*)); + assert(sizeof(UWord) == sizeof(void*)); /* Sanity check - char is byte-sized (else address calculations in walk_type don't work. */ assert(sizeof(char) == 1); @@ -153,10 +165,14 @@ static inline void before ( char* fnname ) fprintf(stderr, " verbose show wrapper entries/exits\n"); fprintf(stderr, " strict abort the program if a function" " with no wrapper is used\n"); + fprintf(stderr, " warn give a warning if a function" + " with no wrapper is used\n"); fprintf(stderr, " help display this message, then exit\n"); fprintf(stderr, "\n"); fprintf(stderr, "Multiple options are allowed, eg" " MPIWRAP_DEBUG=strict,verbose\n"); + fprintf(stderr, "Note: 'warn' generates output even if 'quiet'" + " is also specified\n"); fprintf(stderr, "\n"); fprintf(stderr, "%s %5d: exiting now\n", preamble, my_pid ); exit(1); @@ -750,10 +766,6 @@ int WRAPPER_FOR(PMPI_Send)(void *buf, int count, MPI_Datatype datatype, return err; } -UNIMPLEMENTED_WRAPPER(Bsend) -UNIMPLEMENTED_WRAPPER(Ssend) -UNIMPLEMENTED_WRAPPER(Rsend) - /* --- Recv --- */ /* pre: must be writable: (buf,count,datatype) must be writable: status @@ -778,14 +790,6 @@ int WRAPPER_FOR(PMPI_Recv)(void *buf, int count, MPI_Datatype datatype, return err; } -/* PMPI_Get_count is used by this library (no matter, we just need to - supply a wrapper). Since there's nothing much to wrap, supply a - no-op wrapper. */ -NO_OP_WRAPPER(Get_count) - -UNIMPLEMENTED_WRAPPER(Buffer_attach) -UNIMPLEMENTED_WRAPPER(Buffer_detach) - /*------------------------------------------------------------*/ /*--- ---*/ @@ -997,10 +1001,6 @@ int WRAPPER_FOR(PMPI_Isend)(void *buf, int count, MPI_Datatype datatype, return err; } -UNIMPLEMENTED_WRAPPER(Ibsend) -UNIMPLEMENTED_WRAPPER(Issend) -UNIMPLEMENTED_WRAPPER(Irsend) - /* --- Irecv --- */ /* pre: must be writable: (buf,count,datatype), *request post: make readable *request @@ -1026,8 +1026,6 @@ int WRAPPER_FOR(PMPI_Irecv)( void* buf, int count, MPI_Datatype datatype, return err; } -UNIMPLEMENTED_WRAPPER(Request_free) - /* --- Wait --- */ int WRAPPER_FOR(PMPI_Wait)( MPI_Request* request, MPI_Status* status ) @@ -1051,11 +1049,6 @@ int WRAPPER_FOR(PMPI_Wait)( MPI_Request* request, return err; } -UNIMPLEMENTED_WRAPPER(Test) - -UNIMPLEMENTED_WRAPPER(Waitany) -UNIMPLEMENTED_WRAPPER(Testany) - /* --- Waitall --- */ int WRAPPER_FOR(PMPI_Waitall)( int count, MPI_Request* requests, @@ -1089,13 +1082,6 @@ int WRAPPER_FOR(PMPI_Waitall)( int count, return err; } -UNIMPLEMENTED_WRAPPER(Testall) - -UNIMPLEMENTED_WRAPPER(Waitsome) -UNIMPLEMENTED_WRAPPER(Testsome) - -UNIMPLEMENTED_WRAPPER(Probe) - /* --- Iprobe --- */ /* very unclear about this */ /* pre: must-be-writable: *flag, *status */ @@ -1124,9 +1110,6 @@ int WRAPPER_FOR(PMPI_Iprobe)(int source, int tag, return err; } -UNIMPLEMENTED_WRAPPER(Cancel) -UNIMPLEMENTED_WRAPPER(Test_cancelled) - /*------------------------------------------------------------*/ /*--- ---*/ @@ -1164,8 +1147,6 @@ int WRAPPER_FOR(PMPI_Sendrecv)( return err; } -UNIMPLEMENTED_WRAPPER(Sendrecv_replace) - /*------------------------------------------------------------*/ /*--- ---*/ @@ -1175,7 +1156,6 @@ UNIMPLEMENTED_WRAPPER(Sendrecv_replace) /* --- Address --- */ /* Does this have anything worth checking? */ -NO_OP_WRAPPER(PMPI_Address) /*------------------------------------------------------------*/ @@ -1354,13 +1334,6 @@ int WRAPPER_FOR(PMPI_Comm_rank)(MPI_Comm comm, int *rank) return err; } -UNIMPLEMENTED_WRAPPER(Comm_remote_group) -UNIMPLEMENTED_WRAPPER(Comm_remote_size) -UNIMPLEMENTED_WRAPPER(Comm_set_errhandler) - -/* The MPI 1.1 doc doesn't appear to mention this. */ -NO_OP_WRAPPER(Comm_set_name) - /* --- Comm_size --- */ /* wr: (size, sizeof(*size)) */ int WRAPPER_FOR(PMPI_Comm_size)(MPI_Comm comm, int *size) @@ -1383,14 +1356,6 @@ int WRAPPER_FOR(PMPI_Comm_size)(MPI_Comm comm, int *size) /*--- ---*/ /*------------------------------------------------------------*/ -/* This messes with a couple of function pointers, an int* and an - "extra state" area of indeterminate size. I don't think there's - much we can check here. Hence: */ -NO_OP_WRAPPER(Keyval_create) - -/* Similar comment to Keyval_create */ -NO_OP_WRAPPER(Keyval_free) - /*------------------------------------------------------------*/ /*--- ---*/ @@ -1465,178 +1430,461 @@ int WRAPPER_FOR(PMPI_Finalize)(void) /*------------------------------------------------------------*/ /*--- ---*/ +/*--- Default wrappers for all remaining functions ---*/ /*--- ---*/ -/*--- ---*/ -/*------------------------------------------------------------*/ - /*------------------------------------------------------------*/ -/*--- ---*/ -/*--- ---*/ -/*--- ---*/ -/*------------------------------------------------------------*/ - - - -/* Here are the wrappers themselves. */ -UNIMPLEMENTED_WRAPPER(Abort) - - - -UNIMPLEMENTED_WRAPPER(Allgather) -UNIMPLEMENTED_WRAPPER(Allgatherv) - - -UNIMPLEMENTED_WRAPPER(Alltoall) -UNIMPLEMENTED_WRAPPER(Alltoallv) -UNIMPLEMENTED_WRAPPER(Alltoallw) -UNIMPLEMENTED_WRAPPER(Attr_delete) -NO_OP_WRAPPER(Attr_get) -NO_OP_WRAPPER(Attr_put) -NO_OP_WRAPPER(Barrier) - - -UNIMPLEMENTED_WRAPPER(Bsend_init) -UNIMPLEMENTED_WRAPPER(Cart_coords) -UNIMPLEMENTED_WRAPPER(Cart_create) -UNIMPLEMENTED_WRAPPER(Cart_get) -UNIMPLEMENTED_WRAPPER(Cart_map) -UNIMPLEMENTED_WRAPPER(Cart_rank) -UNIMPLEMENTED_WRAPPER(Cart_shift) -UNIMPLEMENTED_WRAPPER(Cart_sub) -UNIMPLEMENTED_WRAPPER(Cartdim_get) -UNIMPLEMENTED_WRAPPER(Comm_compare) -NO_OP_WRAPPER(Comm_create) -UNIMPLEMENTED_WRAPPER(Comm_create_errhandler) -UNIMPLEMENTED_WRAPPER(Comm_dup) -NO_OP_WRAPPER(Comm_free) -UNIMPLEMENTED_WRAPPER(Comm_free_errhandler) -UNIMPLEMENTED_WRAPPER(Comm_get_errhandler) -UNIMPLEMENTED_WRAPPER(Comm_get_name) -NO_OP_WRAPPER(Comm_group) - - -NO_OP_WRAPPER(Comm_split) -UNIMPLEMENTED_WRAPPER(Comm_test_inter) -UNIMPLEMENTED_WRAPPER(Dims_create) -UNIMPLEMENTED_WRAPPER(Errhandler_create) - -//UNIMPLEMENTED_WRAPPER(Errhandler_free) -NO_OP_WRAPPER(Errhandler_free) - -UNIMPLEMENTED_WRAPPER(Errhandler_get) - -//UNIMPLEMENTED_WRAPPER(Errhandler_set) -NO_OP_WRAPPER(Errhandler_set) - -UNIMPLEMENTED_WRAPPER(Error_class) - -UNIMPLEMENTED_WRAPPER(Finalized) - - -UNIMPLEMENTED_WRAPPER(Gatherv) -UNIMPLEMENTED_WRAPPER(Get_address) - - -UNIMPLEMENTED_WRAPPER(Get_elements) -NO_OP_WRAPPER(Get_processor_name) -UNIMPLEMENTED_WRAPPER(Get_version) -UNIMPLEMENTED_WRAPPER(Graph_create) -UNIMPLEMENTED_WRAPPER(Graph_get) -UNIMPLEMENTED_WRAPPER(Graph_map) -UNIMPLEMENTED_WRAPPER(Graph_neighbors) -UNIMPLEMENTED_WRAPPER(Graph_neighbors_count) -UNIMPLEMENTED_WRAPPER(Graphdims_get) -UNIMPLEMENTED_WRAPPER(Group_compare) -UNIMPLEMENTED_WRAPPER(Group_difference) -NO_OP_WRAPPER(Group_excl) -NO_OP_WRAPPER(Group_free) -NO_OP_WRAPPER(Group_incl) -UNIMPLEMENTED_WRAPPER(Group_intersection) -UNIMPLEMENTED_WRAPPER(Group_range_excl) -UNIMPLEMENTED_WRAPPER(Group_range_incl) -UNIMPLEMENTED_WRAPPER(Group_rank) -UNIMPLEMENTED_WRAPPER(Group_size) -NO_OP_WRAPPER(Group_translate_ranks) -UNIMPLEMENTED_WRAPPER(Group_union) - - -UNIMPLEMENTED_WRAPPER(Init_thread) - - -UNIMPLEMENTED_WRAPPER(Intercomm_create) -UNIMPLEMENTED_WRAPPER(Intercomm_merge) - - - -NO_OP_WRAPPER(Op_free) -UNIMPLEMENTED_WRAPPER(Pack) -UNIMPLEMENTED_WRAPPER(Pack_size) -UNIMPLEMENTED_WRAPPER(Pcontrol) -UNIMPLEMENTED_WRAPPER(Query_thread) - - -UNIMPLEMENTED_WRAPPER(Recv_init) +#define DEFAULT_WRAPPER_PREAMBLE(basename) \ + OrigFn fn; \ + UWord res; \ + static int complaints = 3; \ + VALGRIND_GET_ORIG_FN(fn); \ + before(#basename); \ + if (opt_missing >= 2) { \ + barf("no wrapper for PMPI_" #basename \ + ",\n\t\t\t and you have " \ + "requested strict checking"); \ + } \ + if (opt_missing == 1 && complaints > 0) { \ + fprintf(stderr, "%s %5d: warning: no wrapper " \ + "for PMPI_" #basename "\n", \ + preamble, my_pid); \ + complaints--; \ + } \ + +#define DEFAULT_WRAPPER_W_0W(basename) \ + UWord WRAPPER_FOR(PMPI_##basename)( void ) \ + { \ + DEFAULT_WRAPPER_PREAMBLE(basename) \ + CALL_FN_W_v(res, fn); \ + return res; \ + } -UNIMPLEMENTED_WRAPPER(Reduce_scatter) -UNIMPLEMENTED_WRAPPER(Rsend_init) -UNIMPLEMENTED_WRAPPER(Scan) -UNIMPLEMENTED_WRAPPER(Scatter) -UNIMPLEMENTED_WRAPPER(Scatterv) +#define DEFAULT_WRAPPER_W_1W(basename) \ + UWord WRAPPER_FOR(PMPI_##basename)( UWord a1 ) \ + { \ + DEFAULT_WRAPPER_PREAMBLE(basename) \ + CALL_FN_W_W(res, fn, a1); \ + return res; \ + } +#define DEFAULT_WRAPPER_W_2W(basename) \ + UWord WRAPPER_FOR(PMPI_##basename)( UWord a1, UWord a2 ) \ + { \ + DEFAULT_WRAPPER_PREAMBLE(basename) \ + CALL_FN_W_WW(res, fn, a1,a2); \ + return res; \ + } -UNIMPLEMENTED_WRAPPER(Send_init) +#define DEFAULT_WRAPPER_W_3W(basename) \ + UWord WRAPPER_FOR(PMPI_##basename) \ + ( UWord a1, UWord a2, UWord a3 ) \ + { \ + DEFAULT_WRAPPER_PREAMBLE(basename) \ + CALL_FN_W_WWW(res, fn, a1,a2,a3); \ + return res; \ + } +#define DEFAULT_WRAPPER_W_4W(basename) \ + UWord WRAPPER_FOR(PMPI_##basename) \ + ( UWord a1, UWord a2, UWord a3, UWord a4 ) \ + { \ + DEFAULT_WRAPPER_PREAMBLE(basename) \ + CALL_FN_W_WWWW(res, fn, a1,a2,a3,a4); \ + return res; \ + } -UNIMPLEMENTED_WRAPPER(Ssend_init) -UNIMPLEMENTED_WRAPPER(Start) -UNIMPLEMENTED_WRAPPER(Startall) -UNIMPLEMENTED_WRAPPER(Status_set_cancelled) -UNIMPLEMENTED_WRAPPER(Status_set_elements) -UNIMPLEMENTED_WRAPPER(Topo_test) +#define DEFAULT_WRAPPER_W_5W(basename) \ + UWord WRAPPER_FOR(PMPI_##basename) \ + ( UWord a1, UWord a2, UWord a3, UWord a4, UWord a5 ) \ + { \ + DEFAULT_WRAPPER_PREAMBLE(basename) \ + CALL_FN_W_5W(res, fn, a1,a2,a3,a4,a5); \ + return res; \ + } -//UNIMPLEMENTED_WRAPPER(Type_commit) -NO_OP_WRAPPER(Type_commit) +#define DEFAULT_WRAPPER_W_6W(basename) \ + UWord WRAPPER_FOR(PMPI_##basename) \ + ( UWord a1, UWord a2, UWord a3, UWord a4, UWord a5, \ + UWord a6 ) \ + { \ + DEFAULT_WRAPPER_PREAMBLE(basename) \ + CALL_FN_W_6W(res, fn, a1,a2,a3,a4,a5,a6); \ + return res; \ + } -//UNIMPLEMENTED_WRAPPER(Type_contiguous) -NO_OP_WRAPPER(Type_contiguous) +#define DEFAULT_WRAPPER_W_7W(basename) \ + UWord WRAPPER_FOR(PMPI_##basename) \ + ( UWord a1, UWord a2, UWord a3, UWord a4, UWord a5, \ + UWord a6, UWord a7 ) \ + { \ + DEFAULT_WRAPPER_PREAMBLE(basename) \ + CALL_FN_W_7W(res, fn, a1,a2,a3,a4,a5,a6,a7); \ + return res; \ + } -UNIMPLEMENTED_WRAPPER(Type_count) -UNIMPLEMENTED_WRAPPER(Type_create_darray) -UNIMPLEMENTED_WRAPPER(Type_create_subarray) -NO_OP_WRAPPER(Type_extent) -NO_OP_WRAPPER(Type_free) -NO_OP_WRAPPER(Type_get_contents) -NO_OP_WRAPPER(Type_get_envelope) -UNIMPLEMENTED_WRAPPER(Type_get_name) -NO_OP_WRAPPER(Type_create_hindexed) -NO_OP_WRAPPER(Type_create_hvector) +#define DEFAULT_WRAPPER_W_8W(basename) \ + UWord WRAPPER_FOR(PMPI_##basename) \ + ( UWord a1, UWord a2, UWord a3, UWord a4, UWord a5, \ + UWord a6, UWord a7, UWord a8 ) \ + { \ + DEFAULT_WRAPPER_PREAMBLE(basename) \ + CALL_FN_W_8W(res, fn, a1,a2,a3,a4,a5,a6,a7,a8); \ + return res; \ + } -//UNIMPLEMENTED_WRAPPER(Type_create_struct) -NO_OP_WRAPPER(Type_create_struct) +#define DEFAULT_WRAPPER_W_9W(basename) \ + UWord WRAPPER_FOR(PMPI_##basename) \ + ( UWord a1, UWord a2, UWord a3, UWord a4, UWord a5, \ + UWord a6, UWord a7, UWord a8, UWord a9 ) \ + { \ + DEFAULT_WRAPPER_PREAMBLE(basename) \ + CALL_FN_W_9W(res, fn, a1,a2,a3,a4,a5,a6,a7,a8,a9); \ + return res; \ + } -NO_OP_WRAPPER(Type_hindexed) -NO_OP_WRAPPER(Type_hvector) -NO_OP_WRAPPER(Type_indexed) -NO_OP_WRAPPER(Type_lb) -UNIMPLEMENTED_WRAPPER(Type_set_name) -NO_OP_WRAPPER(Type_size) +#define DEFAULT_WRAPPER_W_10W(basename) \ + UWord WRAPPER_FOR(PMPI_##basename) \ + ( UWord a1, UWord a2, UWord a3, UWord a4, UWord a5, \ + UWord a6, UWord a7, UWord a8, UWord a9, UWord a10 ) \ + { \ + DEFAULT_WRAPPER_PREAMBLE(basename) \ + CALL_FN_W_10W(res, fn, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \ + return res; \ + } -//UNIMPLEMENTED_WRAPPER(Type_struct) -NO_OP_WRAPPER(Type_struct) +#define DEFAULT_WRAPPER_W_12W(basename) \ + UWord WRAPPER_FOR(PMPI_##basename) \ + ( UWord a1, UWord a2, UWord a3, UWord a4, UWord a5, \ + UWord a6, UWord a7, UWord a8, UWord a9, UWord a10, \ + UWord a11, UWord a12 ) \ + { \ + DEFAULT_WRAPPER_PREAMBLE(basename) \ + CALL_FN_W_12W(res, fn, a1,a2,a3,a4,a5,a6, \ + a7,a8,a9,a10,a11,a12); \ + return res; \ + } -NO_OP_WRAPPER(Type_ub) -NO_OP_WRAPPER(Type_vector) -UNIMPLEMENTED_WRAPPER(Unpack) +/* Canned summary of MPI-1.1/MPI-2 entry points, as derived from mpi.h + from Open MPI svn rev 9191 (somewhere between Open MPI versions + 1.0.1 and 1.1.0). */ + +/* If a function is commented out in this list, it's because it has a + proper wrapper written elsewhere (above here). */ + +DEFAULT_WRAPPER_W_2W(Abort) +DEFAULT_WRAPPER_W_9W(Accumulate) +DEFAULT_WRAPPER_W_1W(Add_error_class) +DEFAULT_WRAPPER_W_2W(Add_error_code) +DEFAULT_WRAPPER_W_2W(Add_error_string) +DEFAULT_WRAPPER_W_2W(Address) +DEFAULT_WRAPPER_W_7W(Allgather) +DEFAULT_WRAPPER_W_8W(Allgatherv) +DEFAULT_WRAPPER_W_3W(Alloc_mem) +/* DEFAULT_WRAPPER_W_6W(Allreduce) */ +DEFAULT_WRAPPER_W_7W(Alltoall) +DEFAULT_WRAPPER_W_9W(Alltoallv) +DEFAULT_WRAPPER_W_9W(Alltoallw) +DEFAULT_WRAPPER_W_2W(Attr_delete) +DEFAULT_WRAPPER_W_4W(Attr_get) +DEFAULT_WRAPPER_W_3W(Attr_put) +DEFAULT_WRAPPER_W_1W(Barrier) +/* DEFAULT_WRAPPER_W_5W(Bcast) */ +DEFAULT_WRAPPER_W_6W(Bsend) +DEFAULT_WRAPPER_W_7W(Bsend_init) +DEFAULT_WRAPPER_W_2W(Buffer_attach) +DEFAULT_WRAPPER_W_2W(Buffer_detach) +DEFAULT_WRAPPER_W_1W(Cancel) +DEFAULT_WRAPPER_W_4W(Cart_coords) +DEFAULT_WRAPPER_W_6W(Cart_create) +DEFAULT_WRAPPER_W_5W(Cart_get) +DEFAULT_WRAPPER_W_5W(Cart_map) +DEFAULT_WRAPPER_W_3W(Cart_rank) +DEFAULT_WRAPPER_W_5W(Cart_shift) +DEFAULT_WRAPPER_W_3W(Cart_sub) +DEFAULT_WRAPPER_W_2W(Cartdim_get) +DEFAULT_WRAPPER_W_1W(Close_port) +DEFAULT_WRAPPER_W_5W(Comm_accept) +DEFAULT_WRAPPER_W_1W(Comm_c2f) +DEFAULT_WRAPPER_W_2W(Comm_call_errhandler) +DEFAULT_WRAPPER_W_3W(Comm_compare) +DEFAULT_WRAPPER_W_5W(Comm_connect) +DEFAULT_WRAPPER_W_2W(Comm_create_errhandler) +DEFAULT_WRAPPER_W_4W(Comm_create_keyval) +DEFAULT_WRAPPER_W_3W(Comm_create) +DEFAULT_WRAPPER_W_2W(Comm_delete_attr) +DEFAULT_WRAPPER_W_1W(Comm_disconnect) +DEFAULT_WRAPPER_W_2W(Comm_dup) +DEFAULT_WRAPPER_W_1W(Comm_f2c) +DEFAULT_WRAPPER_W_1W(Comm_free_keyval) +DEFAULT_WRAPPER_W_1W(Comm_free) +DEFAULT_WRAPPER_W_4W(Comm_get_attr) +DEFAULT_WRAPPER_W_2W(Comm_get_errhandler) +DEFAULT_WRAPPER_W_3W(Comm_get_name) +DEFAULT_WRAPPER_W_1W(Comm_get_parent) +DEFAULT_WRAPPER_W_2W(Comm_group) +DEFAULT_WRAPPER_W_2W(Comm_join) +/* DEFAULT_WRAPPER_W_2W(Comm_rank) */ +DEFAULT_WRAPPER_W_2W(Comm_remote_group) +DEFAULT_WRAPPER_W_2W(Comm_remote_size) +DEFAULT_WRAPPER_W_3W(Comm_set_attr) +DEFAULT_WRAPPER_W_2W(Comm_set_errhandler) +DEFAULT_WRAPPER_W_2W(Comm_set_name) +/* DEFAULT_WRAPPER_W_2W(Comm_size) */ +DEFAULT_WRAPPER_W_8W(Comm_spawn) +DEFAULT_WRAPPER_W_9W(Comm_spawn_multiple) +DEFAULT_WRAPPER_W_4W(Comm_split) +DEFAULT_WRAPPER_W_2W(Comm_test_inter) +DEFAULT_WRAPPER_W_3W(Dims_create) +DEFAULT_WRAPPER_W_1W(Errhandler_c2f) +DEFAULT_WRAPPER_W_2W(Errhandler_create) +DEFAULT_WRAPPER_W_1W(Errhandler_f2c) +DEFAULT_WRAPPER_W_1W(Errhandler_free) +DEFAULT_WRAPPER_W_2W(Errhandler_get) +DEFAULT_WRAPPER_W_2W(Errhandler_set) +DEFAULT_WRAPPER_W_2W(Error_class) +/* DEFAULT_WRAPPER_W_3W(Error_string) */ +DEFAULT_WRAPPER_W_6W(Exscan) +DEFAULT_WRAPPER_W_1W(File_c2f) +DEFAULT_WRAPPER_W_1W(File_f2c) +DEFAULT_WRAPPER_W_2W(File_call_errhandler) +DEFAULT_WRAPPER_W_2W(File_create_errhandler) +DEFAULT_WRAPPER_W_2W(File_set_errhandler) +DEFAULT_WRAPPER_W_2W(File_get_errhandler) +DEFAULT_WRAPPER_W_5W(File_open) +DEFAULT_WRAPPER_W_1W(File_close) +DEFAULT_WRAPPER_W_2W(File_delete) +DEFAULT_WRAPPER_W_2W(File_set_size) +DEFAULT_WRAPPER_W_2W(File_preallocate) +DEFAULT_WRAPPER_W_2W(File_get_size) +DEFAULT_WRAPPER_W_2W(File_get_group) +DEFAULT_WRAPPER_W_2W(File_get_amode) +DEFAULT_WRAPPER_W_2W(File_set_info) +DEFAULT_WRAPPER_W_2W(File_get_info) +DEFAULT_WRAPPER_W_6W(File_set_view) +DEFAULT_WRAPPER_W_5W(File_get_view) +DEFAULT_WRAPPER_W_6W(File_read_at) +DEFAULT_WRAPPER_W_6W(File_read_at_all) +DEFAULT_WRAPPER_W_6W(File_write_at) +DEFAULT_WRAPPER_W_6W(File_write_at_all) +DEFAULT_WRAPPER_W_6W(File_iread_at) +DEFAULT_WRAPPER_W_6W(File_iwrite_at) +DEFAULT_WRAPPER_W_5W(File_read) +DEFAULT_WRAPPER_W_5W(File_read_all) +DEFAULT_WRAPPER_W_5W(File_write) +DEFAULT_WRAPPER_W_5W(File_write_all) +DEFAULT_WRAPPER_W_5W(File_iread) +DEFAULT_WRAPPER_W_5W(File_iwrite) +DEFAULT_WRAPPER_W_3W(File_seek) +DEFAULT_WRAPPER_W_2W(File_get_position) +DEFAULT_WRAPPER_W_3W(File_get_byte_offset) +DEFAULT_WRAPPER_W_5W(File_read_shared) +DEFAULT_WRAPPER_W_5W(File_write_shared) +DEFAULT_WRAPPER_W_5W(File_iread_shared) +DEFAULT_WRAPPER_W_5W(File_iwrite_shared) +DEFAULT_WRAPPER_W_5W(File_read_ordered) +DEFAULT_WRAPPER_W_5W(File_write_ordered) +DEFAULT_WRAPPER_W_3W(File_seek_shared) +DEFAULT_WRAPPER_W_2W(File_get_position_shared) +DEFAULT_WRAPPER_W_5W(File_read_at_all_begin) +DEFAULT_WRAPPER_W_3W(File_read_at_all_end) +DEFAULT_WRAPPER_W_5W(File_write_at_all_begin) +DEFAULT_WRAPPER_W_3W(File_write_at_all_end) +DEFAULT_WRAPPER_W_4W(File_read_all_begin) +DEFAULT_WRAPPER_W_3W(File_read_all_end) +DEFAULT_WRAPPER_W_4W(File_write_all_begin) +DEFAULT_WRAPPER_W_3W(File_write_all_end) +DEFAULT_WRAPPER_W_4W(File_read_ordered_begin) +DEFAULT_WRAPPER_W_3W(File_read_ordered_end) +DEFAULT_WRAPPER_W_4W(File_write_ordered_begin) +DEFAULT_WRAPPER_W_3W(File_write_ordered_end) +DEFAULT_WRAPPER_W_3W(File_get_type_extent) +DEFAULT_WRAPPER_W_2W(File_set_atomicity) +DEFAULT_WRAPPER_W_2W(File_get_atomicity) +DEFAULT_WRAPPER_W_1W(File_sync) +/* DEFAULT_WRAPPER_W_0W(Finalize) */ +DEFAULT_WRAPPER_W_1W(Finalized) +DEFAULT_WRAPPER_W_1W(Free_mem) +/* DEFAULT_WRAPPER_W_8W(Gather) */ +DEFAULT_WRAPPER_W_9W(Gatherv) +DEFAULT_WRAPPER_W_2W(Get_address) +DEFAULT_WRAPPER_W_3W(Get_count) +DEFAULT_WRAPPER_W_3W(Get_elements) +DEFAULT_WRAPPER_W_8W(Get) +DEFAULT_WRAPPER_W_2W(Get_processor_name) +DEFAULT_WRAPPER_W_2W(Get_version) +DEFAULT_WRAPPER_W_6W(Graph_create) +DEFAULT_WRAPPER_W_5W(Graph_get) +DEFAULT_WRAPPER_W_5W(Graph_map) +DEFAULT_WRAPPER_W_3W(Graph_neighbors_count) +DEFAULT_WRAPPER_W_4W(Graph_neighbors) +DEFAULT_WRAPPER_W_3W(Graphdims_get) +DEFAULT_WRAPPER_W_1W(Grequest_complete) +DEFAULT_WRAPPER_W_5W(Grequest_start) +DEFAULT_WRAPPER_W_1W(Group_c2f) +DEFAULT_WRAPPER_W_3W(Group_compare) +DEFAULT_WRAPPER_W_3W(Group_difference) +DEFAULT_WRAPPER_W_4W(Group_excl) +DEFAULT_WRAPPER_W_1W(Group_f2c) +DEFAULT_WRAPPER_W_1W(Group_free) +DEFAULT_WRAPPER_W_4W(Group_incl) +DEFAULT_WRAPPER_W_3W(Group_intersection) +DEFAULT_WRAPPER_W_4W(Group_range_excl) +DEFAULT_WRAPPER_W_4W(Group_range_incl) +DEFAULT_WRAPPER_W_2W(Group_rank) +DEFAULT_WRAPPER_W_2W(Group_size) +DEFAULT_WRAPPER_W_5W(Group_translate_ranks) +DEFAULT_WRAPPER_W_3W(Group_union) +DEFAULT_WRAPPER_W_7W(Ibsend) +DEFAULT_WRAPPER_W_1W(Info_c2f) +DEFAULT_WRAPPER_W_1W(Info_create) +DEFAULT_WRAPPER_W_2W(Info_delete) +DEFAULT_WRAPPER_W_2W(Info_dup) +DEFAULT_WRAPPER_W_1W(Info_f2c) +DEFAULT_WRAPPER_W_1W(Info_free) +DEFAULT_WRAPPER_W_5W(Info_get) +DEFAULT_WRAPPER_W_2W(Info_get_nkeys) +DEFAULT_WRAPPER_W_3W(Info_get_nthkey) +DEFAULT_WRAPPER_W_4W(Info_get_valuelen) +DEFAULT_WRAPPER_W_3W(Info_set) +/* DEFAULT_WRAPPER_W_2W(Init) */ +/* DEFAULT_WRAPPER_W_1W(Initialized) */ +DEFAULT_WRAPPER_W_4W(Init_thread) +DEFAULT_WRAPPER_W_6W(Intercomm_create) +DEFAULT_WRAPPER_W_3W(Intercomm_merge) +/* DEFAULT_WRAPPER_W_5W(Iprobe) */ +/* DEFAULT_WRAPPER_W_7W(Irecv) */ +DEFAULT_WRAPPER_W_7W(Irsend) +/* DEFAULT_WRAPPER_W_7W(Isend) */ +DEFAULT_WRAPPER_W_7W(Issend) +DEFAULT_WRAPPER_W_1W(Is_thread_main) +DEFAULT_WRAPPER_W_4W(Keyval_create) +DEFAULT_WRAPPER_W_1W(Keyval_free) +DEFAULT_WRAPPER_W_3W(Lookup_name) +DEFAULT_WRAPPER_W_1W(Op_c2f) +/* DEFAULT_WRAPPER_W_3W(Op_create) */ +DEFAULT_WRAPPER_W_2W(Open_port) +DEFAULT_WRAPPER_W_1W(Op_f2c) +DEFAULT_WRAPPER_W_1W(Op_free) +DEFAULT_WRAPPER_W_7W(Pack_external) +DEFAULT_WRAPPER_W_4W(Pack_external_size) +DEFAULT_WRAPPER_W_7W(Pack) +DEFAULT_WRAPPER_W_4W(Pack_size) +/* int MPI_Pcontrol(const int level, ...) */ +DEFAULT_WRAPPER_W_4W(Probe) +DEFAULT_WRAPPER_W_3W(Publish_name) +DEFAULT_WRAPPER_W_8W(Put) +DEFAULT_WRAPPER_W_1W(Query_thread) +DEFAULT_WRAPPER_W_7W(Recv_init) +/* DEFAULT_WRAPPER_W_7W(Recv) */ +/* DEFAULT_WRAPPER_W_7W(Reduce) */ +DEFAULT_WRAPPER_W_6W(Reduce_scatter) +DEFAULT_WRAPPER_W_5W(Register_datarep) +DEFAULT_WRAPPER_W_1W(Request_c2f) +DEFAULT_WRAPPER_W_1W(Request_f2c) +DEFAULT_WRAPPER_W_1W(Request_free) +DEFAULT_WRAPPER_W_3W(Request_get_status) +DEFAULT_WRAPPER_W_6W(Rsend) +DEFAULT_WRAPPER_W_7W(Rsend_init) +DEFAULT_WRAPPER_W_6W(Scan) +DEFAULT_WRAPPER_W_8W(Scatter) +DEFAULT_WRAPPER_W_9W(Scatterv) +DEFAULT_WRAPPER_W_7W(Send_init) +/* DEFAULT_WRAPPER_W_6W(Send) */ +/* DEFAULT_WRAPPER_W_12W(Sendrecv) */ +DEFAULT_WRAPPER_W_9W(Sendrecv_replace) +DEFAULT_WRAPPER_W_7W(Ssend_init) +DEFAULT_WRAPPER_W_6W(Ssend) +DEFAULT_WRAPPER_W_1W(Start) +DEFAULT_WRAPPER_W_2W(Startall) +DEFAULT_WRAPPER_W_2W(Status_c2f) +DEFAULT_WRAPPER_W_2W(Status_f2c) +DEFAULT_WRAPPER_W_2W(Status_set_cancelled) +DEFAULT_WRAPPER_W_3W(Status_set_elements) +DEFAULT_WRAPPER_W_4W(Testall) +DEFAULT_WRAPPER_W_5W(Testany) +DEFAULT_WRAPPER_W_3W(Test) +DEFAULT_WRAPPER_W_2W(Test_cancelled) +DEFAULT_WRAPPER_W_5W(Testsome) +DEFAULT_WRAPPER_W_2W(Topo_test) +DEFAULT_WRAPPER_W_1W(Type_c2f) +DEFAULT_WRAPPER_W_1W(Type_commit) +DEFAULT_WRAPPER_W_3W(Type_contiguous) +DEFAULT_WRAPPER_W_10W(Type_create_darray) +DEFAULT_WRAPPER_W_3W(Type_create_f90_complex) +DEFAULT_WRAPPER_W_2W(Type_create_f90_integer) +DEFAULT_WRAPPER_W_3W(Type_create_f90_real) +DEFAULT_WRAPPER_W_5W(Type_create_hindexed) +DEFAULT_WRAPPER_W_5W(Type_create_hvector) +DEFAULT_WRAPPER_W_4W(Type_create_keyval) +DEFAULT_WRAPPER_W_5W(Type_create_indexed_block) +DEFAULT_WRAPPER_W_5W(Type_create_struct) +DEFAULT_WRAPPER_W_7W(Type_create_subarray) +DEFAULT_WRAPPER_W_4W(Type_create_resized) +DEFAULT_WRAPPER_W_2W(Type_delete_attr) +DEFAULT_WRAPPER_W_2W(Type_dup) +DEFAULT_WRAPPER_W_2W(Type_extent) +DEFAULT_WRAPPER_W_1W(Type_free) +DEFAULT_WRAPPER_W_1W(Type_free_keyval) +DEFAULT_WRAPPER_W_1W(Type_f2c) +DEFAULT_WRAPPER_W_4W(Type_get_attr) +DEFAULT_WRAPPER_W_7W(Type_get_contents) +DEFAULT_WRAPPER_W_5W(Type_get_envelope) +DEFAULT_WRAPPER_W_3W(Type_get_extent) +DEFAULT_WRAPPER_W_3W(Type_get_name) +DEFAULT_WRAPPER_W_3W(Type_get_true_extent) +DEFAULT_WRAPPER_W_5W(Type_hindexed) +DEFAULT_WRAPPER_W_5W(Type_hvector) +DEFAULT_WRAPPER_W_5W(Type_indexed) +DEFAULT_WRAPPER_W_2W(Type_lb) +DEFAULT_WRAPPER_W_3W(Type_match_size) +DEFAULT_WRAPPER_W_3W(Type_set_attr) +DEFAULT_WRAPPER_W_2W(Type_set_name) +DEFAULT_WRAPPER_W_2W(Type_size) +DEFAULT_WRAPPER_W_5W(Type_struct) +DEFAULT_WRAPPER_W_2W(Type_ub) +DEFAULT_WRAPPER_W_5W(Type_vector) +DEFAULT_WRAPPER_W_7W(Unpack) +DEFAULT_WRAPPER_W_3W(Unpublish_name) +DEFAULT_WRAPPER_W_7W(Unpack_external) +/* DEFAULT_WRAPPER_W_3W(Waitall) */ +DEFAULT_WRAPPER_W_4W(Waitany) +/* DEFAULT_WRAPPER_W_2W(Wait) */ +DEFAULT_WRAPPER_W_5W(Waitsome) +DEFAULT_WRAPPER_W_1W(Win_c2f) +DEFAULT_WRAPPER_W_2W(Win_call_errhandler) +DEFAULT_WRAPPER_W_1W(Win_complete) +DEFAULT_WRAPPER_W_6W(Win_create) +DEFAULT_WRAPPER_W_2W(Win_create_errhandler) +DEFAULT_WRAPPER_W_4W(Win_create_keyval) +DEFAULT_WRAPPER_W_2W(Win_delete_attr) +DEFAULT_WRAPPER_W_1W(Win_f2c) +DEFAULT_WRAPPER_W_2W(Win_fence) +DEFAULT_WRAPPER_W_1W(Win_free) +DEFAULT_WRAPPER_W_1W(Win_free_keyval) +DEFAULT_WRAPPER_W_4W(Win_get_attr) +DEFAULT_WRAPPER_W_2W(Win_get_errhandler) +DEFAULT_WRAPPER_W_2W(Win_get_group) +DEFAULT_WRAPPER_W_3W(Win_get_name) +DEFAULT_WRAPPER_W_4W(Win_lock) +DEFAULT_WRAPPER_W_3W(Win_post) +DEFAULT_WRAPPER_W_3W(Win_set_attr) +DEFAULT_WRAPPER_W_2W(Win_set_errhandler) +DEFAULT_WRAPPER_W_2W(Win_set_name) +DEFAULT_WRAPPER_W_3W(Win_start) +DEFAULT_WRAPPER_W_2W(Win_test) +DEFAULT_WRAPPER_W_2W(Win_unlock) +DEFAULT_WRAPPER_W_1W(Win_wait) +/* double MPI_Wtick(void) */ +/* double MPI_Wtime(void) */ -UNIMPLEMENTED_WRAPPER(Win_create_errhandler) -UNIMPLEMENTED_WRAPPER(Win_free_errhandler) -UNIMPLEMENTED_WRAPPER(Win_get_errhandler) -UNIMPLEMENTED_WRAPPER(Win_set_errhandler) -NO_OP_WRAPPER(Wtick) -NO_OP_WRAPPER(Wtime) +/*------------------------------------------------------------*/ +/*--- ---*/ +/*--- ---*/ +/*--- ---*/ +/*------------------------------------------------------------*/ /*---------------------------------------------------------------*/ /*--- end mpiwrap.c ---*/