Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add a cfg:tracing/smpi/internals option, to trace all pt2pt communications during...
authorAugustin Degomme <degomme@idpann.imag.fr>
Mon, 11 Mar 2013 15:29:22 +0000 (16:29 +0100)
committerAugustin Degomme <degomme@idpann.imag.fr>
Fri, 29 Mar 2013 09:48:02 +0000 (10:48 +0100)
This provide a better view of the pattern, useful for debugging

include/smpi/smpi.h
src/instr/instr_config.c
src/instr/instr_private.h
src/smpi/smpi_base.c

index e3b4b1c..85338dd 100644 (file)
@@ -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);
 
index daf03e9..f9b9480 100644 (file)
@@ -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"
index 88210b6..3598c7c 100644 (file)
@@ -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,
index 1d5e805..979bb7f 100644 (file)
@@ -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));
   }