Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
rewrite the MPI execution sampling facility (previous implem was deeply bugged)
[simgrid.git] / src / smpi / smpi_global.c
index 470be9c..5a2c2ce 100644 (file)
@@ -50,7 +50,7 @@ void smpi_process_init(int *argc, char ***argv)
     proc = SIMIX_process_self();
     index = atoi((*argv)[1]);
     data = smpi_process_remote_data(index);
-    SIMIX_req_process_set_data(proc, data);
+    simcall_process_set_data(proc, data);
     if (*argc > 2) {
       free((*argv)[1]);
       memmove(&(*argv)[1], &(*argv)[2], sizeof(char *) * (*argc - 2));
@@ -77,7 +77,7 @@ 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);
+    simcall_process_sleep(1);
   }
 }
 
@@ -150,36 +150,31 @@ smx_rdv_t smpi_process_remote_mailbox(int index) {
   return data->mailbox;
 }
 
-xbt_os_timer_t smpi_process_timer(void)
-{
+xbt_os_timer_t smpi_process_timer(void) {
   smpi_process_data_t data = smpi_process_data();
 
   return data->timer;
 }
 
-void smpi_process_simulated_start(void)
-{
+void smpi_process_simulated_start(void) {
   smpi_process_data_t data = smpi_process_data();
 
   data->simulated = SIMIX_get_clock();
 }
 
-double smpi_process_simulated_elapsed(void)
-{
+double smpi_process_simulated_elapsed(void) {
   smpi_process_data_t data = smpi_process_data();
 
   return SIMIX_get_clock() - data->simulated;
 }
 
-MPI_Comm smpi_process_comm_self(void)
-{
+MPI_Comm smpi_process_comm_self(void) {
   smpi_process_data_t data = smpi_process_data();
 
   return data->comm_self;
 }
 
-void print_request(const char *message, MPI_Request request)
-{
+void print_request(const char *message, MPI_Request request) {
   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);
@@ -199,7 +194,7 @@ void smpi_global_init(void)
     process_data[i]->index = i;
     process_data[i]->argc = NULL;
     process_data[i]->argv = NULL;
-    process_data[i]->mailbox = SIMIX_req_rdv_create(get_mailbox_name(name, i));
+    process_data[i]->mailbox = simcall_rdv_create(get_mailbox_name(name, i));
     process_data[i]->timer = xbt_os_timer_new();
     group = smpi_group_new(1);
     process_data[i]->comm_self = smpi_comm_new(group);
@@ -223,11 +218,13 @@ void smpi_global_destroy(void)
   for (i = 0; i < count; i++) {
     smpi_comm_destroy(process_data[i]->comm_self);
     xbt_os_timer_free(process_data[i]->timer);
-    SIMIX_req_rdv_destroy(process_data[i]->mailbox);
+    simcall_rdv_destroy(process_data[i]->mailbox);
     xbt_free(process_data[i]);
   }
   xbt_free(process_data);
   process_data = NULL;
+
+  smpi_free_static();
 }
 
 /* Fortran specific stuff */
@@ -246,29 +243,23 @@ int MAIN__(void)
 {
   srand(SMPI_RAND_SEED);
 
-  double default_reference_speed = 20000.0;
-  xbt_cfg_register(&_surf_cfg_set, "smpi/running_power",
-                   "Power of the host running the simulation (in flop/s). Used to bench the operations.",
-                   xbt_cfgelm_double, &default_reference_speed, 1, 1, NULL,
-                   NULL);
-
-  int default_display_timing = 0;
-  xbt_cfg_register(&_surf_cfg_set, "smpi/display_timing",
-                   "Boolean indicating whether we should display the timing after simulation.",
-                   xbt_cfgelm_int, &default_display_timing, 1, 1, NULL,
-                   NULL);
-
-  double default_threshold = 1e-6;
-  xbt_cfg_register(&_surf_cfg_set, "smpi/cpu_threshold",
-                   "Minimal computation time (in seconds) not discarded.",
-                   xbt_cfgelm_double, &default_threshold, 1, 1, NULL,
-                   NULL);
-
   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 */
+  /* Hack to ensure that smpicc can pretend to be a simple compiler. Particularly handy to pass it to the configuration tools */
     return 0;
   }
 
+  /* Connect log categories.  See xbt/log.c */
+  XBT_LOG_CONNECT(smpi);
+  XBT_LOG_CONNECT(smpi_base);
+  XBT_LOG_CONNECT(smpi_bench);
+  XBT_LOG_CONNECT(smpi_coll);
+  XBT_LOG_CONNECT(smpi_comm);
+  XBT_LOG_CONNECT(smpi_group);
+  XBT_LOG_CONNECT(smpi_kernel);
+  XBT_LOG_CONNECT(smpi_mpi);
+  XBT_LOG_CONNECT(smpi_mpi_dt);
+  XBT_LOG_CONNECT(smpi_pmpi);
+
 #ifdef HAVE_TRACING
   TRACE_global_init(&xargc, xargv);
 #endif
@@ -276,7 +267,7 @@ int MAIN__(void)
   SIMIX_global_init(&xargc, xargv);
 
 #ifdef HAVE_TRACING
-  TRACE_smpi_start();
+  TRACE_start();
 #endif
 
   // parse the platform file: get the host list
@@ -302,7 +293,7 @@ int MAIN__(void)
   smpi_global_destroy();
 
 #ifdef HAVE_TRACING
-  TRACE_smpi_release();
+  TRACE_end();
 #endif
 
   SIMIX_clean();