From 00499932564a9d77d42fc3d20e34934d825a3fd4 Mon Sep 17 00:00:00 2001 From: Pedro Gonnet <gonnet@google.com> Date: Mon, 5 Dec 2016 14:07:56 +0100 Subject: [PATCH] move calls to MPI_Irecv to the enqueue_mapper. --- src/scheduler.c | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/src/scheduler.c b/src/scheduler.c index 0d7c8c4754..37fdb253e2 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -1027,6 +1027,25 @@ void scheduler_enqueue_mapper(void *map_data, int num_elements, struct task *tasks = s->tasks; for (int ind = 0; ind < num_elements; ind++) { struct task *t = &tasks[tid[ind]]; + +#ifdef WITH_MPI + /* If this is a recv task, enqueue the MPI call. */ + if (t->type == task_type_recv) { + int err; + if (t->subtype == task_subtype_tend) { + t->buff = malloc(sizeof(int) * t->ci->pcell_size); + err = MPI_Irecv(t->buff, t->ci->pcell_size, MPI_INT, t->ci->nodeID, + t->flags, MPI_COMM_WORLD, &t->req); + } else { + err = MPI_Irecv(t->ci->parts, t->ci->count, part_mpi_type, + t->ci->nodeID, t->flags, MPI_COMM_WORLD, &t->req); + } + if (err != MPI_SUCCESS) { + mpi_error(err, "Failed to emit irecv for particle data."); + } + } +#endif + if (atomic_dec(&t->wait) == 1 && !t->skip) { scheduler_enqueue(s, t); } @@ -1160,17 +1179,17 @@ void scheduler_enqueue(struct scheduler *s, struct task *t) { break; case task_type_recv: #ifdef WITH_MPI - if (t->subtype == task_subtype_tend) { - t->buff = malloc(sizeof(int) * t->ci->pcell_size); - err = MPI_Irecv(t->buff, t->ci->pcell_size, MPI_INT, t->ci->nodeID, - t->flags, MPI_COMM_WORLD, &t->req); - } else { - err = MPI_Irecv(t->ci->parts, t->ci->count, part_mpi_type, - t->ci->nodeID, t->flags, MPI_COMM_WORLD, &t->req); - } - if (err != MPI_SUCCESS) { - mpi_error(err, "Failed to emit irecv for particle data."); - } + // if (t->subtype == task_subtype_tend) { + // t->buff = malloc(sizeof(int) * t->ci->pcell_size); + // err = MPI_Irecv(t->buff, t->ci->pcell_size, MPI_INT, t->ci->nodeID, + // t->flags, MPI_COMM_WORLD, &t->req); + // } else { + // err = MPI_Irecv(t->ci->parts, t->ci->count, part_mpi_type, + // t->ci->nodeID, t->flags, MPI_COMM_WORLD, &t->req); + // } + // if (err != MPI_SUCCESS) { + // mpi_error(err, "Failed to emit irecv for particle data."); + // } // message( "receiving %i parts with tag=%i from %i to %i." , // t->ci->count , t->flags , t->ci->nodeID , s->nodeID ); // fflush(stdout); -- GitLab