- dhost = request->comm->simdata->hosts[request->dst];
- drank = smpi_mpi_comm_rank(smpi_mpi_global->mpi_comm_world, dhost);
+ dindex = request->comm->rank_to_index_map[request->dst];
+ dhost = smpi_global->hosts[dindex];
+
+ message->forward = (request->forward - 1) / 2;
+ request->forward = request->forward / 2;
+
+ if (0 < request->forward) {
+ request->dst = (request->dst + message->forward + 1) % request->comm->size;
+ SIMIX_mutex_lock(request_queue_mutex);
+ xbt_fifo_push(request_queue, request);
+ SIMIX_mutex_unlock(request_queue_mutex);
+ } else {
+ request->completed = 1;
+ }
+
+ action = SIMIX_action_communicate(shost, dhost, "communication", request->datatype->size * request->count, -1.0);