unsigned int iter = 0;
s_smpi_factor_t fact;
double current=0.0;
+ // Iterate over all the sections that were specified and find the right
+ // value. (fact.factor represents the interval sizes; we want to find the
+ // section that has fact.factor <= size and no other such fact.factor <= size)
+ // Note: parse_factor() (used before) already sorts the dynar we iterate over!
xbt_dynar_foreach(smpi_os_values, iter, fact) {
- if (size <= fact.factor) {
+ if (size <= fact.factor) { // Values already too large, use the previously
+ // computed value of current!
XBT_DEBUG("os : %f <= %ld return %f", size, fact.factor, current);
return current;
}else{
- current=fact.values[0]+fact.values[1]*size;
+ // If the next section is too large, the current section must be used.
+ // Hence, save the cost, as we might have to use it.
+ current = fact.values[0]+fact.values[1]*size;
}
}
XBT_DEBUG("os : %f > %ld return %f", size, fact.factor, current);
unsigned int iter = 0;
s_smpi_factor_t fact;
double current=0.0;
+ // Iterate over all the sections that were specified and find the right
+ // value. (fact.factor represents the interval sizes; we want to find the
+ // section that has fact.factor <= size and no other such fact.factor <= size)
+ // Note: parse_factor() (used before) already sorts the dynar we iterate over!
xbt_dynar_foreach(smpi_ois_values, iter, fact) {
- if (size <= fact.factor) {
+ if (size <= fact.factor) { // Values already too large, use the previously
+ // computed value of current!
XBT_DEBUG("ois : %f <= %ld return %f", size, fact.factor, current);
return current;
}else{
- current=fact.values[0]+fact.values[1]*size;
+ // If the next section is too large, the current section must be used.
+ // Hence, save the cost, as we might have to use it.
+ current = fact.values[0]+fact.values[1]*size;
}
}
XBT_DEBUG("ois : %f > %ld return %f", size, fact.factor, current);
unsigned int iter = 0;
s_smpi_factor_t fact;
double current=0.0;
+ // Iterate over all the sections that were specified and find the right
+ // value. (fact.factor represents the interval sizes; we want to find the
+ // section that has fact.factor <= size and no other such fact.factor <= size)
+ // Note: parse_factor() (used before) already sorts the dynar we iterate over!
xbt_dynar_foreach(smpi_or_values, iter, fact) {
- if (size <= fact.factor) {
+ if (size <= fact.factor) { // Values already too large, use the previously
+ // computed value of current!
XBT_DEBUG("or : %f <= %ld return %f", size, fact.factor, current);
return current;
- }else
+ } else {
+ // If the next section is too large, the current section must be used.
+ // Hence, save the cost, as we might have to use it.
current=fact.values[0]+fact.values[1]*size;
+ }
}
XBT_DEBUG("or : %f > %ld return %f", size, fact.factor, current);
print_request("New iprobe", request);
// We have to test both mailboxes as we don't know if we will receive one one or another
- if (sg_cfg_get_int("smpi/async_small_thres")>0){
- mailbox = smpi_process_mailbox_small();
- XBT_DEBUG("trying to probe the perm recv mailbox");
- request->action = simcall_comm_iprobe(mailbox, 0, request->src, request->tag, &match_recv, (void*)request);
- }
- if (request->action==NULL){
- mailbox = smpi_process_mailbox();
- XBT_DEBUG("trying to probe the other mailbox");
- request->action = simcall_comm_iprobe(mailbox, 0, request->src,request->tag, &match_recv, (void*)request);
- }
+ if (sg_cfg_get_int("smpi/async_small_thres")>0){
+ mailbox = smpi_process_mailbox_small();
+ XBT_DEBUG("trying to probe the perm recv mailbox");
+ request->action = simcall_comm_iprobe(mailbox, 0, request->src, request->tag, &match_recv, (void*)request);
+ }
+ if (request->action==NULL){
+ mailbox = smpi_process_mailbox();
+ XBT_DEBUG("trying to probe the other mailbox");
+ request->action = simcall_comm_iprobe(mailbox, 0, request->src,request->tag, &match_recv, (void*)request);
+ }
- if(request->action){
+ if (request->action){
MPI_Request req = (MPI_Request)SIMIX_comm_get_src_data(request->action);
*flag = 1;
if(status != MPI_STATUS_IGNORE && !(req->flags & PREPARED)) {
status->MPI_SOURCE = smpi_group_rank(smpi_comm_group(comm), req->src);
- status->MPI_TAG = req->tag;
- status->MPI_ERROR = MPI_SUCCESS;
- status->count = req->real_size;
+ status->MPI_TAG = req->tag;
+ status->MPI_ERROR = MPI_SUCCESS;
+ status->count = req->real_size;
}
nsleeps=1;//reset the number of sleeps we will do next time
}
else {
- *flag = 0;
- nsleeps++;
+ *flag = 0;
+ nsleeps++;
}
smpi_mpi_request_free(&request);