X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a7b919934acd6996ea2ff9efd900edee21da3329..1ae612ef301a26795068505cf761169ed29a5451:/src/smpi/smpi_global.c diff --git a/src/smpi/smpi_global.c b/src/smpi/smpi_global.c index b8938fa95d..470be9c857 100644 --- a/src/smpi/smpi_global.c +++ b/src/smpi/smpi_global.c @@ -5,6 +5,7 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include +#include #include #include "private.h" @@ -58,7 +59,7 @@ void smpi_process_init(int *argc, char ***argv) (*argc)--; data->argc = argc; data->argv = argv; - DEBUG2("<%d> New process in the game: %p", index, proc); + XBT_DEBUG("<%d> New process in the game: %p", index, proc); } } @@ -66,7 +67,18 @@ void smpi_process_destroy(void) { int index = smpi_process_index(); - DEBUG1("<%d> Process left the game", index); + XBT_DEBUG("<%d> Process left the game", index); +} + +/** + * @brief Prepares the current process for termination. + */ +void smpi_process_finalize(void) +{ + // wait for all pending asynchronous comms to finish + while (SIMIX_process_has_pending_comms(SIMIX_process_self())) { + SIMIX_req_process_sleep(1); + } } int smpi_process_argc(void) { @@ -94,14 +106,11 @@ int smpi_process_getarg(integer* index, char* dst, ftnlen len) { return 0; } -int smpi_global_rank(void) { - return smpi_process_index(); -} - int smpi_global_size(void) { char* value = getenv("SMPI_GLOBAL_SIZE"); if(!value) { + fprintf(stderr, "Please set env var SMPI_GLOBAL_SIZE to expected number of processes.\n"); abort(); } return atoi(value); @@ -109,7 +118,7 @@ int smpi_global_size(void) { smpi_process_data_t smpi_process_data(void) { - return SIMIX_req_process_get_data(SIMIX_process_self()); + return SIMIX_process_self_get_data(SIMIX_process_self()); } smpi_process_data_t smpi_process_remote_data(int index) @@ -171,7 +180,7 @@ MPI_Comm smpi_process_comm_self(void) void print_request(const char *message, MPI_Request request) { - DEBUG8("%s request %p [buf = %p, size = %zu, src = %d, dst = %d, tag = %d, flags = %x]", + XBT_DEBUG("%s request %p [buf = %p, size = %zu, src = %d, dst = %d, tag = %d, flags = %x]", message, request, request->buf, request->size, request->src, request->dst, request->tag, request->flags); } @@ -182,8 +191,7 @@ void smpi_global_init(void) MPI_Group group; char name[MAILBOX_NAME_MAXLEN]; - SIMIX_comm_set_copy_data_callback - (&SIMIX_comm_copy_buffer_callback); + SIMIX_comm_set_copy_data_callback(&smpi_comm_copy_data_callback); process_count = SIMIX_process_count(); process_data = xbt_new(smpi_process_data_t, process_count); for (i = 0; i < process_count; i++) { @@ -227,12 +235,10 @@ void smpi_global_destroy(void) /* With smpiff, the following weak symbols are replaced by those in libf2c */ int __attribute__((weak)) xargc; char** __attribute__((weak)) xargv; -int fortran = 1; int __attribute__((weak)) main(int argc, char** argv) { xargc = argc; xargv = argv; - fortran = 0; return MAIN__(); } @@ -258,10 +264,9 @@ int MAIN__(void) xbt_cfgelm_double, &default_threshold, 1, 1, NULL, NULL); - if(fortran) { - /* Force thread contexts with fortran code */ - extern void SIMIX_ctx_thread_factory_init(smx_context_factory_t *factory); - smx_factory_initializer_to_use = SIMIX_ctx_thread_factory_init; + if(getenv("SMPI_PRETEND_CC") != NULL) { + /* Hack to ensure that smpicc can pretend to be a simple compiler. Particularly handy to pass it to the configuration tools */ + return 0; } #ifdef HAVE_TRACING @@ -277,7 +282,7 @@ int MAIN__(void) // parse the platform file: get the host list SIMIX_create_environment(xargv[1]); - SIMIX_function_register("smpi_simulated_main", smpi_simulated_main); + SIMIX_function_register_default(smpi_simulated_main); SIMIX_launch_application(xargv[2]); smpi_global_init(); @@ -292,7 +297,7 @@ int MAIN__(void) SIMIX_run(); if (xbt_cfg_get_int(_surf_cfg_set, "smpi/display_timing")) - INFO1("simulation time %g", SIMIX_get_clock()); + XBT_INFO("Simulation time: %g seconds.", SIMIX_get_clock()); smpi_global_destroy();