From: Augustin Degomme Date: Mon, 11 Mar 2013 15:29:22 +0000 (+0100) Subject: add a cfg:tracing/smpi/internals option, to trace all pt2pt communications during... X-Git-Tag: v3_9_90~412^2~74 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/de76a4439653d092f7c210125e4bd93ed4c59336 add a cfg:tracing/smpi/internals option, to trace all pt2pt communications during a collective one This provide a better view of the pattern, useful for debugging --- diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index e3b4b1c3d3..85338dd29e 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -518,10 +518,10 @@ XBT_PUBLIC(void*) smpi_shared_set_call(const char* func, const char* input, void : smpi_shared_set_call(#func, input, func(__VA_ARGS__))) /* Fortran specific stuff */ -XBT_PUBLIC(int) __attribute__((weak)) smpi_simulated_main__(int argc, char** argv); -XBT_PUBLIC(int) __attribute__((weak)) MAIN__(void); +XBT_PUBLIC(int) __attribute__((weak)) smpi_simulated_main_(int argc, char** argv); +XBT_PUBLIC(int) __attribute__((weak)) MAIN_(void); XBT_PUBLIC(int) smpi_main(int (*realmain) (int argc, char *argv[]),int argc, char *argv[]); -XBT_PUBLIC(void) __attribute__((weak)) user_main__(void); +XBT_PUBLIC(void) __attribute__((weak)) user_main_(void); XBT_PUBLIC(int) smpi_process_index(void); diff --git a/src/instr/instr_config.c b/src/instr/instr_config.c index daf03e961d..f9b94801b5 100644 --- a/src/instr/instr_config.c +++ b/src/instr/instr_config.c @@ -19,6 +19,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_config, instr, "Configuration"); #define OPT_TRACING_SMPI "tracing/smpi" #define OPT_TRACING_SMPI_GROUP "tracing/smpi/group" #define OPT_TRACING_SMPI_COMPUTING "tracing/smpi/computing" +#define OPT_TRACING_SMPI_INTERNALS "tracing/smpi/internals" #define OPT_TRACING_CATEGORIZED "tracing/categorized" #define OPT_TRACING_UNCATEGORIZED "tracing/uncategorized" #define OPT_TRACING_MSG_PROCESS "tracing/msg/process" @@ -39,6 +40,7 @@ static int trace_platform_topology; static int trace_smpi_enabled; static int trace_smpi_grouped; static int trace_smpi_computing; +static int trace_view_internals; static int trace_categorized; static int trace_uncategorized; static int trace_msg_process_enabled; @@ -61,6 +63,7 @@ static void TRACE_getopts(void) trace_smpi_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI); trace_smpi_grouped = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI_GROUP); trace_smpi_computing = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING); + trace_view_internals = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI_INTERNALS); trace_categorized = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_CATEGORIZED); trace_uncategorized = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_UNCATEGORIZED); trace_msg_process_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_MSG_PROCESS); @@ -219,6 +222,10 @@ int TRACE_smpi_is_computing(void) return trace_smpi_computing; } +int TRACE_smpi_view_internals(void) +{ + return trace_view_internals; +} int TRACE_categorized (void) { @@ -337,6 +344,13 @@ void TRACE_global_init(int *argc, char **argv) xbt_cfgelm_int, &default_tracing_smpi_computing, 0, 1, NULL, NULL); + /* smpi internals */ + int default_tracing_smpi_internals = 0; + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI_INTERNALS, + "View internal messages sent by Collective communications in SMPI", + xbt_cfgelm_int, &default_tracing_smpi_internals, 0, 1, + NULL, NULL); + /* tracing categorized resource utilization traces */ int default_tracing_categorized = 0; xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_CATEGORIZED, @@ -476,6 +490,9 @@ void TRACE_help (int detailed) " This option aims at tracing computations in the application, outside SMPI\n" " to allow further study of simulated or real computation time", detailed); + print_line (OPT_TRACING_SMPI_INTERNALS, "Generates tracing events corresponding", + " to point-to-point messages sent by collective communications", + detailed); print_line (OPT_TRACING_MSG_PROCESS, "Trace processes behavior (MSG)", " This option only has effect if this simulator is MSG-based. It traces the\n" " behavior of all categorized MSG processes, grouping them by hosts. This option\n" diff --git a/src/instr/instr_private.h b/src/instr/instr_private.h index 88210b634b..3598c7c1ca 100644 --- a/src/instr/instr_private.h +++ b/src/instr/instr_private.h @@ -159,6 +159,7 @@ void instr_resume_tracing (void); XBT_PUBLIC(int) TRACE_smpi_is_enabled(void); XBT_PUBLIC(int) TRACE_smpi_is_grouped(void); XBT_PUBLIC(int) TRACE_smpi_is_computing(void); +XBT_PUBLIC(int) TRACE_smpi_view_internals(void); /* from resource_utilization.c */ void TRACE_surf_host_set_utilization(const char *resource, diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c index 1d5e8052c6..979bb7fc12 100644 --- a/src/smpi/smpi_base.c +++ b/src/smpi/smpi_base.c @@ -317,6 +317,13 @@ void smpi_mpi_start(MPI_Request request) xbt_assert(!request->action, "Cannot (re)start a non-finished communication"); if(request->flags & RECV) { + #ifdef HAVE_TRACING + int rank = smpi_process_index(); + if (TRACE_smpi_view_internals()) { + TRACE_smpi_computing_out(rank); + TRACE_smpi_ptp_in(rank, 0, rank, __FUNCTION__); + } + #endif print_request("New recv", request); if (request->size < sg_cfg_get_int("smpi/async_small_thres")) mailbox = smpi_process_mailbox_small(); @@ -336,7 +343,19 @@ void smpi_mpi_start(MPI_Request request) } else { + + + + int receiver = smpi_group_index(smpi_comm_group(request->comm), request->dst); + + #ifdef HAVE_TRACING + int rank = smpi_process_index(); + if (TRACE_smpi_view_internals()) { + TRACE_smpi_ptp_in(rank, rank, receiver, __FUNCTION__); + TRACE_smpi_send(rank, rank, receiver); + } + #endif /* if(receiver == MPI_UNDEFINED) {*/ /* XBT_WARN("Trying to send a message to a wrong rank");*/ /* return;*/ @@ -390,6 +409,7 @@ void smpi_mpi_start(MPI_Request request) /* FIXME: detached sends are not traceable (request->action == NULL) */ if (request->action) simcall_set_category(request->action, TRACE_internal_smpi_get_category()); + #endif } @@ -558,8 +578,31 @@ static void finish_wait(MPI_Request * request, MPI_Status * status) if(req->detached == 0) free(req->buf); } smpi_datatype_unuse(datatype); + +#ifdef HAVE_TRACING + if (TRACE_smpi_view_internals()) { + int rank = smpi_process_index(); + TRACE_smpi_ptp_out(rank, rank, 0, __FUNCTION__); + } +#endif + } +#ifdef HAVE_TRACING + if (TRACE_smpi_view_internals()) { + if(req->flags & RECV) + { + int rank = smpi_process_index(); + + //the src may not have been known at the beginning of the recv (MPI_ANY_SOURCE) + TRACE_smpi_ptp_out(rank, 0, rank, __FUNCTION__); + int src_traced = smpi_group_index(smpi_comm_group(req->comm), req->src); + TRACE_smpi_recv(rank, src_traced, rank); + TRACE_smpi_computing_in(rank); + } + } +#endif + if(req->detached_sender!=NULL){ smpi_mpi_request_free(&(req->detached_sender)); }