X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f905895de23cb0b3fe314fdbc5a7a827588dec98..4695eeed280e6d07c8eeabfb9e106e93825c8503:/src/smpi/smpi_sender.c diff --git a/src/smpi/smpi_sender.c b/src/smpi/smpi_sender.c index 7b3e609d3d..c3cee349bf 100644 --- a/src/smpi/smpi_sender.c +++ b/src/smpi/smpi_sender.c @@ -4,11 +4,10 @@ int smpi_sender(int argc, char **argv) { smx_process_t self; smx_host_t shost; - int rank; + int index; xbt_fifo_t request_queue; smx_mutex_t request_queue_mutex; - int size; int running_hosts_count; @@ -21,7 +20,7 @@ int smpi_sender(int argc, char **argv) smpi_received_message_t message; - int drank; + int dindex; smx_process_t receiver_process; @@ -35,18 +34,17 @@ int smpi_sender(int argc, char **argv) } SIMIX_mutex_unlock(smpi_global->start_stop_mutex); - rank = smpi_mpi_comm_rank(smpi_mpi_global->mpi_comm_world, shost); - size = smpi_mpi_comm_size(smpi_mpi_global->mpi_comm_world); + index = smpi_host_index(); - request_queue = smpi_global->pending_send_request_queues[rank]; - request_queue_mutex = smpi_global->pending_send_request_queues_mutexes[rank]; + request_queue = smpi_global->pending_send_request_queues[index]; + request_queue_mutex = smpi_global->pending_send_request_queues_mutexes[index]; - smpi_global->sender_processes[rank] = self; + smpi_global->sender_processes[index] = self; // wait for all nodes to signal initializatin complete SIMIX_mutex_lock(smpi_global->start_stop_mutex); smpi_global->ready_process_count++; - if (smpi_global->ready_process_count < 3 * size) { + if (smpi_global->ready_process_count < 3 * smpi_global->host_count) { SIMIX_cond_wait(smpi_global->start_stop_cond, smpi_global->start_stop_mutex); } else { SIMIX_cond_broadcast(smpi_global->start_stop_cond); @@ -68,18 +66,18 @@ int smpi_sender(int argc, char **argv) SIMIX_mutex_lock(request->mutex); message->comm = request->comm; - message->src = request->src; - message->dst = request->dst; + message->src = smpi_mpi_comm_rank(request->comm); message->tag = request->tag; message->buf = xbt_malloc(request->datatype->size * request->count); memcpy(message->buf, request->buf, request->datatype->size * request->count); + message->data = request->data; - dhost = request->comm->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]; - SIMIX_mutex_lock(smpi_global->received_message_queues_mutexes[drank]); - xbt_fifo_push(smpi_global->received_message_queues[drank], message); - SIMIX_mutex_unlock(smpi_global->received_message_queues_mutexes[drank]); + SIMIX_mutex_lock(smpi_global->received_message_queues_mutexes[dindex]); + xbt_fifo_push(smpi_global->received_message_queues[dindex], message); + SIMIX_mutex_unlock(smpi_global->received_message_queues_mutexes[dindex]); request->completed = 1; @@ -94,7 +92,7 @@ int smpi_sender(int argc, char **argv) //SIMIX_action_destroy(action); // wake up receiver if necessary - receiver_process = smpi_global->receiver_processes[drank]; + receiver_process = smpi_global->receiver_processes[dindex]; if (SIMIX_process_is_suspended(receiver_process)) { SIMIX_process_resume(receiver_process); }