Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[SMPI] Remove outdated comment.
[simgrid.git] / src / smpi / smpi_base.cpp
index a3e6348..011c539 100644 (file)
@@ -73,8 +73,8 @@ static int match_send(void* a, void* b,smx_synchro_t ignored) {
 // These are taken from surf/network.c and generalized to have more values for each factor
 typedef struct s_smpi_factor_multival *smpi_os_factor_multival_t;
 typedef struct s_smpi_factor_multival { // FIXME: this should be merged (deduplicated) with s_smpi_factor defined in network_smpi.c
-  long factor;
-  std::vector<double> values; /** We allocate arbitrarily 4 elements **/
+  long factor=0;
+  std::vector<double> values;
 } s_smpi_factor_multival_t;
 
 std::vector<s_smpi_factor_multival_t> smpi_os_values;
@@ -128,22 +128,22 @@ static std::vector<s_smpi_factor_multival_t> parse_factor(const char *smpi_coef_
       char *errmsg;
 
       if (factor_iter == factor_values.begin()) { /* first element */
-        errmsg = bprintf("Invalid factor in chunk #%lu: %%s", smpi_factor.size()+1);
+        errmsg = bprintf("Invalid factor in chunk #%zu: %%s", smpi_factor.size()+1);
         fact.factor = xbt_str_parse_int(factor_iter->c_str(), errmsg);
       }
       else {
-        errmsg = bprintf("Invalid factor value %d in chunk #%lu: %%s", iteration, smpi_factor.size()+1);
+        errmsg = bprintf("Invalid factor value %d in chunk #%zu: %%s", iteration, smpi_factor.size()+1);
         fact.values.push_back(xbt_str_parse_double((*factor_iter).c_str(), errmsg));
       }
       xbt_free(errmsg);
     }
 
     smpi_factor.push_back(fact);
-    XBT_DEBUG("smpi_factor:\t%ld : %lu values, first: %f", fact.factor, smpi_factor.size(), fact.values[0]);
+    XBT_DEBUG("smpi_factor:\t%ld : %zu values, first: %f", fact.factor, smpi_factor.size(), fact.values[0]);
   }
   std::sort(smpi_factor.begin(), smpi_factor.end(), &factor_cmp);
   for (auto& fact : smpi_factor) {
-    XBT_DEBUG("smpi_factor:\t%ld : %lu values, first: %f", fact.factor, smpi_factor.size() ,fact.values[0]);
+    XBT_DEBUG("smpi_factor:\t%ld : %zu values, first: %f", fact.factor, smpi_factor.size() ,fact.values[0]);
   }
 
   return smpi_factor;
@@ -775,44 +775,40 @@ int smpi_mpi_testany(int count, MPI_Request requests[], int *index, MPI_Status *
 {
   xbt_dynar_t comms;
   int i;
-  int* map;
   int flag = 0;
-  int size = 0;
 
   *index = MPI_UNDEFINED;
   comms = xbt_dynar_new(sizeof(smx_synchro_t), nullptr);
-  map = xbt_new(int, count);
+  std::vector<int> map; /** Maps all matching comms back to their location in requests **/
   for(i = 0; i < count; i++) {
     if ((requests[i] != MPI_REQUEST_NULL) && requests[i]->action && !(requests[i]->flags & PREPARED)) {
        xbt_dynar_push(comms, &requests[i]->action);
-       map[size] = i;
-       size++;
+       map.push_back(i);
     }
   }
-  if(size > 0) {
+  if(!map.empty()) {
     //multiplier to the sleeptime, to increase speed of execution, each failed testany will increase it
     static int nsleeps = 1;
     if(smpi_test_sleep > 0) 
       simcall_process_sleep(nsleeps*smpi_test_sleep);
 
-    i = simcall_comm_testany(comms);
-    // not MPI_UNDEFINED, as this is a simix return code
-    if(i != -1) {
-      *index = map[i];
+    i = simcall_comm_testany(comms); // The i-th element in comms matches!
+    if (i != -1) { // -1 is not MPI_UNDEFINED but a SIMIX return code. (nothing matches)
+      *index = map[i]; 
       finish_wait(&requests[*index], status);
-      if (requests[*index] != MPI_REQUEST_NULL && (requests[*index]->flags & NON_PERSISTENT))
-      requests[*index] = MPI_REQUEST_NULL;
-      flag = 1;
-      nsleeps=1;
-    }else{
+      flag             = 1;
+      nsleeps          = 1;
+      if (requests[*index] != MPI_REQUEST_NULL && (requests[*index]->flags & NON_PERSISTENT)) {
+        requests[*index] = MPI_REQUEST_NULL;
+      }
+    } else {
       nsleeps++;
     }
-  }else{
+  } else {
       //all requests are null or inactive, return true
-      flag=1;
+      flag = 1;
       smpi_empty_status(status);
   }
-  xbt_free(map);
   xbt_dynar_free(&comms);
 
   return flag;